A Stream Deck plugin providing convenient Microsoft Teams meeting controls directly from your Elgato Stream Deck. Based on zerm (the Zoom version).
- Mute Toggle: Toggle your Teams audio mute status with a single button press
- Video Toggle: Toggle your Teams camera/video with a single button press
- Screen Share: Start or stop screen sharing in Teams meetings
- Focus Teams: Bring the Teams application to the foreground instantly
- Leave Meeting: Leave the current Teams meeting with a single button press
- Works even when Teams is not the active application
- macOS 12+ (uses AppleScript — not supported on Windows)
- Stream Deck Software (minimum version 6.4)
- Microsoft Teams desktop client (with default keyboard shortcuts)
- Node.js v20+ (for development)
| Action | Shortcut |
|---|---|
| Mute Toggle | ⇧⌘M |
| Video Toggle | ⇧⌘O |
| Screen Share | ⇧⌘E |
| Leave Meeting | ⇧⌘B |
Note: These are the default Teams keyboard shortcuts. If you've customized them, the plugin will not work correctly.
- Clone this repository
- Run
npm installto install dependencies - Run
./script/buildto build and install the plugin
For information on packaging and releasing this plugin to the Stream Deck Store, see the Release Documentation.
For developers wanting to extend or modify this plugin:
- Run
./script/runfor development with live reloading - Run
./script/convert-iconsto convert SVG icons to PNG format - Check
.github/copilot-instructions.mdfor detailed developer guidance
The plugin uses SVG files as the source for all icons, which are then converted to PNG files during the build process. To modify icons:
- Edit the SVG files in
com.max-beizer.elgato-teams-video.sdPlugin/imgs/actions/[action-name]/ - Run
./script/buildwhich automatically converts SVGs to PNGs before building using ImageMagick'smagickcommand
The plugin uses AppleScript to:
- Remember which application is currently active
- Briefly activate Microsoft Teams
- Send keyboard shortcuts to control Teams
- Return to the original application
Since Microsoft Teams may not expose menu bar items to AppleScript's System Events, this plugin uses optimistic state tracking — it assumes each button press toggles the state and tracks it in-plugin. State resets to defaults when the Stream Deck profile loads.
Caveat: If you toggle mute/video/share directly in Teams (not via Stream Deck), the button state may drift out of sync. Reloading the Stream Deck profile will reset all states.
src/
plugin.ts # Entry point — registers all actions
teams-utils.ts # Shared Teams process detection & AppleScript helpers
actions/
teams-mute-toggle.ts # Mute toggle implementation
teams-video-toggle.ts # Video toggle implementation
teams-share-screen.ts # Screen share implementation
teams-focus.ts # Focus Teams implementation
teams-leave-meeting.ts # Leave meeting implementation
com.max-beizer.elgato-teams-video.sdPlugin/
manifest.json # Plugin configuration and metadata
imgs/ # Icons and images
ui/ # HTML property inspectors
script/
build # Build, convert icons, restart plugin
run # Watch mode for development
convert-icons # SVG → PNG conversion
MIT