Skip to content

Direct Installation

SnapDog is distributed as lightweight native binaries. The current release workflow publishes Linux (x86_64, aarch64), macOS (x86_64, aarch64), and Windows (x86_64, aarch64) artifacts.


Ensure your target machine meets the following requirements:

  • Linux: Kernel 5.4 or higher. ALSA (Advanced Linux Sound Architecture) is required for local audio output interfaces.
  • macOS: macOS 12 (Monterey) or higher.
  • Windows: Windows 10/11 or Windows Server 2019+ (supported when running as a background service).

AUR helper tools can be used to install the latest pre-compiled binary or build SnapDog directly from the Arch User Repository.

Terminal window
# Install the server and audio client
yay -S snapdog snapdog-client
# Enable and start the systemd service
sudo systemctl enable --now snapdog

If you prefer to install the pre-compiled binaries manually:

  1. Download the correct archive for your architecture from the GitHub Releases page.
  2. Extract the archive and copy the binary to /usr/local/bin:
    Terminal window
    tar -xzf snapdog-vX.Y.Z-x86_64-unknown-linux-gnu.tar.gz
    sudo mv snapdog /usr/local/bin/
    sudo chmod 755 /usr/local/bin/snapdog

If you want to compile SnapDog with custom target optimizations, you can build it from source using Cargo.

Ensure your development machine has the required system libraries installed:

  • Debian/Ubuntu: sudo apt install build-essential pkg-config clang libasound2-dev libavahi-compat-libdnssd-dev
  • macOS: Xcode Command Line Tools are sufficient.
  1. Clone the repository:
    Terminal window
    git clone https://github.com/SnapDogRocks/snapdog.git
    cd snapdog
  2. Build the release binary:
    Terminal window
    cargo build --release -p snapdog
  3. The compiled binary will be available at target/release/snapdog.

To ensure SnapDog starts automatically on boot and restarts in case of failures, configure a service supervisor.

Create /etc/systemd/system/snapdog.service:

[Unit]
Description=SnapDog Multi-room Audio Controller
After=network-online.target sound.target
Wants=network-online.target
[Service]
Type=simple
User=snapdog
Group=audio
ExecStart=/usr/local/bin/snapdog --config /etc/snapdog/snapdog.toml
Restart=always
RestartSec=5
LimitRTPRIO=99
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target

Create ~/Library/LaunchAgents/cc.snapdog.server.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>cc.snapdog.server</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/snapdog</string>
<string>--config</string>
<string>/Users/Shared/snapdog.toml</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>

SnapDog supports two primary Snapcast compilation backends. You can select the backend using Cargo feature flags:

  • snapcast-embedded (Default & Recommended): Integrates the Snapcast server directly into the Rust daemon binary (leveraging our native Rust port of the original C++ Snapcast codebase via the snapcast-* crates). This mode is strongly recommended because it manages group synchronization inline, supports proprietary float PCM channels for parametric EQ corrections, and doesn’t require maintaining an external binary.
  • snapcast-process: Spawns and manages a standalone C++ snapserver process in the background. Choose this only if you must rely on advanced C++ features or legacy external pipe encoders.