A comprehensive Stream Deck plugin for Twitch moderators to manage chat, AutoMod, stream settings, announcements, and more directly from their Stream Deck device.
- Clear Chat - Delete all messages from chat
- Slow Mode Toggle - Toggle slow mode on/off with configurable duration
- Emote-Only Mode - Toggle emote-only mode
- Shield Mode - Toggle Shield Mode for extra protection
- Approve AutoMod - Approve the next held message
- Deny AutoMod - Deny the next held message
- Clear AutoMod Queue - Approve all held messages at once
- Create Stream Marker - Add a marker to your VOD
- Create Clip - Instantly create a clip
- Game Category Presets (x5) - Quick category changes with 5 preset slots
- Blue Announcement - Stream event notifications
- Purple Announcement - Rules reminders
- Orange Announcement - Break notifications
- Green Announcement - Stream ending announcements
- Shoutout Presets (x5) - Quick shoutouts with 5 preset streamers
- End Active Poll - End the currently running poll
- Cancel Prediction - Cancel and refund active prediction
- Fulfill Next Redemption - Mark next redemption as fulfilled
- Refund Next Redemption - Cancel and refund next redemption
- Complete All Redemptions - Fulfill all pending redemptions
- Stream Status - Live/offline with viewer count
- Follower Count - Current follower count
- Subscriber Count - Current subscriber count
- Chat Mode Indicator - Active chat modes (S/E/F/R)
- Shield Mode Status - Shield mode active/inactive
- AutoMod Level - Current AutoMod level (0-4)
- Active Poll/Prediction - Shows active engagement
- Next Ad Timer - Countdown to next scheduled ad
Total: 36 actions across all categories
- Stream Deck Software 6.4 or later
- Node.js 20.x or later
- macOS 10.15+ or Windows 10+
- Twitch Account with moderator permissions
- Download the latest
.streamDeckPluginfile from the Releases page - Double-click the file to install it in Stream Deck
- The plugin will appear in the Stream Deck actions list
-
Clone this repository:
git clone https://github.com/yourusername/TwitchMod4Streamdeck.git cd TwitchMod4Streamdeck -
Install dependencies:
npm install
-
Build the plugin:
npm run build
-
Link the plugin to Stream Deck (macOS):
ln -s $(pwd)/twitch-moderator-tools.sdPlugin ~/Library/Application\ Support/com.elgato.StreamDeck/Plugins/
Or (Windows):
mklink /D "%appdata%\Elgato\StreamDeck\Plugins\twitch-moderator-tools.sdPlugin" "$(pwd)\twitch-moderator-tools.sdPlugin"
-
Restart Stream Deck
- Visit Twitch Developer Console
- Click "Register Your Application"
- Fill in the details:
- Name: Your plugin name (e.g., "My Stream Deck Mod Tools")
- OAuth Redirect URLs:
http://localhost:3000/callback - Category: Application Integration
- Copy the Client ID - you'll need this for the plugin
- Drag any action from the Twitch Moderator Tools category onto your Stream Deck
- Click the action to open the property inspector
- Enter your Twitch Client ID
- Enter the Broadcaster Channel Username (the channel you're moderating)
- Click Save Settings
- Click the Authenticate with Twitch button in the global settings
- Your browser will open to the Twitch authorization page
- Click Authorize to grant permissions
- The plugin will save your authentication tokens securely
The plugin requests the following permissions:
moderator:manage:chat_messages- Clear chat, delete messagesmoderator:manage:chat_settings- Slow mode, emote-only, follower modemoderator:manage:automod- AutoMod approvals/denialsmoderator:manage:shield_mode- Shield Mode controlchannel:manage:broadcast- Stream markers, category changesclips:edit- Create clipsmoderator:read:followers- Follower countchannel:read:subscriptions- Subscriber countchannel:read:redemptions- View redemptionschannel:manage:redemptions- Fulfill/refund redemptionsmoderator:manage:announcements- Send announcementsmoderator:manage:shoutouts- Send shoutoutschannel:manage:polls- Manage pollschannel:manage:predictions- Manage predictionschannel:read:ads- Ad schedule info
Slow Mode Toggle:
- Configure duration (3-120 seconds) in the property inspector
- Button shows ON/OFF state
- Default: 30 seconds
Game Category Presets:
- Configure each preset with a game name
- Enter the exact game name as it appears on Twitch
- Example: "Just Chatting", "League of Legends", etc.
- Customize the message text for each announcement
- Colors are pre-configured (Blue, Purple, Orange, Green)
- Messages can be changed in the property inspector
- Configure each preset with a streamer's username
- Enter the exact Twitch username
- Example: "shroud", "pokimane", etc.
TwitchMod4Streamdeck/
├── src/ # TypeScript source files
│ ├── actions/ # All action implementations
│ │ ├── chat/ # Chat management actions
│ │ ├── automod/ # AutoMod actions
│ │ ├── stream/ # Stream management actions
│ │ ├── announcements/ # Announcement & shoutout actions
│ │ ├── polls-predictions/ # Poll & prediction actions
│ │ ├── redemptions/ # Redemption actions
│ │ └── indicators/ # Status indicator actions
│ ├── api/ # Twitch API client & auth
│ └── utils/ # Utilities & helpers
├── twitch-moderator-tools.sdPlugin/ # Plugin bundle
│ ├── bin/ # Compiled JavaScript
│ ├── imgs/ # Icons and images
│ └── ui/ # Property inspector HTML
└── package.json
# Install dependencies
npm install
# Build once
npm run build
# Build and watch for changes
npm run watch
# Clean build artifacts
npm run clean- Create a new action file in
src/actions/[category]/ - Extend
SingletonActionfrom@elgato/streamdeck - Implement
onKeyDownand other lifecycle methods - Add the action to
manifest.json - Register the action in
src/plugin.ts - Create an SVG icon in
imgs/actions/ - Create property inspector UI if needed in
ui/
Problem: "Not authenticated" error when using actions
- Solution: Click the "Authenticate with Twitch" button in global settings
- Make sure you've authorized all requested scopes
Problem: Actions stop working after some time
- Solution: Tokens may have expired. Re-authenticate with Twitch
Problem: "API Error" showing on button
- Solution: Check your internet connection
- Verify the broadcaster username is correct
- Check Twitch API status at https://devstatus.twitch.tv
Problem: "Rate Limited" message
- Solution: Wait a few seconds. The plugin has built-in rate limiting
- Avoid spamming actions too quickly
Problem: Game category preset not working
- Solution: Ensure the game name is spelled exactly as it appears on Twitch
- Try searching on Twitch first to verify the exact name
Problem: Shoutout not working
- Solution: Verify the username is correct (without @)
- Ensure the target user exists on Twitch
Problem: Status indicators not updating
- Solution: Indicators update every 30-60 seconds
- Try removing and re-adding the action
The plugin respects Twitch's API rate limits:
- Limit: 800 points per minute
- Built-in: Automatic request queuing
- Feedback: "Rate Limited" message if limits are hit
- OAuth tokens are stored securely using Stream Deck's settings API
- Tokens are never logged or exposed
- All API calls use HTTPS
- PKCE flow for enhanced security
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - see LICENSE file for details
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Twitch API: Twitch Developer Documentation
- Initial release
- 36 moderation actions
- OAuth 2.0 with PKCE authentication
- Rate limiting and error handling
- Status indicators with auto-refresh
- Built with the Elgato Stream Deck SDK
- Powered by the Twitch API
- Icons designed for clarity and quick recognition
Made with ❤️ for Twitch moderators everywhere