A Stream Deck plugin for controlling your ZSA keyboard — switch layers, adjust backlight brightness, and set RGB colors, all with a single button press.
Each Stream Deck key can be configured to control your ZSA keyboard (Moonlander, Voyager, ErgoDox EZ, etc.). Press a key and the action happens instantly.
| Action | Description |
|---|---|
| Set Layer | Switch your keyboard to a specific layer (0-indexed). The key label updates to show the assigned layer. |
| Increase Brightness | Step up the keyboard backlight brightness. |
| Decrease Brightness | Step down the keyboard backlight brightness. |
| Set RGB (All Keys) | Set every key on the keyboard to a chosen color. Pick from a color swatch or enter a hex value. |
- A ZSA keyboard (Moonlander, Voyager, ErgoDox EZ)
- Keymapp installed and running
- Keymapp API enabled: Keymapp → Settings → Enable API
- Stream Deck hardware + software (version 6.7 or later)
- Download the latest
.dmg(macOS) or.exe(Windows) from the Releases page. - macOS: Open the DMG, drag Keymapp Deck to Applications. On first launch, right-click the app and choose Open, then click Open in the dialog — macOS blocks unsigned apps by default, this bypasses it once.
- Windows: Run the installer.
- The installer checks your Keymapp connection, copies the plugin to Stream Deck's plugin folder, and restarts Stream Deck automatically.
Download the .streamDeckPlugin file from Releases and double-click it. Stream Deck will install it directly. You'll need to make sure the kontroll binary inside the plugin has execute permission on macOS (the installer handles this automatically).
- Open Stream Deck.
- Find Keymapp Deck in the action list on the right.
- Drag any action onto a key.
- Configure it in the settings panel:
- Set Layer — enter the layer number (0-indexed, matching your Keymapp layout).
- Set RGB (All Keys) — pick a color from the swatch or type a hex value.
- Increase / Decrease Brightness — no configuration needed, just press.
- Press the key — the action fires instantly.
You can mix and match actions across as many keys as you like.
The plugin communicates with Keymapp through its local gRPC API using the bundled kontroll CLI binary. No separate installation of kontroll is needed — it's included in the plugin bundle. When you press a Stream Deck key, the plugin runs the appropriate kontroll command in the background:
kontroll set-layer --index Nkontroll increase-brightnesskontroll decrease-brightnesskontroll set-rgb-all --color RRGGBB
The Keymapp API must be running for any action to work. If Keymapp is closed or the API is disabled, the Stream Deck key will flash an alert instead.
- Keymapp must be open whenever you want to use the plugin. Keys will show an alert (⚠) if Keymapp isn't reachable.
- Enable the API in Keymapp before use: Keymapp → Settings → Enable API. This is a one-time setup.
- Layer numbers are 0-indexed. Layer 1 in Keymapp's UI is layer
0here, layer 2 is1, and so on. - macOS first-launch warning — see Installation above.
- The bundled
kontrollbinary targets macOS (universal) and Windows x64. If you need a different architecture, set a custom CLI path in the action's advanced settings.
Each action's settings panel has an Advanced section with a CLI path field. Leave it blank to use the bundled binary. Set it to a custom path if you want to use a specific version of kontroll you've installed yourself.
npm install
node scripts/download-kontroll.mjs # downloads kontroll binaries into the plugin
npm run build # compiles TypeScript → plugin.js
npm run installer:dev # runs the Electron installer locallyTo build distributable installers:
npm run dist:mac # macOS DMG
npm run dist:win # Windows EXE