A Stream Deck plugin for controlling Webex meetings on macOS. Keys show the current state of the meeting and dim when no meeting is in progress.
| Action | What it does |
|---|---|
| Mute Toggle | Mutes or unmutes your microphone |
| Video Toggle | Starts or stops your video |
| Share Toggle | Starts or stops sharing content |
| Raise Hand Toggle | Raises or lowers your hand |
| Record Toggle | Starts or stops recording |
| Leave Meeting | Leaves or ends the current meeting |
The toggles work in multi-actions, where you choose the state to end up in.
A few things follow from how Webex itself behaves:
Webex has no scripting API, so the plugin uses macOS accessibility (System Events) to read the controls in Webex’s meeting windows about once a second, and presses them to act. Each control has a stable identifier, and its state is read from its text (“Mute” / “Unmute”) or from an indicator Webex shows, which is how the keys stay in sync even when you use Webex’s own buttons. Webex does not need to be the frontmost app.
npm run labels)npm install
npm run build # bundle to com.timetraveltoaster.webex.sdPlugin/bin
npx streamdeck dev # enable developer mode (once); without it, restarts are silently ignored
npm run link # install the plugin into Stream Deck (once)
npm run watch # rebuild and restart the plugin on change
npm run pack # produce a .streamDeckPlugin in dist/
Icons are generated by npm run icons from scripts/make-icons.mjs. The Marketplace listing
text is in marketplace/description.md, and npm run marketplace regenerates the listing images
next to it.
Run npm run dump-controls during a meeting to print the buttons the plugin can see, with the
title and help text it reads. The identifiers and the patterns used to detect state are in
src/webex/controls.ts. Plugin logs are in com.timetraveltoaster.webex.sdPlugin/logs.
For help or to report a problem, email support@timetraveltoaster.com.