OBS is the point, not a plugin
29 OBS actions with live feedback on the keys, plus a raw-request escape hatch that reaches 100% of the obs-websocket v5 protocol. The active scene lights up, recording turns red, a muted mic is marked.
Elgato ships software for macOS and Windows only. This is a GTK4 desktop application built around deep OBS Studio integration, with Twitch, Home Assistant, Key Lights and per-application audio native rather than bolted on. OpenAI or Claude can help build a key, and built-in games turn the deck itself into the board.
The Linux community has built several genuinely good Stream Deck projects and they deserve credit. These are the things this one does differently — not better at everything, different on purpose.
29 OBS actions with live feedback on the keys, plus a raw-request escape hatch that reaches 100% of the obs-websocket v5 protocol. The active scene lights up, recording turns red, a muted mic is marked.
A key that cannot work is faded. A key whose action just failed is outlined in red. A measurement the machine does not report shows a dash, never a zero — because a zero is a claim.
Twitch, Home Assistant, Elgato Key Lights, per-application audio, HTTP endpoints, machine monitoring and built-in games are in the box. OpenAI or Claude can propose a key when you choose to connect one. Nothing runs under Wine.
The on-screen grid mirrors the physical device, so you can configure and test every key — single, double and long press included — before the deck ever arrives.
Connect several devices and each keeps its own profiles, pages, keys, brightness and display behaviour. The header selector changes the editor, not what the other decks are doing.
Media through MPRIS, audio through PipeWire, shortcuts through ydotool. No faked media keys, no X11 assumptions, no privileges.
A pre-flight check answers, on the deck itself, the question asked in the minute before streaming: microphones, cameras, disk, stream target — and says plainly what it could not check.
Every key below is drawn by the application's own renderer, so this is exactly what the hardware shows.
Scenes, recording, streaming, sources, filters, audio, transitions, the replay buffer, studio mode. The key shows what OBS is doing rather than what you last pressed, straight from obs-websocket events.
A scene key can even show a live thumbnail of what that scene is sending out — the fastest way to spot a dead capture card before you cut to it.

CPU, memory, GPU load and temperature, network throughput, free disk space — read straight from the kernel, so they keep working with OBS closed. Keys colour themselves amber and then red as a value gets into trouble.
Plus countdown timers, a stopwatch, and a counter for the things you lose track of.

A Twitch key tells you how long somebody has been waiting — not how many messages there are, because a count says nothing about whether you are ignoring someone. It can sound, and it can flash the whole deck when headphones are not enough.
It can also keep your Twitch category aligned with the Steam game detected while OBS is streaming. Exact matches are remembered; uncertain or simultaneous games are never guessed, and one key can pause or resume the global policy.
Home Assistant entities come from a dropdown of what your server really has. Elgato Key Lights are found on the network by themselves. And one generic HTTP action reaches anything else that speaks REST.

Mute the game without muting Discord. Turn the music down without touching the microphone. Move the whole session between speakers and a headset with one key.
And a soundboard: send a sound to the virtual microphone and pick it up in OBS, Discord or a call, so everyone hears it — you included.

Transport over MPRIS, so one key works with Spotify, VLC, Firefox and mpv alike. Turn on show what is playing and the key fills with the album art and the artist.
The song title deliberately is not shown: at 96 px it either gets cut or is drawn too small to read, while the cover is recognisable before you read anything.
Start a game from the status menu and it takes over the physical and virtual decks until you leave. Reaction, memory, deduction, matching and routing all work from the six-key Mini through the 32-key XL, with three difficulties, original sounds and records kept per deck shape.
Neon Jackpot turns the keys into a three-reel arcade cabinet with holds, nudges, free spins, suspenseful third-reel anticipation and a deck-wide cinematic jackpot. Its fictional Deck Sparks power a complete local Arcade economy: 250 welcome Sparks, permanent game unlocks, a visible price for every run, one-time feature challenges and a zero-balance daily rescue. There are no purchases, real money stakes or cash-out, and progress is included in portable backups. On Stream Deck +, its dials change the bet, spin, brake, hold and nudge while the LCD becomes a live cabinet HUD.

A key whose every action needs OBS is faded while OBS is closed, so "not ready" stops looking like "idle". A key whose action just failed gets a red outline for a few seconds, because that is where you are looking.
Long sequences show RUN with a slow breathing halo while
they are working. Folders group related keys without spending a page.

Eleven coordinated full-deck screen savers, drawn across the real grid of whatever deck is connected, with their own brightness and idle delay. A physical deck also wakes with a short startup sequence that spells its name across the keys.
You choose what it leaves on screen after a clean exit, too: the firmware standby image, every key off, or one image of your own.

Search by what you want to do rather than by where it lives. Try
mute, scene, temperature or
clip. Press / from anywhere to jump here.
71 actions
Show what a Home Assistant entity reports, live on the key: a temperature, a door, whether the washing machine is running.
Turn a Home Assistant entity on or off, or run a scene or script. The key lights up while the entity is on.
Make an Elgato Key Light brighter or dimmer, or set a level.
Switch an Elgato Key Light on or off. The key lights up while the light is on.
Make an Elgato Key Light warmer or cooler, or set a colour temperature between 2900K and 7000K.
Switch to a selected profile and its own set of pages.
Switch directly to a selected page in the current profile.
Switch to the next page, wrapping to the first page after the last.
Show which page is active. Pressing it does nothing, so it can sit next to the page navigation keys.
Switch to the previous page, wrapping to the last page from the first.
Trigger any internal OBS hotkey by name.
Show a live measurement on the key: dropped frames, bitrate, stream or recording time, free disk space, CPU or FPS. System CPU and free disk space keep working while OBS is closed.
Check audio, cameras, disk, CPU, the stream destination and your Twitch title and category, and show the results across the whole deck. Reports only; changes nothing.
Send any obs-websocket v5 protocol request. 100% API coverage.
The key lights up when the input is muted. The scene only narrows the list of inputs to choose from; muting applies to the input itself, on every scene.
The scene only narrows the list of inputs to choose from; the change applies to the input itself, on every scene.
The scene only narrows the list of inputs to choose from; the change applies to the input itself, on every scene.
Control video/audio sources (Media Source, VLC).
Mark this moment in the recording so it is easy to find later. Needs OBS 30.2+ recording to hybrid MP4.
Pause or resume a recording in progress, without closing the file. The key lights up while it is paused.
Start or stop recording. «toggle» switches between the two, so one key does both.
Start or stop the replay buffer, which keeps the last seconds of video in memory ready to be saved.
Save what the replay buffer is holding to a file, capturing the moment that just happened.
Save a PNG screenshot of a source or scene.
Close the current recording file and carry on into a new one, without stopping. Needs OBS 30+.
Start or stop the live stream. «toggle» switches between the two, so one key does both. The key turns green and shows LIVE while you are broadcasting.
Start or stop the virtual camera, so OBS shows up as a webcam in Zoom, Meet, Discord and anything else.
Switch to another OBS profile, swapping its encoding, output and recording settings. This is an OBS profile, not a LinuxStreamDeck one.
Switch to another OBS scene collection, swapping the whole set of scenes and sources at once.
Put a scene in the studio mode preview. The key can show a live preview of what that scene is showing.
Choose the transition used between scenes, and optionally how long it lasts in milliseconds.
Turn studio mode on or off, so scenes are staged in preview before going to program. The key lights up while it is on.
Switch the program scene. The key lights up when it is the active scene, and can show a live preview of what that scene is showing.
Send the preview to program.
Enable, disable or toggle a filter applied to a source, such as a chroma key, a colour correction or a noise gate.
Change one transform property of a source in a scene. «adjust» adds to the current value, so a key can nudge it repeatedly.
Reload a browser source, bypassing its cache.
Replace what a text source displays. Useful for a countdown message, a «back in 5» card or a now-playing line.
Show, hide or toggle a source in a scene. Sources inside a group can be picked too. The key lights up while the source is visible.
Choose among installed games that Steam records as previously played, ordered with the most recent first.
Launch an installed Steam game. The key stores its portable AppID and uses artwork already present in Steam's local cache.
Open an installed game's details page in the Steam Library.
Open Steam home, Library, Store, Downloads, Friends, Settings or Big Picture.
Launch the installed game with the most recent Last Played time in Steam's local library.
Ask an application to quit, or force it to stop.
Start a countdown shown as HH:MM:SS. Press again while it is running or after it finishes to stop and reset it. An optional sound can play on completion.
Count something on the key: deaths, takes, attempts. A press adds, and holding the key resets it. Give it a negative step to count down.
Send a keyboard shortcut to the focused application. Pick a preset to fill in the shortcut, then edit it if your desktop uses another one.
Control the running media player through MPRIS, or the session volume.
Open a file, folder or program with the desktop's own handler.
Start an installed application, optionally closing it again with a long press.
Open a web address in the default browser.
Play a local WAV, MP3, OGG, FLAC or Opus file. Send it to the virtual microphone and it becomes a soundboard: OBS, Discord or a call can pick that up and everyone hears it. A multiple-action sequence continues after playback finishes or reaches its time limit.
Run a shell command in the background.
Alternate between two keyboard shortcuts, sending the next one on each press.
Count elapsed time as HH:MM:SS. Press again to stop and reset it to zero.
Make a device the one the session uses. Choose a second device too and one key moves between them, which is what speakers and a headset want. The key lights up while its device is the one in use.
Show a live machine measurement on the key: CPU, memory, GPU, temperatures, network throughput or free disk space. None of it needs OBS.
Change the volume of the speakers, the microphone or one application on its own. A mute key lights up while whatever it points at is muted.
Pause for the given time (MM:SS) before the next action. Meant for multiple / toggle keys, between two actions.
Post a highlighted announcement in your own Twitch chat.
Light up when somebody is waiting on you: a chat message, a new follower, a subscription or a raid. Shows who it was, how long they have waited and how many are unread, with an optional sound. Press it to mark them seen.
Clip the last few seconds of the stream, the same as the Twitch clip button. The channel has to be live.
Mark this moment in the Twitch broadcast so it is easy to find afterwards. Pairs with the OBS recording chapter marker.
Offer a raid to another channel, or cancel one already offered. Twitch opens the countdown on your chat; it never moves anyone by itself.
Change the Twitch category (the game). The name is looked up on Twitch when the key is pressed, so an approximate one still works.
Change the title of the Twitch stream.
Run an ad break of the chosen length. Only Twitch Affiliates and Partners can run ads; the key is faded for an account that cannot. The channel also has to be live, and Twitch enforces its own gap between breaks.
Enable, pause, or resume automatic Twitch category changes from the Steam game detected while OBS is streaming.
Show a live Twitch measurement on the key: viewers, followers, stream uptime, or whether the channel is live.
Call an HTTP endpoint and, if you want, show a value from its answer on the key. Covers anything that speaks REST: a home automation bridge, a webhook, a dashboard, your own server.
From nothing to a deck you actually use, in the order it makes sense to do it.
Three formats on the
releases
page. The .deb is a Debian package and will
not install on Fedora, Arch or openSUSE, whatever you do to
it — those want the Flatpak or the AppImage.
| Your system | Use |
|---|---|
| Debian, Ubuntu, Pop!_OS, Mint | .deb |
| Fedora, Arch, openSUSE Tumbleweed | AppImage or Flatpak |
| Debian 12, Ubuntu 22.04, RHEL 9 | Flatpak — the AppImage needs glibc 2.39 |
| Anything else | Flatpak |
# Debian family
sudo apt install ./linux-stream-deck-X.Y.Z.deb
# Any distribution: brings its own GTK4, GStreamer and Python
flatpak install ./linuxstreamdeck-X.Y.Z.flatpak
# One file, nothing installed (glibc 2.39 or newer)
chmod +x LinuxStreamDeck-X.Y.Z-x86_64.AppImage && ./LinuxStreamDeck-X.Y.Z-x86_64.AppImage
.deb is the one
exception, because apt runs as root. Without it the deck is never
opened and the application looks broken. The exact command for each
format is in
INSTALL.md,
which also ships beside the files. Then unplug the deck and plug
it back in.
The four desktop tools below — ydotool,
playerctl, pulseaudio-utils,
avahi-utils — stay optional in every format. Each one
missing disables only its own keys, and the key says what to
install. Building from source instead?
./build.sh --apt then ./run.sh.
In OBS: Tools → WebSocket Server Settings. Enable the server and copy the port and password. In LinuxStreamDeck, click the network button in the header and paste them.
The password goes to your desktop keyring, never to the configuration file and never into an export. The dot in the status bar turns green when it is connected, and the app reconnects on its own if OBS restarts.
Select a key and press Create with AI.... Choose OpenAI or Claude, enter your own API key and describe the result you want in ordinary language. The proposal opens in the normal editor; nothing reaches the deck until you review it and press Save.
Provider keys live in the desktop keyring, never in
config.json, backups or exports. The generated proposal
is validated locally against the installed action catalogue, and
Run Command, Web request and Raw OBS Request actions are deliberately
excluded because each can reach outside the application from text.
| Type | What it does |
|---|---|
| Single action | One action, with live state feedback on the key. |
| Multiple actions | A list run in order. Insert a Wait action to pause between them. |
| Toggle (ON/OFF) | Two lists and a state, with its own look per state. |
| Random action | Picks one of its actions at each press. |
| Single / double / long press | A separate list per gesture. |
| Folder | Opens its own grid of keys, nested up to five levels. |
Any step in a list can be given a name, and the list shows that instead of the action, which is what keeps a long sequence readable. Steps reorder by dragging their handle, and copy between lists, key types and keys.
A list can also be told what a failure should do: carry on, or stop there. Stopping is right when the list is a recipe — "switch scene, wait, start recording" must not record the wrong scene.
Drag a key onto an empty slot to move it, or onto another key to swap them. Hold a drag over a folder for about a second and it springs open, so you can drop the key inside; holding over Back comes out again. Ctrl+Z takes back a clear, a paste or a move.
profile menu → Twitch account…, then read the code off the dialog
and type it at twitch.tv/activate. No password is ever
asked for and the tokens live in your keyring.
You then get: viewers, followers and uptime on a key; set the title or the category; clips; stream markers; ad breaks; raids; announcements. And the alert key, which shows how long somebody has been waiting — filterable down to questions and mentions, or to first-time chatters, so it keeps meaning something on a busy channel.
Enable Automatically update Twitch category in the same
dialog and a stable Steam game change updates the broadcast without
interrupting play. Game mappings holds exact AppID-to-category
choices, and Toggle automatic category gives a deck key
AUTO, PAUSE and OFF states.
profile menu → Home Assistant…. You need the address
(http://homeassistant.local:8123 usually works) and a
long-lived access token: in Home Assistant, click your user name at
the bottom of the sidebar → Security → Long-lived access
tokens → Create token. Copy it immediately, it is shown
once.
The entity dropdown then fills with what your server really has. One key turns a light, a switch, a fan, a media player, a scene or a script on, off or over; another shows what an entity reports.
Open the LinuxStreamDeck status icon, choose Games, see your Sparks balance and each run/unlock price, then pick Circuit Breaker, Colour Mastermind, Memory Match, Minesweeper, Mole Smash, Neon Jackpot, Neon Relay, Pulse Memory, or Tic-Tac-Toe. The game temporarily owns every key and the virtual deck, so a configured action cannot fire while you play.
Every game adapts to the connected grid. Stream Deck + uses its LCD as a mirrored live HUD; Neon Relay also maps each dial to its key column and lets a dial push or LCD tap spend charge on stasis. Those Plus game controls are verified in simulation, not on physical Plus hardware.
The Stream Deck display button in the header holds both. Choose one of eleven animations, an idle delay and a brightness of its own — and preview it immediately, with or without hardware connected.
Automatic activation stays out of the way while OBS is recording or streaming, and throughout a built-in game. Once that work ends, a complete new idle interval begins. Manual preview remains available during OBS suppression; an active game owns the display and blocks previews until it ends.
The same dialog sets what the physical deck shows after a clean exit: the firmware standby image, every key off, or one image of yours across the whole grid.
Every save writes a backup, and timestamped copies are kept — profile menu → Restore a backup… lists them with what each one holds.
Export the whole configuration as a .lsdconfig bundle
that carries every device workspace, your icons, audio files and
exit images, or
right-click one key and export just that as a .lsdkey.
Passwords, API keys and tokens are never exported: a machine
you move to enters its own. Hardware serial bindings stay local too,
so the imported workspaces can attach to the new machine's decks.
| What you see | What it means |
|---|---|
| The deck never appears | USB permissions: the rule is not installed. See step 1 — from a source checkout it is sudo ./install-udev.sh. Replug the deck afterwards. The status bar says so after the second failed attempt. |
| A faded key | Every action on it needs a connection that is not there — OBS closed, no Twitch account, no Home Assistant. |
| A key outlined in red | Its action failed just now. The status bar says why, and the full reason is in the log. |
A key showing -- | The measurement is not available on this machine. A zero would be a claim; a dash is the truth. |
| A dropdown that is empty | Whatever fills it could not be asked. The field stays typable so you can enter a value by hand. |
| Scenes renamed in OBS | profile menu → Check keys against OBS…. It lists what no longer resolves and repoints them, saving a backup first. |
The full log lives at
~/.config/linuxstreamdeck/linuxstreamdeck.log and opens
from the profile menu. That is the thing to attach to a bug report.
The layout is read from the device, so screen savers, the startup sequence and a custom exit image are laid out across whatever grid you really have. Multiple connected decks remain active simultaneously; use the header selector to configure each independent workspace.
| Device | Keys | Grid | Status |
|---|---|---|---|
| Stream Deck Mini | 6 | 3 × 2 | Verified in simulation |
| Stream Deck Neo | 8 | 4 × 2 | Verified in simulation |
| Stream Deck Original / MK.2 | 15 | 5 × 3 | Tested on real hardware |
| Stream Deck + | 8 + 4 dials + LCD strip | 4 × 2 | Verified in simulation |
| Stream Deck XL | 32 | 8 × 4 | Verified in simulation |
| Stream Deck Pedal | 3 | no displays | Not supported, and says so |