1-bit-bridge

Companion server for the 1-bit iOS music player. Reach your home music library from anywhere — over Tailscale, a VPN, or a direct connection — without SMB's round-trip penalty.

Why

1-bit's built-in SMB transport is great on LAN but painful over high-latency links. Every pread on a remote share costs a round trip, so a library scan that finishes in seconds at home can take minutes over Tailscale's relay. 1-bit-bridge replaces SMB with an HTTP/2 protocol purpose-built for the app, plus a pre-built library manifest that lets the iOS side skip its two-phase scan entirely.

How it works

Install

macOS

tar -xzf 1-bit-bridge_*_macos_arm64.tar.gz
./bridge init

Signed + notarized. Gatekeeper-accepted on first launch.

Linux

tar -xzf 1-bit-bridge_*_linux_amd64.tar.gz
./bridge init

Installs a systemd user unit.

Windows

Expand-Archive -Path 1-bit-bridge_*_windows_amd64.zip -DestinationPath .
.\bridge.exe init

Startup-folder launcher; use --service from an admin shell for a real Windows Service.

Downloads for every OS / arch are at the latest release page. Full install walk-through and preflight checks (bridge doctor) are in the README.

Windows note: current Windows binaries are unsigned. First launch will show SmartScreen's "unrecognized app" — click More infoRun anyway. Authenticode signing is pending SignPath Foundation review.

Pairing

Open the admin console's Devices page, click Pair new device, give it a name, and generate a token. The page shows a QR encoding a bridge://pair?... URL — scan it from the 1-bit iOS app, or paste the three fields (URL, token, TLS fingerprint) manually. Every further request the iOS app makes is bearer-authenticated and fingerprint-pinned. iOS also auto-discovers the bridge over Bonjour on the LAN, so you only have to type the bearer token.

Updates

The bridge polls GitHub Releases and surfaces an update banner in the admin console. Auto-install is opt-in; once enabled, you can set quiet hours (the bridge won't restart inside that window). Manual install runs the same path: download, verify the release-meta sidecar, atomic swap, with a one-tap rollback if the new build doesn't behave. The iOS app reads the bridge's protocol/version envelope on every /v1/health probe and surfaces an inline advisory when an update is available — or when the bridge requires a newer iOS app.

Backups

Configuration, paired tokens, and the indexed library all live in a single state directory. The admin console's Settings page makes timestamped snapshots on demand; periodic automatic snapshots can be turned on with a configurable rotation count. Restoring a snapshot is a CLI operation (bridge restore) that requires stopping the bridge first — kept off the web UI so an accidental click can't replace the running library mid-stream.

Protocol

See PROTOCOL.md for every endpoint, shape, and error code. Every client endpoint is prefixed /v1/; the admin console (/, /api/*, /static/*) lives on a separate loopback listener and is not part of the wire protocol. Additive fields (manifest pagination, mDNS TXT keys) ship without a protocol bump; breaking changes do bump X-Bridge-Protocol and the iOS app refuses to talk to a server it doesn't understand.

Open source

MIT-licensed. Source at github.com/acoseac/1-bit-bridge: the Go server, the embedded admin console, the protocol spec, and the release pipeline. Issues and PRs welcome — see CONTRIBUTING.md. Security reports via GitHub's private advisory flow.