embedder-bridge is a service for hardware attached to another machine. The agent stays on your workstation while serial data, flash commands, managed debug processes, and file transfers cross an authenticated connection.
Choose a deployment
The CLI carries a platform-specific bridge binary and extracts it below the Embedder application directory.
install-service copies that binary to /usr/local/bin/embedder-bridge.
Start a temporary LAN bridge
On the machine with the hardware:~/.embedder/bridge/config.toml, stores state under ~/.embedder/bridge/state, and starts a detached process.
_embedder-bridge._tcp.local. The bridge advertises its configured name, port, protocol version, fingerprint, and pairing state.
If multicast DNS is unavailable, use the address directly in later commands.
Pair over the LAN
1
Open a pairing window on the bridge host
2
Redeem the code from the workstation
3
Verify the fingerprint
The workstation prints the fingerprint returned during pairing. Compare it with
embedder-bridge status on the bridge host before accepting it as trusted.4
Test the saved pairing
doctor checks the pinned connection, serial enumeration, common flash and debug binaries, and a file-transfer round trip.~/.embedder/bridges.json. The file is set to mode 0600 where supported. The bridge stores a hash of the client token, not the token itself.
Install a relay service
Run this on the bridge host:- Copies the bundled binary to
/usr/local/bin. - Preserves an existing config or creates one.
- Creates the state directory.
- Installs and starts a service.
- Configures the production relay.
127.0.0.1:4849. Remote clients reach it through the relay rather than an inbound LAN port.
Linux service
Linux uses:embedder-bridge, adds it to dialout and plugdev, sets the state directory to mode 0700, and enables the systemd service.
macOS service
macOS uses:Override install paths
Claim the relay enrollment
On first service start, the bridge registers with the Embedder relay and returns a setup code. Open the Bridges page in the Embedder app, add a bridge, and enter that code. After the claim, client traffic still runs inside the bridge’s pinned TLS session. The relay carries bytes but does not replace fingerprint verification. Run this on the bridge host to ask the relay to remove the registration:Bridge configuration
The binary reads TOML and rejects unknown fields./etc/embedder-bridge/config.toml
Changing
bind away from loopback enables mDNS advertisement. Every session still requires pairing or relay authentication.
Manage the bridge from the CLI
On the bridge host,embedder-bridge can run the service, show status and diagnostics, open pairing, manage clients, remove relay enrollment, or reset its identity.
On the workstation, embedder bridge can discover, pair, list, remove, test, and execute against saved bridges. See the CLI reference for the complete command syntax and options.
bridge exec defaults to a 10-minute timeout. The command runs in the bridge staging directory. A requested working directory must remain inside staging.
When exec_allowlist is nonempty:
- The first argument must appear in the list.
- Shell mode is disabled.
Security model
- TLS uses a stable bridge key and client-side fingerprint pinning.
- Pairing codes expire after two minutes.
- Client tokens are stored hashed on the bridge.
- Repeated authentication failures lock out further attempts, up to one hour.
- LAN and relay sessions use the same authenticated bridge protocol.
- File working directories are confined to staging.
exec_allowlist, and device permissions that match the intended lab access.
Troubleshooting
Discovery finds nothing
Discovery finds nothing
mDNS only runs when the bridge binds outside loopback. Check
bind, UDP multicast between the hosts, and the _embedder-bridge._tcp.local service. Pair directly with host:port when multicast is blocked.The bridge identity changed
The bridge identity changed
The pinned fingerprint differs from the current bridge. Confirm whether the state directory or identity was reset. Remove and re-pair only after verifying the new fingerprint on the bridge host.
Serial ports are missing
Serial ports are missing
On Linux, confirm that the service user belongs to
dialout and that USB probe udev rules grant plugdev access. embedder-bridge diagnose prints the hardware inventory visible to the service.A flash command is rejected
A flash command is rejected
Check
exec_allowlist. An empty list permits programs; a nonempty list must contain the exact first argument. Shell execution is unavailable while that list is active.Relay enrollment never completes
Relay enrollment never completes
Read the service log for the setup code, confirm outbound WSS access to the relay, and claim the current code in the Embedder app. Expired setup codes are replaced automatically.
Doctor reports no flasher or GDB server
Doctor reports no flasher or GDB server
Install
probe-rs and either OpenOCD or J-Link GDB Server on the bridge host. The service process must be able to find them on its PATH.CLI reference
Check every bridge command and option.

