How to Run a Self-Hosted Music Server on Raspberry Pi with Navidrome and OpenClaw
Navidrome turns a Raspberry Pi into a personal music streaming server with support for 73 client apps across every major platform. The setup covers OS preparation, binary installation, ARM-specific performance tuning, and adding an OpenClaw agent that automates library monitoring, metadata cleanup, and offsite backups.
Why Navidrome Stands Out for Raspberry Pi Music Streaming
The global music streaming market hit $42.84 billion in 2026, according to SQ Magazine. You can build a comparable personal streaming experience on a $35 Raspberry Pi running Navidrome, a free, open-source music server written in Go and licensed under GPL v3.
Navidrome has earned 21.6k GitHub stars and lists 73 compatible client apps on its official directory. Those apps span iOS, Android, macOS, Windows, Linux, Apple TV, Garmin watches, and web browsers. The server itself uses an embedded SQLite database, so there is no PostgreSQL or Redis to install and configure. A single binary indexes your music files, serves a web player, exposes the Subsonic API for third-party clients, and monitors your library for new additions in real time.
That lightweight design is what separates Navidrome from other self-hosted options on constrained hardware. Jellyfin is a capable all-in-one media server, but it targets video first and demands 500MB or more of RAM even for music-only workloads. Funkwhale brings ActivityPub federation and social sharing features, but its Django backend with PostgreSQL and Redis pushes idle RAM usage past 1GB. Gonic is similarly lightweight but lacks a built-in web player, smart playlists, and multi-user separation.
Navidrome sits in the sweet spot: full multi-user support with separate play counts and playlists per listener, smart playlists similar to iTunes, Last.fm and ListenBrainz scrobbling, on-the-fly transcoding with Opus support, and a web UI translated into 34 languages. All of this runs comfortably on a Raspberry Pi 4 with 2GB of RAM.
Most Navidrome Pi guides stop at a basic Docker install. This one adds USB SSD configuration to prevent SD card failure, ARM transcoding optimization, and an OpenClaw agent that handles the ongoing library maintenance you would otherwise run manually through SSH sessions.
What You Need Before Starting
Before starting, gather the right hardware and plan your software stack. The two most common Pi music server failures are SD card corruption from constant database writes and memory pressure during large library scans. Choosing the right components prevents both.
Hardware
- Raspberry Pi 4 (2GB minimum, 4GB recommended) or Raspberry Pi 5
- USB SSD (120GB or larger, depending on your library size)
- Official power supply: 5V/3A for Pi 4, 5V/5A for Pi 5
- Ethernet cable (recommended over WiFi for consistent streaming)
- MicroSD card (32GB is enough for the OS alone)
The Pi 5 has a quad-core Cortex-A76 at 2.4GHz, roughly three times faster than the Pi 4 for CPU-bound tasks like transcoding. If you plan to serve transcoded streams to multiple mobile clients at once, the Pi 5 is worth the price difference. For direct FLAC or MP3 playback over a home network, a Pi 4 handles it without breaking a sweat.
For storage planning: a typical FLAC album runs 300 to 500MB. A 1,000-album library needs roughly 400GB. If your collection is primarily MP3 or AAC at 256kbps, that drops to around 100GB for the same number of albums.
Software
- 64-bit Raspberry Pi OS Lite (Bookworm). The 32-bit version is incompatible with OpenClaw
- ffmpeg (required by Navidrome for format transcoding and metadata extraction)
- Node.js 24 (required by OpenClaw, installable via NodeSource)
- A cloud API key from Anthropic or OpenAI (OpenClaw runs inference in the cloud, not locally)
- Your music library in any standard format: FLAC, MP3, OGG, AAC, WMA, or Opus
Flash the OS using Raspberry Pi Imager. Configure the hostname, enable SSH, and set WiFi credentials in the imager's advanced settings before writing to the SD card. This lets you skip the monitor and keyboard for initial setup entirely.
How to Install Navidrome on Your Raspberry Pi
Navidrome offers two installation paths on the Pi: a pre-built ARM64 binary or Docker. The binary approach uses less RAM and starts faster on boot. Docker provides easier updates and process isolation. Both produce the same end result.
Binary installation
SSH into your Pi and install ffmpeg first:
sudo apt update && sudo apt install -y ffmpeg
Verify your ARM architecture to download the correct build:
cat /proc/cpuinfo
On a Pi 4 or 5 running 64-bit OS, you need the linux_arm64 build. Download the latest release from the Navidrome GitHub releases page (v0.62.0 as of June 2026), extract it, and place the binary in a dedicated directory like /opt/navidrome/.
Create a system user for Navidrome to run under, set ownership on the data and music directories, and write a systemd unit file that starts the service on boot. The key configuration settings to include in your navidrome.toml or environment variables are the music folder path, the data folder path (where SQLite and thumbnails live), and the bind address.
Start the service and verify it launched cleanly:
sudo systemctl enable --now navidrome
sudo systemctl status navidrome
Docker installation
Create a docker-compose.yml with two volume mounts: one for the Navidrome data directory and one for your music library. The official deluan/navidrome image supports linux/arm64 and linux/arm/v7.
services:
navidrome:
image: deluan/navidrome:latest
ports:
- "4533:4533"
volumes:
- /mnt/ssd/navidrome/data:/data
- /mnt/ssd/music:/music:ro
environment:
ND_SCANSCHEDULE: 15m
restart: unless-stopped
Mount the music library as read-only (:ro) since Navidrome only reads audio files. This prevents accidental writes to your collection.
First access
Open http://your-pi-hostname:4533 in a browser. Navidrome prompts you to create an admin account on first load. After entering credentials, the initial library scan starts automatically. A 10,000-track collection typically finishes scanning in under a minute on a Pi 4 with a USB SSD.
Optimizing Navidrome for ARM Performance
A default Navidrome install streams music fine for casual use. A few Pi-specific adjustments make a significant difference for larger libraries and concurrent users.
Move everything to USB SSD
Navidrome writes to its SQLite database and thumbnail cache on every scan cycle and during playback (for scrobble tracking and play count updates). Running these on a microSD card leads to wear and eventual data loss. This is the single highest-impact change you can make.
Format the SSD as ext4, mount it at a path like /mnt/ssd, and add the mount to /etc/fstab so it survives reboots. Store both your music library and the Navidrome data directory on this drive. Update your configuration or Docker volume paths to point there.
Configure swap space
Large metadata scans and concurrent transcoding sessions spike memory usage beyond what a 2GB Pi can handle in RAM alone. Add at least 1GB of swap on a 2GB Pi, or 2GB on a 1GB model. Edit /etc/dphys-swapfile, set CONF_SWAPSIZE=1024, and restart the swap service. Place the swap file on the SSD rather than the SD card.
Tune transcoding for ARM
On-the-fly transcoding is the most CPU-intensive operation Navidrome performs. When clients request a lower bitrate than the source file (common for mobile streaming over cellular), Navidrome calls ffmpeg to convert the audio in real time.
For clients on your home WiFi that can handle FLAC or high-bitrate MP3 directly, disable transcoding in each client's settings. This eliminates CPU load entirely for local playback. For mobile clients, set the default transcoding profile to Opus at 128kbps. Opus produces excellent audio quality at low bitrates and is less CPU-intensive to encode than MP3.
Reduce scan frequency
Navidrome's default scan interval is one minute. Unless you add music to your library multiple times per hour, this wastes CPU cycles. Set ScanSchedule to 15m or 1h. You can always trigger a manual scan from the web UI after adding new files.
Reclaim GPU memory
A headless Pi allocates 76MB to the GPU by default. Add gpu_mem=16 to /boot/firmware/config.txt to free 60MB for Navidrome and OpenClaw. Reboot for the change to take effect.
Disable unused services
Bluetooth, Avahi, and other default services consume RAM and CPU on a system where every megabyte counts:
sudo systemctl disable bluetooth
sudo systemctl disable avahi-daemon
Combined with swap tuning and GPU reduction, these changes free roughly 150MB of RAM for your music server stack.
Back up and share your music library from any device
Fastio gives your OpenClaw agent generous storage for library backups, metadata archives, and playlist exports. No credit card, no trial expiration. Connect via MCP at mcp.fast.io.
Adding an OpenClaw Agent for Library Automation
A running Navidrome server streams music, but someone still has to maintain the library: fix inconsistent tags, add missing album art, clean up duplicate files, and back up the database. An OpenClaw agent on the same Pi handles these chores without manual SSH sessions.
Installing OpenClaw on the Pi
OpenClaw's official Raspberry Pi documentation recommends a Pi 4 or Pi 5 with at least 2GB of RAM running 64-bit Raspberry Pi OS Lite. Install Node.js 24 from NodeSource, then run the OpenClaw installer:
curl -fsSL https://openclaw.ai/install.sh | bash
After installation, run the onboarding wizard to configure the daemon:
openclaw onboard --install-daemon
The wizard walks you through connecting a cloud LLM provider. The OpenClaw docs recommend Anthropic Claude Sonnet 4.6 as the primary model with OpenAI GPT 5.4 Mini as a fallback. Do not attempt local LLM inference on a Pi. The hardware is not powerful enough for useful agent workloads, and cloud models produce dramatically better results for library automation tasks.
Access the OpenClaw dashboard through an SSH tunnel on port 18789 to verify everything is running.
What the agent automates
With OpenClaw running alongside Navidrome, you can configure the agent to handle several library tasks:
- Watch your music directory for newly added files and trigger a Navidrome library rescan automatically
- Normalize inconsistent metadata tags across your collection (genre standardization, artist name corrections, missing album year fields)
- Fetch missing album artwork from MusicBrainz and other metadata providers
- Schedule periodic backups of the Navidrome SQLite database and configuration files
- Generate reports on library health: tracks missing artwork, albums with incomplete metadata, duplicate files taking up space
Backing up your library data
Your Navidrome database, configuration, and the music files themselves all need a backup strategy. For local redundancy, rsync to a second USB drive attached to the Pi works well. For offsite copies, rclone supports Backblaze B2, AWS S3, and dozens of other cloud targets.
If your OpenClaw agent already uses MCP tooling, Fastio provides a workspace endpoint at /storage-for-agents/ that agents can call directly. The agent can upload playlist exports, metadata snapshots, and database backups to a shared workspace. The Business Trial includes generous storage and monthly credits during the trial with no credit card or expiration. See storage for OpenClaw agents for setup details.
Other cloud storage options like Google Drive or Dropbox work through rclone, but they lack native MCP support. The agent would need to shell out to rclone rather than calling a structured API.
Connecting Client Apps and Streaming Your First Track
Navidrome exposes the Subsonic API, the standard protocol supported by dozens of music streaming apps. No additional server-side configuration is needed beyond what you have already set up. Point a client at your Pi and log in.
Recommended apps by platform
- Android: Symfonium is the most polished option with gapless playback, offline caching, Chromecast support, and Android Auto integration. It costs a one-time fee. Ultrasonic is a solid free and open-source alternative with a simpler interface
- iOS: play:Sub and Amperfy are both reliable. Amperfy is free and open source with CarPlay support. play:Sub has a more mature feature set including offline mode and AirPlay
- Desktop: Feishin runs as a web or Electron app with a modern interface, album grid views, and keyboard shortcuts. Strawberry is better for users who prefer a traditional music player with equalizer controls and ReplayGain
- Web: Navidrome's built-in web UI covers playback, playlist management, user administration, and library browsing. No additional app needed for quick access from any browser
Connecting a client
Add a new server in your chosen app with these details:
- Server URL:
http://your-pi-ip:4533 - Username and password: the credentials you created during Navidrome's first-run setup
Hit play on any album and audio should start within a second or two over your local network.
Accessing your music remotely
Streaming from outside your home network requires secure access to your Pi. Two approaches work well without exposing raw ports to the internet:
- Tailscale or WireGuard VPN: Your Pi gets a stable private IP on your mesh network. No firewall rules to maintain, no TLS certificates to renew. Clients connect as though they were on your home WiFi. This is the simplest approach for personal use
- Reverse proxy with HTTPS: Caddy or nginx on the Pi with a Let's Encrypt certificate gives you a public URL like
music.yourdomain.com. More configuration up front, but it lets you share access with friends without requiring them to join your VPN
Never expose Navidrome's port 4533 directly to the public internet without TLS encryption.
Scrobbling your listening history
Navidrome natively supports Last.fm, ListenBrainz, and Maloja for play tracking. Configure scrobbling credentials in the Navidrome web UI under your user profile. Most Subsonic clients also handle scrobbling on their end, so your listens are recorded regardless of which app you use.
Frequently Asked Questions
What is the best self-hosted music server for Raspberry Pi?
Navidrome is the strongest choice for dedicated music streaming on a Pi. It runs as a single Go binary, uses SQLite instead of a separate database server, and supports 73 client apps through the Subsonic API. Jellyfin handles music alongside video but uses more RAM. Funkwhale adds social federation features but requires PostgreSQL and Redis, which strain a Pi's limited memory. Gonic is another lightweight option but lacks a web player and smart playlists.
How do I install Navidrome on Raspberry Pi?
Flash 64-bit Raspberry Pi OS Lite to your SD card, install ffmpeg, then download the ARM64 binary from the Navidrome GitHub releases page. Place it in a dedicated directory, create a systemd service to start it on boot, and point the music folder configuration to your library. Alternatively, use Docker with the official deluan/navidrome image, which supports both ARM64 and ARMv7 architectures.
Can Navidrome replace Spotify?
Navidrome fully replaces Spotify for music you already own. It streams your personal library to any device through 73 compatible apps, supports offline sync in most clients, and scrobbles to Last.fm and ListenBrainz. What it cannot replace is Spotify's on-demand catalog of 100 million tracks, algorithmic recommendations, and social playlist features. If your listening is primarily your own collection, Navidrome covers everything you need.
What Subsonic apps work with Navidrome?
Navidrome lists 73 compatible apps on its official client directory. Popular picks include Symfonium and Ultrasonic for Android, play:Sub and Amperfy for iOS, Feishin and Strawberry for desktop, and SubMusic for Garmin watches. The built-in Navidrome web UI also handles playback and library management without any additional app.
Related Resources
Back up and share your music library from any device
Fastio gives your OpenClaw agent generous storage for library backups, metadata archives, and playlist exports. No credit card, no trial expiration. Connect via MCP at mcp.fast.io.