A lightweight Rust daemon for Stream Deck that maps keys to icons and shell commands.
streamrs is built for and tested on:
- Elgato Stream Deck MK.2
- USB ID:
0fd9:0080 vendor_id = 4057(0x0fd9)product_id = 128(0x0080)
- Supports static icons: PNG, JPEG/JPG, SVG
- Supports animated icons: GIF, APNG, animated WebP (rendered by streamrs frame-by-frame)
- Built-in digital clock icon via
icon = "clock.svg"(oricon = "clock://hh:mm") - Optional key actions: missing or blank
actionmeans no-op on press - Status-driven toggle icons via polling commands
- Automatic pagination when config has more than 15 keys
- Auto-initializes profile assets when config is missing
Clock details:
- Renders
HH:MMonce per second - Uses
blank.pngas background when present - Falls back to an internal dark background when
blank.pngis missing
Status icon fields:
status = "<command>": executed withsh -c; exit code0= ON, non-zero = OFFicon_on/icon_off: optional ON/OFF icons (fallback toiconwhen omitted)status_interval_ms: optional poll interval in milliseconds
Install a release package:
sudo apt install ./streamrs_<version>_<arch>.debExample architecture values: amd64, arm64.
Package contents:
/usr/bin/streamrs/usr/bin/streamrs-preview/usr/lib/systemd/user/streamrs.service/usr/share/streamrs/default/default.toml/usr/share/streamrs/default/(bundled icons)
First-time setup after install:
streamrs --init
systemctl --user daemon-reload
systemctl --user enable --now streamrs.serviceNotes:
streamrs --initcopies default config/icons into your user profile paths.- If you skip
--init,streamrsauto-initializes on first run when config is missing. - To update profile files from packaged defaults later, run
streamrs --init --force.
After installing the .deb, run manually:
streamrsCLI flags:
--debug: inherit child process stdout/stderr--profile <name>: use~/.config/streamrs/<name>.tomland~/.local/share/streamrs/<name>/--config <path>: use a custom config path--init: initialize profile config + images, print service commands, then exit--force: with--init, overwrite existing config/images from source assets
Notes:
- If config is missing, streamrs auto-runs profile initialization before startup.
--forceoverwrites known source files but does not remove extra files already in the profile image directory.
Pagination:
stream-deck-next-page.pngappears on bottom-right when a next page exists.stream-deck-previous-page.pngappears in the bottom-right area when a previous page exists.
Use streamrs-preview to generate an image from your current default profile config + icons:
streamrs-preview --output mock.pngNotes:
streamrs-previewonly supports--output.- If
--outputis omitted, it writesmock.pngin the current directory. - It reads your current profile data from:
~/.config/streamrs/default.toml~/.local/share/streamrs/default/
- If those are missing, it falls back to packaged defaults under
/usr/share/streamrs/default/.
If you are working from a checkout instead of a .deb install:
make installThis installs:
- Binaries:
~/.local/bin/streamrs~/.local/bin/streamrs-preview
- Config:
~/.config/streamrs/default.toml - Images:
~/.local/share/streamrs/default/ - User service:
~/.config/systemd/user/streamrs.service
Generate the README mock from source:
make mockBuild a .deb locally from source:
cargo build --release --locked --bin streamrs --bin streamrs-preview
bash scripts/build-deb.sh <version> dist