Skip to content

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.

GET /audio

Returns server info, outputs, and clients in a single response.

GET /audio/server
POST /audio/server/mute
POST /audio/server/volume
GET /audio/outputs
POST /audio/outputs/{output}/default
POST /audio/outputs/{output}/mute
POST /audio/outputs/{output}/volume
GET /audio/clients
POST /audio/clients/{sink}/mute
POST /audio/clients/{sink}/volume
GET /audio/cookie

Downloads the PulseAudio authentication cookie — useful for setting up network audio sinks.

EventTrigger
audio.updatedSink input added or changed
audio.removedSink input removed
pulseaudio:
enabled: true
serve_cookie: true

serve_cookie exposes GET /audio/cookie — save the downloaded cookie on your client as ~/.config/pulse/cookie with 600 permissions to enable network audio streaming.

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.