Releases: javocsoft/linuxstreamdeck
Release list
v0.3.4 — Six new integrations, some fixes, and a better more precise deck
The largest release so far. It started as a survey of what the Elgato and
OpenDeck plugin ecosystems actually offer, and turned into six integrations
that cover most of it natively — plus a run of fixes for keys that quietly did
the wrong thing.
The test suite went from 1494 to 1899.
✨ New actions
Web request — the one that covers whatever is not in this list
Call any HTTP endpoint from a key: a method, headers, a body. Turn on Show
the answer on the key and it also reads one value out of the response —
state, or data.0.name to reach into a list — and keeps it up to date.
That is a home automation bridge, a webhook, an uptime monitor, a build server
or your own API, without a plugin for each. It never blocks the key drawing on
the network: the key shows the last good value while the next is fetched, and
blanks if the endpoint stays unreachable rather than showing a number that
stopped being true.
Volume and mute, per application
Point a key at the speakers, the microphone, or one application on its own
— so you can mute the game without muting Discord, or turn the music down
without touching the mic. A mute key lights up red while whatever it points at
is muted, and keeps that up to date even when you change it from the desktop's
own volume panel.
Switch audio device makes a device the one in use; give it a second device
and one key moves between them, which is what speakers and a headset want.
Elgato Key Lights
Key Light, Key Light Air and Ring Light, found automatically on your network.
Three keys cover them: on/off, brighter/dimmer, and warmer/cooler between
2900K and 7000K. No account and no cloud service — the lights speak plain HTTP
on your own LAN, which is the only reason this can exist on Linux, since
Elgato ships no software for them here either.
System monitor
A live machine reading on a key, needing OBS for none of it: CPU, memory, GPU
load, GPU memory, CPU and GPU temperature, network up/down, free disk space.
The key colours itself amber and then red as a value gets into trouble.
Anything your machine does not report — an integrated graphics chip has no
load counter, some boards have no package sensor — shows a dash rather than a
zero, because a zero would be a claim.
Home Assistant
Two keys: Switch or run turns any entity, scene or script on, off or over,
and Show a value puts what an entity reports live on the key. The entity is
picked from a dropdown of what your server really has, which is the whole point
— typing light.kitchen_ceiling_2 from memory is where the real failures live.
Set it up once from the ⋮ menu with your server address and a long-lived access
token, stored in your desktop keyring and never in the configuration file or an
export.
Counter
Press to add, hold to reset. Deaths, takes, attempts. A negative step counts
down.
🔊 Soundboard
Play audio file gains "who hears it". Send a key to the virtual microphone
and pick Monitor of LinuxStreamDeck as an input in OBS, Discord or a call —
everyone hears it, you included, so a key never feels dead.
🎵 What is playing, on the key
A media key can now show the album art with the artist over it, with a
border while something is actually playing. It works with anything that speaks
MPRIS — Spotify, VLC, Firefox, mpv — so one key covers them all.
The song title deliberately is not shown: at 96 px it either gets cut or is
drawn too small to read, while the artist fits every time and the cover is
recognisable before you read anything. When nothing is playing the key goes
back to the icon and label you gave it.
Each media action also gets its own default icon now — previous, next, stop,
mute and the two volume steps no longer all inherit the play/pause picture.
🐛 Fixed
Stream on/offhad no mode selector.Record on/offoffered
toggle/start/stop and streaming could only toggle. Existing keys keep
toggling.- The key grid jumped sideways when you selected a key. On a maximized
window the whole deck moved about 247 px left, so the pointer ended up two
keys from the one just pressed and a folder's double-click missed. - The editor's scrollbar covered its own controls — the arrow of each
dropdown, the action picker's search button. - A colour parameter was a plain text field, showing nothing while the
value was inherited and making you guess the format. It is a proper picker
now, and the swatch shows the colour that key would really use. - An alert key could go quiet with somebody waiting on it, on a machine
that had recently booted. - A Home Assistant key reported success while nothing happened. Home
Assistant answers 200 for aturn_onan entity cannot perform; the key now
says what actually changed. - A Home Assistant toggle turned a media player on and never off, because
an idle Chromecast was being read as switched off. - A dropdown filled from something that could not be asked was a dead end —
no entries and no way to type a value by hand.
🎛️ Also
- The editor panel is resizable: drag the divider and the width is
remembered. It stops when it reaches the deck, which never changes size. - The editor offers the Home Assistant connection where the key is
configured, the way it already did for Twitch. pulseaudio-utilsandavahi-utilsjoin theRecommends.
📦 Install
sudo apt install ./linux-stream-deck-0.3.4.deb
sudo ./packaging/refresh-appstream.shv0.3.3 — Twitch alerts you cannot miss, and a deck that stays put
This release is mostly about two things: making a Twitch alert impossible to
miss when you are deep in a game, and stopping the interface from moving under
your pointer.
✨ New
The whole deck can flash when something happens on Twitch
Turn on Flash the whole deck on a Chat and event alerts key and every key
pulses three times when something arrives. It is for the case a sound does not
cover — headphones on, concentrating on the game — and it wakes the deck first
if the screen saver had it.
- The colour says what it was: blue for chat, green for a follower, purple
for a subscription, orange for a raid. - The middle key says it in a word —
CHAT,FOLLOW,SUB,RAID— so
you do not have to have learnt the colours. The words are short on purpose:
centered text is fitted to the key width, and at 72 px "MESSAGE" came out at
roughly half the size of "CHAT", which is readable if peered at and useless
for a pulse lasting a fifth of a second. - Pick your own colour in Flash colour if you prefer one. The word
switches between black and white to stay readable on whatever you choose. - It follows the same rule as the alert sound rather than firing per message,
so a busy chat cannot leave the deck strobing, and it stays under three
flashes a second.
Colour parameters are now a picker
Any action parameter that takes a colour gets a proper colour button plus a
clear button. Leaving it cleared means "inherit", and the swatch shows the
colour that would actually be used — for a flash key, the colour of the event
that key watches, updated as you change what it watches.
Drag a key into a folder
Hold a drag still over a folder key for about a second and it opens, so you can
drop the key inside. Holding over the Back key comes back out, so a key can be
dragged out again too. Previously the only way in was cut and paste.
Resize the editor panel
Drag the divider between the deck and the editor to give the panel as much room
as you want. The width is remembered between runs. It stops when it reaches the
deck, which never changes size.
🐛 Fixed
An alert sound never played
A sound assigned to a followers alert was completely silent. Four separate
faults, three of them stacked in the same call:
- The volume was passed as a fraction where a percentage was expected, so a key
set to 70 played at 0.7 %. - The shutdown flag was passed as an object where a callable was expected, so
playback raised on its first iteration. - That exception went into a worker Future nobody reads, so nothing was logged
and nothing appeared on screen. A sound that cannot play now reports itself
the way a timer's does. - Separately, a key that had sounded once stayed silent for good, because
"was this key already waiting" was kept as a flag that nothing was in a
position to clear. It is now derived from the key's own pending alerts.
An alert key could go quiet with somebody waiting on it
A key that had never been pressed used 0.0 as its "acknowledged nothing yet"
mark. Monotonic time counts from boot, so on a machine started moments earlier
that is an ordinary timestamp, and anything stamped before it was dropped as
already seen.
The key grid jumped sideways when you selected a key
On a maximized window, clicking a key moved the whole deck about 247 px to the
left — so the pointer ended up two keys away from the one just pressed, and the
second click of a folder's double-click landed somewhere else entirely. The
editor panel was inheriting an expand flag from a button row that is hidden
until a key is selected.
Stream on/off had no mode selector
Record on/off offers toggle / start / stop; streaming offered nothing and
could only toggle. It now offers the same three, and existing keys keep
toggling.
The pre-flight report held the deck after you closed it
Closing the report window left both decks showing the result for the rest of its
twelve seconds. Closing it now gives the deck straight back.
The editor's scrollbar covered its own controls
An overlay scrollbar is drawn over the content rather than taking width of its
own, and it sat on the right-hand end of every row — the arrow of each dropdown,
the action picker's search button. It now reserves its own width.
Pressing Save gave almost no feedback
Save and the three Test buttons look identical after running, so the only thing
that moved was a line in the status bar at the far end of the window. A quick
click is released before the theme's own pressed state is ever painted. They now
light up deliberately, and Save briefly reads Saved — only when there was
actually something to save.
📦 Install
sudo apt install ./linux-stream-deck-0.3.3.deb
sudo ./packaging/refresh-appstream.sh
v0.3.2 — TWITCH Never miss anyone again
LinuxStreamDeck now holds a live connection to Twitch, so the deck can tell you
the moment somebody talks to you — and, more usefully, how long they have been
waiting.
🔔 The alert key
Dark and silent while chat is quiet. The moment somebody writes, it shows
their picture, how long they have been waiting and how many are
unread, with an optional sound. Press it to mark them seen.
The border climbs from blue to amber to red as the wait grows, and
the key breathes so you catch it from the corner of your eye without looking
for it.
It also watches new followers, subscriptions (new, gifted and renewed)
and raids — one key each, or one key for all of it.
It counts waiting, not messages
This is the whole idea. "3 messages" tells you nothing about whether you are
ignoring somebody. "Four minutes" tells you exactly that, and it is the number
that matches the viewer who writes once, gets nothing back, and does not come
back either. So the clock measures from the oldest unanswered message, not
the newest.
The sound follows the same rule
One sound when the key goes from quiet to somebody-waiting, and an optional
reminder if they are still waiting later. Never one per message — that is
unbearable the moment a chat wakes up, and the first thing anyone does about it
is turn the sound off, which puts them straight back to missing everything.
It still works when the room is busy
Filter chat to questions and mentions, or to first-time chatters — the
one person you really cannot afford to ignore. With two hundred people talking,
"somebody said something" means nothing; "somebody asked you a question" still
does.
Two keys watching different things forget independently, so pressing one never
silences the other.
🩹 Also fixed
- Disconnecting a Twitch account tore down its whole authorization.
Revoking the refresh token alongside the access token invalidates every token
from the same grant, so reconnecting produced a session whose events were
revoked seconds later and whose permissions were refused. Only the access
token is revoked now, and a revocation that arrives after you have already
reconnected is discarded. - A refused event now says which permission is missing and how to grant it,
instead of quoting Twitch's "subscription missing proper authorization" at
you. - A value drawn over a picture is outlined. A white clock on a bright Twitch
avatar was not dim, it was invisible. - The chat filter is hidden when the key is watching followers, raids or
subscriptions, where it changes nothing.
⬆️ Upgrading
This release needs two permissions the last one did not ask for
(user:read:chat and channel:read:subscriptions).
If your account was connected before, the cleanest path is:
- Remove LinuxStreamDeck at
twitch.tv/settings/connections - Open Twitch account… and connect again
The log then says granted 8 of 8 permissions. Without it, the chat and
subscription keys stay silent and the pre-flight warns you which permission is
missing.
Install
Download the .deb and double-click it, or:
sudo apt install ./linux-stream-deck-0.3.2.debUpgrading keeps your configuration. Run:
sudo ./packaging/refresh-appstream.sh afterwards if you want your software centre to show the new version.
v0.3.1 — Ads, raids and announcements, and Twitch in the pre-flight
The rest of the Twitch integration: the three things you press while live,
and the four questions worth asking in the minute before you go.
💜 Three new Twitch keys
- Start ad break — 30 seconds to 3 minutes. The status message also tells
you when the next one can run, because Twitch enforces its own gap and a
key that only said "started" would leave you pressing it into a refusal. - Raid a channel — start or cancel. Start typing and Twitch's channels
appear, the live ones first, since that is who you can actually raid.
The message says the raid still has to be confirmed in your chat within 90
seconds: Twitch opens a countdown, it never moves anyone by itself. - Announce in chat — a highlighted announcement in your own chat, in the
colour you choose.
🚦 Twitch in the pre-flight check
Four more rows on the board: is the account still accepted, is a title
set, is a category set, and does Twitch already show you as live.
They run even with OBS closed — "is my title set" does not stop being worth
knowing because OBS happens not to be running — and they read your channel
right then rather than from the cache the keys use, because going live is a
decision you only get to make once.
With no Twitch account connected those four rows are reported as not
checked, never as failures, and never quietly left out. Neither is an
unreachable Twitch: reporting an empty title because the network dropped would
send you hunting for a problem you do not have.
They check that a title and category exist, never that they are the right
ones. Left on yesterday's game is the classic mistake and this cannot catch it
— the report says so in as many words.
🫥 Two ways a key now tells you before you press it
Both because for these actions, finding out on the press means finding out
live.
A permission your account never granted. Ad breaks, raids and announcements
need scopes the previous release did not ask for, so an account connected
before this one cannot perform them. Those keys are faded, the pre-flight
warns and names the missing permission, and pressing one says exactly what to
do instead of quoting Twitch's identifier at you. Open Twitch account… and
connect again.
An account that cannot run ads at all. Only Twitch Affiliates and Partners
can, and Twitch will not tell you that usefully: its own issue tracker has this
endpoint answering an ordinary account with a cooldown that never expires,
and sometimes with a plain success for an ad that never ran. So
LinuxStreamDeck checks your account type itself. If yours is neither, the ad
key is faded, pressing it says why, and the account dialog tells you which you
are. Nothing else is affected.
Install
Download the .deb and double-click it, or:
sudo apt install ./linux-stream-deck-0.3.1.debUpgrading keeps your configuration. If you connected a Twitch account before
this release, reconnect it once so the new keys can work. Run:
sudo ./packaging/refresh-appstream.sh afterwards if you want your software centre to show the new version.
v0.2.7 — Know before you go live
This release is about the deck telling you things instead of staying quiet.
🚦 Pre-flight check
One key, pressed in the minute before you go live. The whole deck turns into a
board and the results appear one at a time:
- Audio — is anything muted in OBS, and is sound arriving
- Cameras — does OBS actually hold a capture device for each of them
- Disk — room left where you record
- Recording folder — exists and can be written to
- Collection — which scene collection OBS has loaded
- CPU — how busy the machine already is
- Stream — a destination and a key are configured
- Outputs — you are not already live
It reports. It never switches a scene, activates a source or changes a
setting, so it is safe to press mid-show. Any press puts the deck back.
It tells you what it did not check
This is the part I care most about. Anything that could not be established
shows as a faded key with a question mark, never as
lists what each answer does not cover — the camera check looks at the device,
not the picture, so a closed privacy shutter still reads
recording folder describe the machine OBS runs on; the stream key was checked
for presence, never tested.
There is no "all good" and no green light. A board you r
would be a promise this cannot keep.
Two things it deliberately does not do, because they cannot be answered
honestly: it never decides whether a black camera is bro
not on screen is black either way), and it never compares your keys against OBS
by itself — obs-websocket can only list the scene collec
so keys belonging to another collection are indistinguishable from broken ones.
Check keys against OBS is still there for that, run
choose.
🔴 The deck says when something went wrong
A key whose action fails is outlined in red with an exclamation mark for a few
seconds. That message used to go to a status bar — five
that is normally hidden behind the status icon — while the details went to a log
that went nowhere at all if the app started with your se
A key that cannot work at all — an OBS key with OBS
so "not ready" no longer looks exactly like "idle".
Everything is written to ~/.config/linuxstreamdeck/linuxstreamdeck.log,
rotated, and it opens straight from the menu. That is th
bug report.
🛑 Stop a sequence when a step fails
A multi-action key runs the rest even if one action fails, which is right when
they are independent. When the list is a recipe it is no
start recording" should not record the wrong scene. Set If an action fails
to Stop the sequence. Carrying on stays the default, s
have changes.
🔖 Chapter markers and recording splits
Mark the moment something worth keeping happens and find it as a chapter in
your editor instead of hunting through three hours of fo
current recording file and carry on into a new one without stopping.
Both light up only while there is a recording to act on, and if your OBS is too
old they say exactly that. Chapters need OBS 30.2+ recor
splitting needs OBS 30+.
🎬 A first run that does something
A fresh install opened on an empty deck. It now offers a few keys that work
straight away: recording, streaming, a chapter marker, s
and live CPU and disk readings. Start empty leaves it exactly as before.
💽 Free disk space works with OBS closed
It was read from OBS, so the key went blank whenever OBS was not running —
which is exactly when you check whether there is room to
the filesystem directly, like System CPU usage already did.
If you record somewhere other than your home folder, open your disk key and
set Disk folder to your recording drive. It is asked
OBS on purpose: a key showing your home drive with OBS closed and your recording
drive with it open would silently be reporting two diffe
Install
Download the .deb and double-click it, or:
sudo apt install ./linux-stream-deck-0.2.7.debUpgrading keeps your configuration. Run:
sudo ./packaging/refresh-appstream.sh afterwards if you centre to show the new version.
v0.2.6 — See your scenes, watch your stream, catch what broke
This release turns keys into something you read, not just press.
🖼️ Live scene previews on the keys
A scene key can now show what that scene is actually sending out, refreshed
once or twice a second.
It looks great, but that is not the point. A dead capture card or a source
that failed to load shows up as a black key — so you spot the broken scene
before you cut to it, instead of live on air.
Off by default and enabled per key: every frame costs OBS a render, and that
is your call to make, not the app's.
📊 Live stats on a key
Put the numbers you actually watch straight on the deck: dropped frames,
stream bitrate, congestion, stream and recording time, free disk space, render
FPS, OBS's own CPU and memory, and your whole machine's CPU.
The key turns amber and then red as a measurement gets worse, so you notice
you are dropping frames or filling your disk without leaving what you were
doing. Free space warns you with 10 GB left, not with the last gigabyte.
🩺 Check your keys against OBS
Renamed a scene last week? Until now, every key pointing at it stopped working
silently — the key stayed there, with its icon, and did nothing.
Run Check keys against OBS from where you are and it lists what no longer
resolves, suggests what you probably meant, and repoints every affected key in
one go. It saves a backup first, so a wrong fix is undone by restoring it.
It never runs on its own: switching scene collection renames everything at
once, and a checker that cried wolf every time would be worthless.
🕓 Restore an automatic backup
Earlier configurations were already being kept — now you can actually get back
to one. Pick it by date and by what it holds. The current one is saved first,
so restoring the wrong copy is not the end of the story.
🔤 Readable option lists
Dropdowns showed internal identifiers like stream_time or positionX. They
now read as words, while still storing the identifier, so your saved keys are
untouched.
Install
Download the .deb and double-click it, or:
sudo apt install ./linux-stream-deck-0.2.6.debUpgrading over an earlier version keeps your configuration. After installing,
run:
sudo ./packaging/refresh-appstream.sh if you want your software centre to pick up the new version.
v0.2.5 — Stream Deck+ dials, printable layout sheet, press gestures & undo
What's new in v0.2.5
Stream Deck+ dials and LCD strip
Full support for Stream Deck+ rotary encoders (left turn, right turn, press) and the 800×100 LCD touchstrip. Each encoder gets a labelled panel on the strip showing what it does; tapping a panel triggers that encoder's press action. Dial configuration lives in its own dialog, separate from the key editor.
Printable layout sheet
Export any profile as a single PNG — every page and every folder inside it — with each key rendered exactly as it appears on hardware, plus a caption saying what it actually does. Useful for printing, pinning up next to your desk, or sharing with others.
Key label text color
Each key can now use a custom color for its label, centered clock/timer value and badge. Toggle keys can set a different color per state. Leaving it empty inherits the renderer default, so clearing a choice restores inheritance rather than freezing the current color.
Undo and redo
Clear, paste and swap operations on keys can be undone (Ctrl+Z) and redone (Ctrl+Y). History is scoped to the current grid and cleared on page, profile or folder changes.
Page and profile operations
Pages can be reordered (move up/down) and duplicated. Profiles can be duplicated. nav.page.go targets are automatically rewritten on rename; duplicated profiles point their navigation inside the copy.
Keyboard navigation of the key grid
Arrow keys move focus across the key grid without triggering the unsaved-change dialog. Left/right wrap between rows; up/down stop at the edges.
Full diff: v0.2.4...v0.2.5
v0.2.3 — Search, undo, and a deeper OBS catalogue
A quality-of-life release for the editor: find what you need, take back what you didn't mean, and reach three more corners of OBS.
Find things instead of remembering where they are
Search every action at once. The magnifier beside the Action dropdown searches all 42 actions by name, category, id — and by what they do. Typing webcam finds Virtual camera on/off; chroma key finds Enable/disable filter; back in 5 finds Set text source. Terms work in any order, and Enter picks the best match. You no longer have to know which category an action lives in before you can use it.
Every action now carries a description, so nothing is invisible to that search — twelve of them had none.
Find a key with Ctrl+F, or ⋮ → Find a key…. It searches every profile, page and nested folder by label, action or parameter value — mic, scene Live, 05:00 — shows you where each match lives, and jumps straight there when you pick one.
Undo
Ctrl+Z, or right-click a key → Undo last change. Clearing a key, pasting over one and dragging one to a new slot can all be taken back, up to 20 changes deep.
The history belongs to the grid you are looking at, so switching page, profile or folder starts a fresh one — restoring a key into a grid you have left would be invisible, and inside a folder the same slot is a different key entirely.
Test the whole key without hardware
A Single / double / long press key could only ever be half-tested on screen: a click has no release to time, so it always ran the single-press list. The •• and — buttons beside Test now run the other two lists directly. The physical deck still resolves real gestures from its own timing, exactly as before.
Three more OBS actions
| Action | What it does |
|---|---|
| Set text source | Replace what a text source displays — a countdown, a "back in 5" card, a now-playing line. Your font and colour are preserved. |
| Refresh browser source | Reload a browser source, bypassing its cache. |
| Move/scale source | Set or nudge a source's position, scale or rotation. adjust adds to the current value, so one key can move something step by step. |
Fixes
- Sources inside a group are now listed. Only the group itself appeared in the Source dropdown, so nothing inside it could be selected. Show/hide and the new transform action address them correctly too — OBS refers to a group's children by the group's name, not the scene's, so listing them without that would have produced keys that failed on press.
Install
Download linux-stream-deck-0.2.3.deb below and double-click it. Your software
centre installs it and pulls in the dependencies.
Prefer a terminal?
sudo apt install ./linux-stream-deck-0.2.3.debEither way there is nothing else to do: the package reloads the USB rule itself, so
you do not need to unplug the Stream Deck or log out.
Software centre still showing the old version, or no icon?
The package ships AppStream metadata, but the system cache is only rebuilt
periodically. To refresh it now:
sudo appstreamcli refresh-cache --forceThen close and reopen the software centre. This is purely cosmetic — the
application works either way.
v0.2.2 — More ways to reuse actions, and five new screen savers
Five new screen savers (6 → 11)
| Effect | What it looks like |
|---|---|
| Matrix Code | Columns of mirrored glyphs rain down a black screen, each stream led by a white-hot character. |
| HAL 9000 | One red camera eye watching from the middle of the deck, breathing slowly and casting its light on the keys around it. |
| Ember Field | Flames climb from the bottom of the deck, embers lifting off into the dark above. |
| Hyperspace | A warping wormhole tunnel twists past while stars spiral out of its throat. |
| Split-Flap Board | Every key becomes a flap module, riffling and settling into a word, then scrambling to the next. |
Choose one under Stream Deck display and hit Preview now to see it straight away — no idle wait, and no physical deck required.
Matrix Code draws half-width katakana where a Japanese font is installed, and falls back to Latin letters and digits where none is. For the authentic glyphs:
sudo apt install fonts-noto-cjk. The package only suggests it, so installing LinuxStreamDeck never pulls in 91 MB of fonts on its own.
Copy an action anywhere
The copy button on a step used to duplicate it at the end of the same list. Now it puts the action on a clipboard you can paste wherever you want:
- Right-click any row for everything it can do — Copy, Paste, Move up / down / to top / to bottom, and Remove. The row stays highlighted while the menu is open, so it is always clear which one you are acting on.
- Paste onto a row to insert it there, pushing that row down; right-click the list beside its rows to add it at the end.
- The copy survives switching lists, key types and keys, so an action can go into a toggle's ON list, into another press gesture, or into a completely different key.
- Single action keys join in too: right-click the editor to copy or replace its action.
- Paste action on the grid's right-click menu turns any key into a Single action key running the copied action — and the clipboard stays loaded, so you can drop the same action onto several keys in a row.
Pasted rows arrive scrolled into view but closed, since they are already configured.
Fixes
- Double-clicking a folder on the on-screen deck now opens it. This was documented but never actually worked: a GtkButton claims the click for itself, which cancelled the gesture that was waiting for the second one. You no longer have to go through the editor's Open folder button.
- Moving a step with the up/down arrows no longer leaves a background task running for the rest of the session.
Install
sudo apt install ./linux-stream-deck-0.2.2.deb
sudo ./packaging/refresh-appstream.sh # refresh the software-centre entryv0.2.1 — Folders, and a much better action list
Keys can now hold folders, and building multi-action keys got a lot less
tedious. Plus the OBS audio and recording actions gained the options they were
missing.
📁 Folders on a key
Group related actions inside a key instead of spending a whole page on them.
- Set a key's type to Folder, give it a name and an icon (or keep the
default), and save. - Double-click it on the on-screen grid to go inside; on the physical deck a
normal press opens it. - The first key inside every folder is a Back key showing the folder name. It
cannot be configured or overwritten, so the deck can never enter a folder it
is unable to leave. - Folders nest up to five levels, the key shows how many entries it holds,
and a path above the grid (Page 1 ▸ Scenes ▸ Audio) lets you jump back to any
level. - Everything works inside a folder exactly as outside: any key type, drag & drop,
copy/paste, single-key export and import.
Which folder is open is never saved — starting the app, changing page or
switching profile always returns to the page root, while timers, stopwatches and
toggle states keep their own state per folder position.
🏷️ Action lists
- Step names — give any step in a multiple, toggle, random or press key an
optional name, and the list shows it instead of the action name. - Duplicate a step to the end of the list, ready to adjust, so the next one
is a small edit rather than a fresh setup. - Controls moved onto the row — move up, move down, duplicate and remove sit
next to each step's title, so nothing has to be opened first. - Drag & drop reordering — grab a row by its handle and drop it anywhere.
- Newly added or duplicated steps open and scroll into view, and rows you opened
or collapsed stay exactly as you left them.
🎬 OBS
- Record now offers start, stop or toggle, so one key can do one
specific thing. Existing recording keys keep toggling. - Audio actions now ask for a scene first and then list only that scene's
audio sources, instead of every input in OBS. Desktop Audio and Mic/Aux are
always included, since they belong to no scene yet are audible on all of them.
The scene only narrows the list; the action still applies to the input itself.
✨ AI
Proposals with several actions now come with a step name on each one, so the
generated list reads as plain steps. The preview always shows that name next to
the real action it runs.
🐛 Fixes
- Source and Filter dropdowns stayed empty. If the first scene had no
sources (or the first source no filters), the field became a plain text box and
never recovered — you had to save the key, switch away and come back. The same
defect affected Show/hide source and Enable/disable filter. - Adding a step reopened steps you had collapsed, and closed ones you had
opened. - Reordering a step jumped the list back to the top.
- A row opened by itself when you dragged another step over it.
- The remove button was drawn in the normal text colour instead of red.
linuxstreamdeck --versionnow works — it used to be rejected as an unknown
option, even though the bug report template asks you to run it.
📦 Install
sudo apt install ./linux-stream-deck-0.2.1.debUpgrading is drop-in: your existing profiles, pages and keys are untouched.
One compatibility note: exports moved to .lsdconfig v4 and .lsdkey
v2 so they can carry folders. Older LinuxStreamDeck versions will refuse a
new export rather than silently dropping whole folders from it — files exported
with 0.2.0 and earlier still import normally.