audio + bridge = aubri
Encrypted peer-to-peer audio streamer. aubri establishes a secure audio pipeline using ChaCha20Poly1305 AEAD over UDP or TCP.
By default, the package compiles as a headless command-line interface to minimize the attack surface on server deployments. A graphical diagnostic suite is available via cargo feature flags.
Motivation
Heavy headsets cause physical fatigue during long sessions. I switched to lightweight earbuds, but my desktop lacks bluetooth. aubri bridges this gap by streaming audio from my workstation to a secondary device that handles the connection. No dongles, no complex drivers just a simple, direct bridge.
| | | | | |
| () | | () | | |
| | | | | |
| [ || [ || () |
| |
Build instructions
Compile the headless CLI:
Compile with the graphical diagnostic suite:
Global options
These options can be appended before any subcommand.
--json: Mute standard human-readable logs and output raw JSON telemetry to stdout every 500ms. Designed for pipeline integrations.
Commands and usage
List devices
Enumerate all available audio capture and playback interfaces recognized by the system.
Server mode (capture)
Binds to a network interface, awaits a secure handshake, and streams captured hardware audio.
Arguments:
-b, --bind <BIND>: Network interface and port to bind (default:0.0.0.0:8080).-s, --secret <SECRET>: Cryptographic session secret. If omitted, prompts securely. Can also be set viaAUBRI_SECRETenvironment variable.-P, --protocol <PROTOCOL>: Transport protocoludportcp(default:udp).-d, --device <DEVICE>: Partial or exact name of the capture hardware. On Linux, this defaults topulseto capture the automatically provisioned virtual sink.-r, --sample-rate <SAMPLE_RATE>: Override hardware sample rate (e.g.,48000).
Examples:
# standard execution using environment variable for security
AUBRI_SECRET="your_secure_password"
# force tcp protocol and target a specific input device
# output json telemetry for external monitoring
Client mode (playback)
Connects to a remote server, negotiates the cryptographic session, and plays the received audio stream through a jitter buffer.
Arguments:
-a, --address <ADDRESS>: Target server IP and port (required).-s, --secret <SECRET>: Cryptographic session secret.-P, --protocol <PROTOCOL>: Transport protocoludportcp(default:udp).-d, --device <DEVICE>: Partial or exact name of the playback hardware.-r, --sample-rate <SAMPLE_RATE>: Override hardware sample rate.-l, --latency <LATENCY>: Jitter buffer capacity in milliseconds (default:350).-p, --prebuffer <PREBUFFER>: Milliseconds of audio to accumulate before starting playback to prevent stuttering (default:120).-k, --keep-alive: Enable watchdog resilience. Automatically attempts reconnection if the socket drops or the server stops responding.
Examples:
# standard execution
AUBRI_SECRET="your_secure_password"
# optimize for low latency networks (reduce buffer sizes)
AUBRI_SECRET="your_secure_password"
# highly resilient tcp connection
AUBRI_SECRET="your_secure_password"
Graphical interface
If compiled with --features gui, launches the visual diagnostic suite.
Tests
Validated stream stability and audio across the following cross-distribution scenarios
| source (server) | target (client) | status |
|---|---|---|
| Ubuntu 24.04 | Arch Linux | ok |
| Arch Linux | Ubuntu 24.04 | ok |
Automatic configuration
aubri handles the Linux audio stack
Server: creates and selects the aubri virtual sink.
Client: detects and connects to your pipewire for client or pulseaudio backend no manual device configuration required.