PulseAudio
The PulseAudio backend provides full control over the node’s audio: server info, output selection, global and per-client volume/mute. Works with both PulseAudio and PipeWire (via pipewire-pulse).
Uses a pure-Go PulseAudio native protocol implementation — no libpulse dependency.
Endpoints
Section titled “Endpoints”Combined state
Section titled “Combined state”GET /audioReturns server info, outputs, and clients in a single response.
Server
Section titled “Server”GET /audio/serverPOST /audio/server/mutePOST /audio/server/volumeOutputs (sinks)
Section titled “Outputs (sinks)”GET /audio/outputsPOST /audio/outputs/{output}/defaultPOST /audio/outputs/{output}/mutePOST /audio/outputs/{output}/volumeClients (sink inputs)
Section titled “Clients (sink inputs)”GET /audio/clientsPOST /audio/clients/{sink}/mutePOST /audio/clients/{sink}/volumePulseAudio cookie
Section titled “PulseAudio cookie”GET /audio/cookieDownloads the PulseAudio authentication cookie — useful for setting up network audio sinks.
Events
Section titled “Events”| Event | Trigger |
|---|---|
audio.updated | Sink input added or changed |
audio.removed | Sink input removed |
Configuration
Section titled “Configuration”pulseaudio: enabled: true serve_cookie: trueserve_cookie exposes GET /audio/cookie — save the downloaded cookie on your client as ~/.config/pulse/cookie with 600 permissions to enable network audio streaming.
How it works
Section titled “How it works”The backend connects to PulseAudio via its native protocol over the Unix socket. Real-time events are captured through PulseAudio’s built-in monitoring mechanism.