Pogly Control puts your Pogly stream overlay on your Stream Deck. Switch layouts, show and hide elements, play and pause media, pop images and widgets onto the screen, and drive the widgets already on your canvas, without alt-tabbing away from your game. Every key shows what your overlay is actually doing, even when a teammate changes it from the Pogly editor.
The plugin talks to your overlay through the Pogly HTTP API, using an API token you create in Pogly. Your overlay and editor see every change instantly, exactly as if you had made it in the editor.
flowchart LR
deck["Stream Deck<br/>(keys and dials)"] --> plugin["Pogly Control<br/>plugin"]
plugin -- "API token" --> api["Pogly HTTP API<br/>(your overlay's module)"]
api --> overlay["Overlay in OBS"]
api --> editor["Pogly editor"]
api -. "live key state, every 5 s" .-> plugin
| Platform | How |
|---|---|
| Windows / macOS | Install Pogly Control from the Elgato Marketplace, or double-click the .streamDeckPlugin file from this repository's Releases. Needs the Stream Deck app 6.9 or newer. |
| Linux | Use OpenDeck, which runs Stream Deck plugins on Linux. See Linux (OpenDeck) below. |
- In Pogly, open Settings, API Access and generate an API token (not read-only).
- Drop any Pogly Control action onto a key. The Connection dropdown sits at the top of its settings.
- Click Create, then enter a nickname, your overlay URL (the one you use as your OBS browser source, e.g.
https://cloud.pogly.gg/overlay?module=...), and the API token. Save. - Click Test. It confirms the connection and names any permission the token is missing.
Connections are shared by every Pogly Control key: set up each overlay once, then pick it per key. Run as many overlays from one deck as you like. Edit and Delete act on the connection selected in the dropdown (Delete asks for a second click, and keys that used it fall back to the first remaining connection).
A token can only do what the account that created it is explicitly allowed to do on that overlay. If Test warns about missing permissions, grant them to that account in Pogly, or create the token from an account that has them.
Tokens are stored in Stream Deck's local settings file in plain text, like any stream key. Revoke a token from Pogly if it ever leaks.
Every action also needs the token's account to be an editor (Whitelisted) on the overlay, which is what lets keys read and show live state. The Owner role covers everything.
Widget actions need Pogly 1.4.2 or newer on the overlay. They change only the chosen variable on the server, so live variables update the running widget in place, and a press can never overwrite someone else's edits to the widget. On an older overlay, the variable picker says the overlay needs updating.
Elgato's Stream Deck app does not run on Linux, but OpenDeck runs Stream Deck plugins there, including this one.
- Install OpenDeck and its udev rules as described in its README.
- Install Node.js 20 or newer from your distribution. OpenDeck starts the plugin with the system's Node (unlike Elgato's app, which bundles its own), and refuses anything older than 20. This applies to OpenDeck's Flathub build too: it uses the host's Node, and the Node.js Flatpak is not supported.
- Download
gg.pogly.streamdeck.streamDeckPluginfrom this repository's Releases (Elgato Marketplace downloads are packaged for Elgato's app and may not load in OpenDeck) and install it from OpenDeck's Plugins tab. - Set up a connection exactly as above.
manifest.linux.json is an OpenDeck-only override that declares Linux support; Elgato's app ignores it.
| Symptom | What to check |
|---|---|
| A key flashes a yellow triangle | The action failed. The plugin log names the reason (missing permission, deleted element, renamed variable). |
| Test warns about missing permissions | The token's account lacks them on this overlay. See the token note under Set up a connection. |
| Test says the module cannot be found | The overlay URL's ?module= value is wrong or incomplete. Copy the URL again from your OBS browser source. |
| Widget pickers say the overlay needs updating | The overlay runs a Pogly version older than 1.4.2. |
| Dial actions are missing from the action list | Stream Deck lists dial actions only when a dial slot is selected. |
Logs: the plugin writes to %APPDATA%\Elgato\StreamDeck\Plugins\gg.pogly.streamdeck.sdPlugin\logs\ on Windows (open the newest file; a new one starts only once something is logged), and the Stream Deck app to %APPDATA%\Elgato\StreamDeck\logs\StreamDeck.log. On macOS, the same folders live under ~/Library/Application Support/com.elgato.StreamDeck/.
npm install
npm run deploy # build, copy into the Stream Deck plugins folder, restart the plugin
npm run pack # build the .streamDeckPlugin into dist/| Script | Does |
|---|---|
npm run icons |
Renders the PNG action icons from the SVG sources in assets/icons/. |
npm run readme-images |
Renders the banner and figures in this README from the real key icons. |
npm run marketplace-images |
Renders the Elgato Marketplace app icon, thumbnail, and gallery images into marketing/marketplace/. |
Notes for contributors:
npm run deploycopies the built plugin instead of usingstreamdeck link: the SDK's log setup crashes when the plugin folder is a junction to another drive, which is whatlinkcreates when the repo is not on the same drive as%APPDATA%. Stream Deck's developer mode (npx streamdeck dev) must be on for the restart step; it resets when the app restarts.- The manifest declares
SDKVersion: 3(required for Marketplace protection), which requires@elgato/streamdeck2.x. A 1.x SDK refuses to start against it and the plugin silently crash-loops, so check the plugin log after any deploy. - The SDK delivers the reply to
getSettings()/getGlobalSettings()as a "settings changed" event too. Handlers for those events must never read settings or trigger a refresh unconditionally; doing so created request loops twice during development. - Live key state comes from one shared poller (every 5 seconds, only while Pogly keys are on screen). Key presses trigger an immediate refresh, so the interval only has to catch changes made elsewhere.
- Layouts, element show/hide, media play/pause and volume, Quick Text
- Image Pop and Widget Pop
- Widget Toggle, Button, and Set Variable (Pogly 1.4.2+)
- Multiple overlays per deck (connection profiles)
- Linux via OpenDeck
- Stream Deck + dials for media
- Counter step and dropdown cycle actions for widgets


