Features & Use Cases
DeckBridge turns a USB Stream Deck into a network device the Elgato app can use over WiFi. This page covers what it does, who it's for, the permissions it asks for, and exactly which files and ports it touches.
Use a budget deck with the Elgato app
DeckBridge lets the official Elgato Stream Deck app drive cheap, non-Elgato decks —
Mirabox, Ajazz, and similar 15-key (3×5) boards — on the same PC that runs the app. The
app sees a regular Network device at localhost; the deck behaves like Elgato
hardware.
- Run DeckBridge on the PC.
- Plug the Stream Deck into USB.
- DeckBridge detects it and advertises it on the network.
- Open the Elgato app and pair it as a Network device — IP
localhost.
Feature overview
- Network Dock emulation — speaks the Elgato CORA protocol on TCP
and advertises over mDNS as
_elg._tcp("Network Stream Deck"). The app discovers it like real Elgato hardware. - Works with non-Elgato decks — a Mirabox 293V3/Ajazz, 293S, or K1 Pro presents itself to the app as an Elgato model the app already knows, so nothing changes app-side.
- Per-device image pipeline — resizes, rotates, and (for the K1 Pro) re-encodes every button image to the device's native format via a Rust native library, with a cache to skip repeat work.
- Non-blocking by design — USB HID and the 50–200 ms image transforms run on a separate worker thread, so the network ACK loop and web UI never stall.
- Live web UI —
http://localhost:3000shows the key grid and a log feed in real time. - System tray + diagnostics — installer builds add a tray icon (gray / yellow / green
status) and a
/requirementsself-check page. - Standalone binary — one <5 MB file built on txiki.js; no Node.js. The native libraries are embedded and auto-extract on first run.
Use cases
- Use a budget deck with the official app — drive a Mirabox / Ajazz / K1 Pro from the Elgato Stream Deck app as if it were Elgato hardware.
- Put the deck on another computer — plug the deck into a laptop or mini-PC, run DeckBridge there, and control the Elgato app on your streaming PC across the LAN. The deck no longer has to sit at the main machine.
- Skip the Network Dock — get network-dock behaviour for hobby setups without buying the Elgato Network Dock.
- Use a real Stream Deck wirelessly — a Stream Deck Mini or MK.2 works the same way, over WiFi instead of a cable.
- Bitfocus Companion — Companion also speaks the dock protocol and discovers DeckBridge the same way.
DeckBridge is for personal and hobby use, and does not replace the Elgato Network Dock. See the Introduction for the full disclaimer.
Permissions
DeckBridge needs a few OS permissions, each requested the first time it's used. No admin / root rights are required.
| Permission | Platform | Why |
|---|---|---|
| Input Monitoring | macOS | Reading HID reports (key presses) from the deck. Grant it to the app or terminal running DeckBridge, then restart it. |
| Local Network | macOS 15+ | Advertising over Bonjour / mDNS and serving the CORA ports on the LAN. macOS may prompt on first run. |
| Firewall allow | macOS / Windows | Inbound TCP on 5343 / 5344 so the Elgato app can connect. Allow it if your firewall prompts. |
Requirements
The /requirements page (tray → Check Requirements) verifies each of these at runtime:
| Requirement | macOS | Linux | Windows |
|---|---|---|---|
| libhidapi | bundled / brew install hidapi | sudo apt install libhidapi-dev | bundled |
| deckbridge-native (Rust lib) | bundled | bundled | bundled |
| mDNS | Bonjour (built in) | avahi-daemon running | built in (Win10 1803+) |
| Tray helper | bundled (installer builds) | — | bundled |
| Free TCP ports | 5343 / 5344 must be free | same | same |
Packaged releases embed libhidapi and the native library, so a source build is the only case that needs a system libhidapi installed.
Files, ports & data
DeckBridge stores no personal data and sends no telemetry. It reads and writes only what it needs to run.
Reads
- Its own embedded libraries (libhidapi, deckbridge-native) from inside the binary.
- The system libhidapi (source builds, or when overridden via
HIDAPI_LIB). - A handful of environment variables (below). There is no config file.
Writes
-
Native library cache — extracts the embedded libs once per version to:
- macOS:
~/Library/Caches/deckbridge/native-<build-hash>/ - Linux:
$XDG_CACHE_HOME/deckbridge/(or~/.cache/deckbridge/) - fallback: a temp directory if the cache root isn't writable
Old
native-<hash>folders from previous versions are cleaned up automatically. - macOS:
-
Debug image dumps — only when
DECKBRIDGE_DUMP_DIR/DECKBRIDGE_RAW_DUMP_DIRare set. Off by default.
Network ports
| Port | Bind | Purpose |
|---|---|---|
| 5343 | 0.0.0.0 (LAN) | CORA main server — the Elgato app connects here |
| 5344 | 0.0.0.0 (LAN) | CORA child server — image / data channel |
| 3000 | 127.0.0.1 only | Web UI |
mDNS _elg._tcp | LAN | Service discovery ("Network Stream Deck") |
Set DECKBRIDGE_BIND=127.0.0.1 to restrict the CORA ports to the local machine. The web
UI is always localhost-only.
Limitations
- One deck at a time — a single connected device is bridged; multiple simultaneous devices are not yet supported (planned).
- Keys only — no dials, encoders, touchscreens, or LCD strips (Stream Deck +/Plus, Neo, and similar are out of scope).
- Fixed ports — CORA is hard-wired to 5343 / 5344; conflicts with a real Elgato Network Dock or a second DeckBridge instance on the same machine.
- No auth or encryption — the CORA ports trust the LAN. Use
DECKBRIDGE_BIND=127.0.0.1to keep them local. - Hobby use — not a reliability or support replacement for the Elgato Network Dock.
Environment variables
| Variable | Effect |
|---|---|
DECKBRIDGE_BIND | Bind address for the CORA servers (default 0.0.0.0) |
HIDAPI_LIB | Path to a specific libhidapi |
DECKBRIDGE_NATIVE_LIB | Path to the deckbridge-native cdylib |
DECKBRIDGE_TRAY_BIN | Path to the tray helper binary |
DECKBRIDGE_OPEN | Auto-open the web UI in a browser on start |
DECKBRIDGE_MOCK | Run with a mock device (no hardware) |
DECKBRIDGE_DUMP_DIR | Write each transformed device image here (debug) |
DECKBRIDGE_RAW_DUMP_DIR | Write paired raw + transformed images here (debug) |