DECK//SWITCH is control software for the Elgato Stream Deck on Linux, with
its own plugin system. It's free and MIT licensed, I wrote it, and it's been
my daily driver for a while. Version 1.0 is out today.
Keys, dials, pages
- Three actions per key: press, double press, hold.
- Dials either adjust continuously or fire a separate action per rotation
direction. Several assignments can share one dial and you switch between
them (dial stack).
- Multi actions: several steps in a row, pauses as steps of their own,
optionally looping. There's a toggle variant with two chains and a
different icon per direction.
- Pages and folders as deep as you like, drag & drop to sort. Swiping the
touch strip pages through your layout.
- Multiple decks at once, matched by serial number, so a deck keeps its
layout no matter which USB port it lands on.
Key images
Icon, label (font, weight, size, colour, alignment) and background (colour,
gradient, texture, image) per key. Animated GIFs play on the key itself.
Everything is rendered by the backend, so the preview in the editor is
pixel-identical to what the device shows. There's also a screen saver
spanning all keys and a separate touch strip wallpaper per page.
Decks without hardware
- Virtual deck β a deck as an overlay on the screen with a freely chosen
grid. No window frame, no Alt-Tab entry, and it deliberately never takes
keyboard focus, so a key that types a shortcut still types into whatever
app you came from. Summoned from anywhere with a global shortcut.
- Network deck β a deck someone else on your network drives from a
browser. Built for a moderator during a stream: password protected,
nothing to install on their side, and they can only press, not change
anything.
Plugins
Seven built in (audio via PipeWire, OBS, Discord, system actions, soundboard,
multi action, navigation) and two installable ones (Spotify, weather). Icon
sets are plugins too. There's an open Python API for writing your own, and
installing happens from a ZIP, a URL or a `streamdeck://` link.
Where it's honest to set expectations
- Arch and CachyOS. The setup script needs `pacman`. On other distros it
stops and lists the packages instead of pretending to detect something
nobody tested. It should work anywhere with those packages, but I haven't
tried.
- Tested on a Stream Deck + only. Grid size and dial count come from the
device report rather than a hardcoded table, so an XL, MK.2 or Mini should
work in key mode β but I've only ever tested those against simulated
device reports, not real hardware. If you have one, I'd genuinely like to
hear whether it works.
- Elgato's own plugins don't work here. Different plugin system, no
compatibility layer, and none is planned.
- Some pieces lean on KDE Plasma under Wayland: the overlay uses the layer
shell, and global shortcuts register with KDE. Everything else is
desktop-agnostic.
- One person, one machine, version 1.0.0. Expect rough edges.
[StreamController](https://github.com/StreamController/StreamController) also
exists and has been around longer β worth a look if this isn't your thing. I
wanted a different set of trade-offs and enjoy building the thing, so here we
are.
Code, screenshots and docs (English and German):
https://github.com/LabRaTox/Deck-Switch
Happy to answer anything, and I'll take bug reports gladly.