My ultimate guide to the Raspberry pi audio server I wanted — Multiroom support with Snapcast
Published: 2025-12-10
Part 9 — MultiRoom (Snapcast)
Snapcast is one of the most reliable and elegant ways to build a perfectly synchronized multi-room audio system. Snapcast guarantees sample-accurate playback, scales to many rooms, and is extremely lightweight on the client side, making it ideal for old Raspberry Pis (Pi B+, Pi Zero, Pi 2).
This guide walks you through how to make Snapcast fits into a NAS + Raspberry Pi architecture, and how to set it up ith MPD, Spotify, AirPlay, and PipeWire, with all differences between Debian 12 (Bookworm) and recently published Debian 13 (Trixie).
1. Why Snapcast?
I initially tried to do everything directly on the Raspberry Pi with MPD, Spotifyd and PipeWire, but I kept getting random audio cracks — especially every time Spotifyd loaded the next track. Old ARMv6 boards just can’t seem to keep up with modern audio stacks.
That’s the moment I decided to stop fighting the hardware and move the heavy work to my NAS, keeping the Raspberry Pi B+ as an ultra-light Snapclient endpoints.
Snapcast solves all of these at once:
Here are main Snapcast main components :
- Snapclient (Raspberry Pi): Plays audio from Snapserver with perfect sync
- Snapserver (NAS): Mixes and distributes all audio streams from various sources: MPD, Spotify, AirPlay, PipeWire, etc
2. Installing Snapserver on Debian 12 & 13
Debian 12 (Bookworm)
Debian 12 ships Snapcast 0.30 in backports, or 0.26, which are too old because they lack AddStream / RemoveStream features which are mandatory for PipeWire source auto-management (7).
You need at least Snapcast 0.31 from GitHub, current version is 0.34:
$ wget https://github.com/snapcast/snapcast/releases/download/v0.34.0/snapserver_0.34.0-1_amd64_bookworm.deb
$ sudo dpkg -i snapserver_0.34.0-1_amd64_bookworm.deb
Debian 13 (Trixie)
Debian 13 ships Snapcast 0.31 natively, just install it.
$ sudo apt install snapserver
We’ll also install Snapweb to control our streams:
$ wget https://github.com/snapcast/snapweb/releases/download/v0.9.3/snapweb_0.9.3-1_all.deb
$ sudo dpkg -i snapweb_0.9.3-1_all.deb
Edit /etc/snapserver.conf:
[server]
[http]
enabled = true
bind_to_address = 0.0.0.0
doc_root = /usr/share/snapweb
[tcp]
enabled = true
bind_to_address = 0.0.0.0
This enables:
- Snapweb UI (on port 1780)
- TCP stream interface (port 1704)
3. Adding MPD as a Snapcast Stream
Configure MPD FIFO Output
FIFO output is the classic and most reliable way to feed MPD into Snapcast. It’s simple and low-overhead.
Edit /etc/mpd.conf:
audio_output {
type "fifo"
name "SnapMPD"
path "/tmp/mpdfifo"
format "48000:16:2"
mixer_type "software"
}
And restart MPD
$ sudo systemctl restart mpd.service
Snapserver Stream
In /etc/snapserver.conf under [stream], add:
[stream]
# ...
source = pipe:///tmp/mpdfifo?name=MPD&devicename=SnapMPD
And restart snapserver:
$ sudo systemctl restart snapserver
Done — your NAS can now stream its MPD audio to all rooms.
For now, I don’t have any way to stream the Rasperry Pi’s MPD (handling audio CDs and USB sticks) to stream to snapcast, but that may be possible in the future.
4. Adding Spotify (via Librespot)
Install Librespot from source
Debian repositories are too old, so we need to install Rust and Librespot manually:
$ apt-get install build-essential libasound2-dev
$ curl https://sh.rustup.rs -sSf | sh
$ cargo install librespot
$ sudo mv .cargo/bin/librespot /usr/local/bin
This gives you the latest Spotify Connect implementation.
Snapserver Stream
In /etc/snapserver.conf under [stream], add:
[stream]
# ...
source = librespot:///usr/local/bin/librespot?name=Spotify&devicename=SnapSpot&bitrate=320&volume=100&normalize=false
And restart snapserver:
$ sudo systemctl restart snapserver
Now Snapserver exposes a Spotify Connect endpoint in Snapweb.
5. Adding AirPlay (shairport-sync)
Install shairport-sync
Debian 12 → v3.3.8 (AirPlay 1 only)
Debian 13 → v4.3.7 (AirPlay 2 supported !)
$ sudo apt install shairport-sync
$ sudo systemctl disable --now shairport-sync
Shairport will be started by Snapserver, by _snapserver user, so we have to disable the service startup and edit a few dbus policies and add our _snapserver user in the owners of shairport dbus services, as we did on the raspberry in our previous article about AirPlay.
Place the following directives in the <busconfig> section
Edit shairport-sync-dbus-policy.conf:
Debian 12: /etc/dbus-1/system.d/shairport-sync-dbus-policy.conf
Debian 13: /usr/share/dbus-1/system.d/shairport-sync-dbus-policy.conf
<policy user="_snapserver">
<allow own="org.gnome.ShairportSync"/>
</policy>
Edit shairport-sync-mpris-policy.conf:
Debian 12: /etc/dbus-1/system.d/shairport-sync-mpris-policy.conf
Debian 13: /usr/share/dbus-1/system.d/shairport-sync-mpris-policy.conf
<policy user="_snapserver">
<allow own="org.mpris.MediaPlayer2.ShairportSync">
</policy>
Restart Dbus:
$ sudo systemctl restart dbus.service
Snapserver stream
In /etc/snapserver.conf under [stream], add:
[stream]
# ...
source = airplay:///usr/bin/shairport-sync?name=Airplay&devicename=SnapAir&port=5000
And restart snapserver:
$ sudo systemctl restart snapserver
You now have a fully integrated AirPlay endpoint (1 or 2 depending on Debian version).
6. Installing Snapclient on Raspberry Pi
Snapclient doesn’t really benefit from version 0.31 — only Snapserver does. On Debian 12, both Snapclient 0.26 (bookworm) and 0.30 (bookworm-backports) work perfectly fine.
The only real requirement is Snapserver ≥ 0.31 because it restores AddStream and RemoveStream.
Of course, for a multi room setup and the full Snapcast experience, you have to repeat this part on every raspberry behind speakers that you want.
$ sudo apt install snapclient
Use Pulse/PipeWire as backend
Edit /etc/default/snapclient:
SNAPCLIENT_OPTS="--player pulse"
Run Snapclient as a user service
Running Snapclient as a user service ensures PulseAudio/PipeWire is already running before Snapclient starts. The system service starts too early and can fail silently.
$ sudo systemctl disable --now snapclient.service
$ systemctl --user enable --now snapclient.service
7. PipeWire Autodiscovery
PipeWire can automatically detect Snapcast servers and redirect audio streams to them. With this module, any audio played on this machine (browser, apps, system sounds, games, anything) automatically appears as a Snapcast stream on your network. Zero configuration. Very useful for PCs, laptops, HTPCs, etc.
Create ~/.config/pipewire/pipewire.conf.d/my-snapcast-discover.conf
context.modules = [
{ name = libpipewire-module-snapcast-discover
args = {
stream.rules = [
{ matches = [
{ snapcast.ip = "~.*" }
]
actions = {
create-stream = {
node.name = "Snapcast"
node.description = "Snapcast Server"
}
}
}
]
}
}
]
And restart Pipewire
$ systemctl --user restart pipewire-pulse.service pipewire.service wireplumber.service
The Snapserver then appears as “Snapcast Server” in your audio outputs.

8. Conclusion
After setting up Snapcast with MPD, Spotify (Librespot), AirPlay, and PipeWire, the results are exactly what I wanted. Old Raspberry Pis like the Pi B+ become stable, low-CPU multiroom endpoints. Audio is perfectly synchronized across rooms, without the cracks and stuttering I had when trying to run everything directly on the Pi.
Snapserver centralizes all sources on the NAS, and Snapclient handles playback reliably.
Management is straightforward: the web interface on http://

Snapweb on http://
Snapcast Android application
Combined with PipeWire Snapcast discovery, any desktop or laptop application can become a stream without manual configuration.
However for now, we cannot use our Pi and its special features (bluetooth, Audio CD, USB flash drives) as a stream for Snapcast, but we will get to that eventually.
Overall, this setup proves that you don’t need new hardware for true multiroom audio. With a the central hub such as a NAS and lightweight Raspberry Pi clients, even old ARM boards can deliver a rock-solid, fully controllable, multi-source audio system.