Skip to main contentSkip to navigation
[email protected]
Client AreaSupport
Hosting Mammoth
HostingMammothYour Data, Our Responsibility
Home
Solutions
Hosting Services
Store
Pricing
About
Blog
API
Contact

Stay Ahead of the Curve

Get the latest insights on cybersecurity, AI innovations, and enterprise data solutions delivered to your inbox.

Hosting Mammoth
HostingMammothEnterprise Solutions

Enterprise-grade data solutions. Hosting, recovery, cybersecurity, and AI-powered services for businesses worldwide.

[email protected]
Sun - Fri, 9:00am - 5:00pm

Services

  • Cloud Hosting
  • Data Recovery
  • Cybersecurity
  • Legal Support
  • MSP Services
  • Web Development
  • AI Services
  • Free Server Migration

Hosting

  • VPS Hosting (NVMe SSD)
  • VDS Hosting (NVMe)
  • Storage VPS (High SSD)
  • GPU Servers
  • Managed Services
  • Cloud Firewall
  • Load Balancer
  • One-Click Apps
  • n8n Hosting
  • Object Storage
  • FAQ

Company

  • Store
  • Pricing
  • About Us
  • Locations
  • Blog
  • Testimonials
  • Contact
  • Affiliate Program
  • White-Label
  • Terms of Service
  • Privacy Policy
  • Browser Cookies
  • SLA

Support

  • Client Area
  • Submit Ticket
  • Knowledge Base
  • Server Status
  • API Documentation

© 2026 Hosting Mammoth. All rights reserved.

Knowledge Base
Getting StartedAccount ManagementVPS HostingGPU ServersStorage VPSCloud FirewallLoad BalancerServer ManagementBilling & PaymentsSupport & TicketsAffiliate ProgramReseller ProgramMarketplace & Appsn8n HostingManaged ServicesServer MigrationAPI & DevelopersSecurityTroubleshootingGlossaryInstall Guides
  1. Home
  2. /
  3. Support
  4. /
  5. Install Guides
  6. /
  7. How To Install Navidrome Ubuntu
GUIDEInstall Guides

How to Install Navidrome on Ubuntu 24.04 — Self-Host Your Music Library

21 min read

How to Install Navidrome on Ubuntu 24.04 — Self-Host Your Music Library

Owning your music collection used to mean stacks of CDs and hard drives full of MP3s. Streaming services replaced that convenience — until they started pulling tracks without notice, hiking prices, and mixing your library with algorithmic clutter. Navidrome brings control back. It is a lightweight, modern music server that indexes your local audio files and streams them to any device using the open Subsonic API. This guide walks you through a production install on Ubuntu 24.04, from downloading the binary to serving your library over HTTPS with a custom domain.

Deploy a music-ready VPS in minutes. Our Starter plan has enough CPU, RAM, and disk for a multi-thousand-track library. Launch a VPS now and follow along.

Table of Contents

  • What is Navidrome?
  • Why Self-Host Your Music vs Spotify or Apple Music
  • Prerequisites
  • Step 1: Update System Packages
  • Step 2: Create a Dedicated Navidrome User
  • Step 3: Download the Navidrome Binary
  • Step 4: Prepare the Data and Music Directories
  • Step 5: Create the navidrome.toml Configuration
  • Step 6: Create the systemd Service Unit
  • Step 7: Upload Your Music and Create the First Admin
  • Step 8: Configure a Transcoding Profile
  • Step 9: Connect Subsonic-Compatible Mobile Apps
  • Step 10: Nginx Reverse Proxy with TLS
  • Troubleshooting
  • FAQ
  • Next Steps
  • What is Navidrome?

    Navidrome is an open-source music streaming server written in Go. It scans a folder of audio files, extracts metadata from tags, builds an indexed library, and serves streams to browsers and mobile apps through both a modern web UI and the widely supported Subsonic API. A single static binary handles everything — there is no Java runtime, no database server to install, and no Docker required. The server runs happily on a small VPS, an old laptop, or a Raspberry Pi, and the memory footprint for a library of ten thousand tracks sits comfortably under 300 MB.

    The feature set covers what most listeners actually need. Navidrome supports FLAC, MP3, AAC, OGG, Opus, WAV, and WMA out of the box. Tags from MusicBrainz and embedded ID3v2 data populate artist, album, genre, year, composer, and track information. Playlists, smart playlists, starred tracks, five-star ratings, play counts, and last-played timestamps give you a real library experience rather than a flat file browser. Album art is read from embedded images or cover.jpg / folder.jpg files in each album directory. Multi-user support with independent libraries and listening histories makes it straightforward to share a single server with family members. ListenBrainz and Last.fm scrobbling push your play history to external services if you want to keep public stats.

    The API compatibility is what makes Navidrome especially useful. By implementing the Subsonic API — a stable, decade-old protocol originally developed for the Subsonic server — Navidrome works with dozens of existing mobile and desktop clients without any custom app required. DSub, play:Sub, Substreamer, Ultrasonic, Symfonium, Sonixd, Feishin, Supersonic, Amperfy on iOS, and many more connect by entering your server URL, username, and password. You get a native mobile experience on every platform for free.

    Why Self-Host Your Music vs Spotify or Apple Music

    Streaming services are convenient, but self-hosting your own music server offers concrete advantages that matter more the longer you use it:

    • Your library stays yours -- Tracks disappear from Spotify and Apple Music every week due to licensing disputes, label removals, and regional rights changes. The album you bookmarked last year may be gone tomorrow. Navidrome serves the files on your disk, period. Nothing vanishes without you deleting it.
    • No price creep -- Spotify, Apple Music, YouTube Music, and Tidal have all raised prices multiple times in the past five years. A VPS that hosts Navidrome is a flat monthly cost you control. Buy FLAC albums from Bandcamp, rip CDs, or migrate an existing collection and you are done paying publishers a monthly rent for access.
    • Original audio quality -- Mainstream services max out at compressed AAC or Ogg Vorbis for most subscribers. Even the "HiFi" tiers often transcode on the fly. Navidrome streams your actual files -- if you stored a 24-bit FLAC rip, that is what you hear.
    • Complete catalog freedom -- Live bootlegs, DJ sets, podcasts ripped from RSS feeds, audiobooks, language-learning tapes, field recordings, demo tracks from local bands, classical performances not picked up by majors -- anything with a valid audio format lives alongside your commercial catalog.
    • Privacy by default -- Spotify's listening data feeds advertising profiles, recommendation engines, and record-label analytics dashboards. Navidrome logs stay on your server. No third party knows you listened to the same album forty times last week.
    • Shared family libraries with separate accounts -- One Navidrome instance with per-user accounts lets each family member have their own playlists, ratings, and listening history without paying for a family plan.
    • Works offline for supported clients -- Mobile apps like Symfonium and DSub cache tracks locally. Your commute playlist is always available even without a signal.
    • Self-hosted for under ten euros a month -- A 50 GB SSD stores roughly five thousand FLAC albums or fifteen thousand MP3 albums. A Starter VPS runs the server, the web UI, and all your streaming with margin to spare.
    For anyone with more than a casual music interest, the economics and control tip sharply toward self-hosting within the first year.

    Prerequisites

    Before you begin, make sure you have:

    • A VPS running Ubuntu 24.04 LTS with root or sudo access
    • SSH access to your server
    • At least 2 GB of RAM (4 GB recommended for libraries over 10,000 tracks)
    • Disk space for your music -- budget 50 GB per 5,000 FLAC albums or 15,000 MP3 albums
    • A domain name pointed at your VPS via an A record (needed for HTTPS in Step 10)
    Recommended Plan: Starter
    >
    For a personal Navidrome instance with a medium-sized library and one to five users, we recommend the Starter VPS plan:
    >
    - 2 vCPU cores
    - 4 GB RAM
    - 50 GB NVMe SSD
    - Unmetered bandwidth
    >
    If you store your library in lossless FLAC and plan to scale past 10,000 albums, pick a plan with 200 GB of disk or attach a block storage volume.

    Connect to your server via SSH:

    bash
    ssh root@your-server-ip

    Step 1: Update System Packages

    Start with a fresh package index and security updates. This also ensures dependencies like ffmpeg install cleanly later.

    bash
    sudo apt update && sudo apt upgrade -y

    Expected output (abbreviated):

    text
    Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
    Reading package lists... Done
    Building dependency tree... Done
    Calculating upgrade... Done
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

    Install a few supporting tools we will need throughout the tutorial:

    bash
    sudo apt install -y curl ca-certificates ffmpeg

    ffmpeg powers Navidrome's on-the-fly transcoding. Without it, you can still stream original files, but you cannot serve a lower-bitrate variant for mobile connections.

    Step 2: Create a Dedicated Navidrome User

    Running services as root is bad practice. Create a system user named navidrome that owns the binary, the data directory, and the music files.

    bash
    sudo useradd --system --home /var/lib/navidrome --shell /usr/sbin/nologin navidrome

    Flags explained:

    • --system creates a system account without a password and with a low UID
    • --home /var/lib/navidrome sets the home directory where the SQLite database and cache will live
    • --shell /usr/sbin/nologin prevents anyone from logging in as this user
    Verify the user exists:

    bash
    id navidrome

    Expected output:

    text
    uid=998(navidrome) gid=998(navidrome) groups=998(navidrome)

    Step 3: Download the Navidrome Binary

    Navidrome ships as a single precompiled binary. Check the releases page for the latest version, then download the Linux amd64 build.

    bash
    cd /tmp
    curl -L -o navidrome.tar.gz \
      https://github.com/navidrome/navidrome/releases/download/v0.54.0/navidrome_0.54.0_linux_amd64.tar.gz

    Expected output:

    text
    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 22.4M  100 22.4M    0     0  18.2M      0  0:00:01  0:00:01 --:--:-- 18.2M

    Extract and move the binary into /usr/local/bin:

    bash
    tar -xzf navidrome.tar.gz
    sudo mv navidrome /usr/local/bin/navidrome
    sudo chown root:root /usr/local/bin/navidrome
    sudo chmod 755 /usr/local/bin/navidrome

    Confirm the binary runs and prints a version:

    bash
    navidrome --version

    Expected output:

    text
    navidrome version 0.54.0 (abcdef1234)

    On ARM-based VPS instances, swap the download URL for linux_arm64.tar.gz. Check uname -m -- x86_64 means amd64, aarch64 means arm64.

    Step 4: Prepare the Data and Music Directories

    Navidrome needs two separate directories: one for its SQLite database and runtime state, another for the music files it will scan.

    Create the data directory at /var/lib/navidrome:

    bash
    sudo mkdir -p /var/lib/navidrome
    sudo chown navidrome:navidrome /var/lib/navidrome
    sudo chmod 750 /var/lib/navidrome

    Create the music directory at /media/music:

    bash
    sudo mkdir -p /media/music
    sudo chown navidrome:navidrome /media/music
    sudo chmod 750 /media/music

    The 750 permissions let navidrome read and write, let users in the navidrome group read, and block everyone else. If you want to upload music from your own user account, add yourself to the navidrome group and the music folder group-owner:

    bash
    sudo usermod -aG navidrome $USER
    sudo chmod g+w /media/music

    Log out and back in for the group change to take effect.

    Organize your music library with a consistent structure. The conventional layout that Navidrome scans cleanly is:

    text
    /media/music/
    ├── Artist Name/
    │   ├── Album Name (Year)/
    │   │   ├── 01 - Track Title.flac
    │   │   ├── 02 - Track Title.flac
    │   │   └── cover.jpg
    │   └── Another Album (Year)/
    └── Another Artist/

    Album art named cover.jpg, folder.jpg, or album.jpg in each album directory is picked up automatically if it is not embedded in the audio files.

    Step 5: Create the navidrome.toml Configuration

    Navidrome reads its configuration from a TOML file. Create one at /var/lib/navidrome/navidrome.toml:

    bash
    sudo tee /var/lib/navidrome/navidrome.toml > /dev/null <<'EOF'
    MusicFolder = "/media/music"
    DataFolder = "/var/lib/navidrome"
    Address = "127.0.0.1"
    Port = 4533

    Scanning

    ScanSchedule = "@every 1h" ScanOnStartup = true

    Library

    EnableGravatar = true EnableFavourites = true EnableStarRating = true EnableSharing = true DefaultLanguage = "en"

    Transcoding

    EnableTranscodingConfig = true TranscodingCacheSize = "1GB"

    Logging

    LogLevel = "info"

    Security

    ReverseProxyUserHeader = "X-Forwarded-User" ReverseProxyWhitelist = "127.0.0.1/32" SessionTimeout = "24h" EOF

    Set ownership and restrict permissions — the file contains no secrets yet, but it will reference administrative behaviour:

    bash
    sudo chown navidrome:navidrome /var/lib/navidrome/navidrome.toml
    sudo chmod 640 /var/lib/navidrome/navidrome.toml

    Key settings explained:

    • MusicFolder -- The root directory Navidrome scans for audio files
    • DataFolder -- Where the SQLite database, cache, and logs live
    • Address = "127.0.0.1" -- Bind only to localhost; Nginx will proxy external requests in Step 10
    • Port = 4533 -- Navidrome's default port
    • ScanSchedule -- Cron expression for periodic library rescans; hourly works for most libraries
    • TranscodingCacheSize -- On-disk cache for transcoded streams; 1 GB covers a medium library
    • SessionTimeout -- How long a web session stays valid before re-login
    The full list of configuration keys is documented at navidrome.org/docs/usage/configuration-options.

    Step 6: Create the systemd Service Unit

    A systemd unit makes Navidrome start on boot and restart automatically if it crashes.

    Create the unit file:

    bash
    sudo tee /etc/systemd/system/navidrome.service > /dev/null <<'EOF'
    [Unit]
    Description=Navidrome Music Server
    After=network.target
    Wants=network-online.target

    [Service] Type=simple User=navidrome Group=navidrome ExecStart=/usr/local/bin/navidrome --configfile /var/lib/navidrome/navidrome.toml WorkingDirectory=/var/lib/navidrome TimeoutStopSec=20 Restart=on-failure RestartSec=5

    Hardening

    ProtectSystem=full ProtectHome=true NoNewPrivileges=true PrivateTmp=true DevicePolicy=closed

    [Install] WantedBy=multi-user.target EOF

    Reload systemd, enable the service at boot, and start it now:

    bash
    sudo systemctl daemon-reload
    sudo systemctl enable navidrome
    sudo systemctl start navidrome

    Verify it is running:

    bash
    sudo systemctl status navidrome

    Expected output (abbreviated):

    text
    ● navidrome.service - Navidrome Music Server
         Loaded: loaded (/etc/systemd/system/navidrome.service; enabled)
         Active: active (running) since Thu 2026-04-16 11:00:00 UTC; 10s ago
       Main PID: 2345 (navidrome)
          Tasks: 8 (limit: 4684)
         Memory: 45.2M
         CGroup: /system.slice/navidrome.service
                 └─2345 /usr/local/bin/navidrome --configfile /var/lib/navidrome/navidrome.toml

    Check the API is responding on localhost:

    bash
    curl -s http://127.0.0.1:4533/ping

    Expected output:

    json
    {"status":"ok","version":"0.54.0"}

    Step 7: Upload Your Music and Create the First Admin

    Copy music to /media/music using whatever tool fits your workflow. For a one-shot upload from your local machine, rsync over SSH is the cleanest option:

    bash
    # Run this on your LOCAL machine, not the server
    rsync -avh --progress \
      ~/Music/ \
      your-user@your-server-ip:/media/music/

    On the server, trigger a manual library scan or wait for the hourly schedule:

    bash
    sudo systemctl restart navidrome

    Navidrome scans on startup when ScanOnStartup = true is set. Watch the logs to follow progress:

    bash
    sudo journalctl -u navidrome -f

    You will see lines like:

    text
    time="2026-04-16T11:05:00Z" level=info msg="Scanning folder" folder=/media/music
    time="2026-04-16T11:05:42Z" level=info msg="Finished scanning" folders=1 added=1247 updated=0 deleted=0 elapsed=42.3s

    Create the First Admin User

    Open the web UI in a browser. Since Navidrome is bound to localhost, you need either an SSH tunnel or to wait until Nginx is configured in Step 10. For the initial setup, open an SSH tunnel from your local machine:

    bash
    ssh -L 4533:127.0.0.1:4533 your-user@your-server-ip

    With the tunnel running, open http://localhost:4533 in your browser. Navidrome's first-run screen asks for an administrator username, password, and email. Fill in the form -- the first user created is automatically given admin rights. Subsequent users added through the admin UI are regular accounts unless explicitly promoted.

    After login, you land on the album browser. Your library should already be visible if the initial scan finished. Click into an album and press play on a track to confirm streaming works.

    Step 8: Configure a Transcoding Profile

    Transcoding converts lossless files into compressed streams on the fly, which matters when you listen on a phone over mobile data. Without transcoding, a FLAC album is roughly 400 MB and chews through a data plan. With a 192 kbps Opus transcode, the same album is 70 MB.

    Navidrome uses ffmpeg for transcoding. Since you installed it in Step 1, the engine is ready -- you only need to define the profile in the admin UI.

  • Log into Navidrome as your admin user
  • Click your username in the top-right and select Settings
  • Go to the Transcoding tab
  • Click Create to add a new profile
  • Fill in the profile fields:

    • Name: opus-192
    • Target Format: opus
    • Default Bitrate: 192
    • Command: ffmpeg -i %s -ss %t -map 0:a:0 -b:a %bk -v 0 -f opus -
    Save the profile. Then, for each user (including yourself), go to Users, edit the user, and set the Default Transcoding to opus-192 with bitrate 192. Mobile clients will request transcoded streams automatically based on this setting.

    For lossless playback on home networks, also create a profile called flac-max:

    • Target Format: flac
    • Default Bitrate: 1411
    • Command: ffmpeg -i %s -ss %t -map 0:a:0 -v 0 -c:a flac -f flac -
    Most Subsonic clients let you override the transcoding on a per-connection basis -- so you can pick FLAC when on Wi-Fi and fall back to Opus 192 on cellular.

    Step 9: Connect Subsonic-Compatible Mobile Apps

    Navidrome implements the Subsonic API, so any Subsonic-compatible client connects with just a URL, username, and password. The most popular clients:

    • DSub (Android, open source, classic) -- search "DSub" on F-Droid or build from GitHub
    • Substreamer (Android and iOS, polished UI, free with in-app purchase)
    • Symfonium (Android, premium paid app, best-in-class offline sync and gapless playback)
    • play:Sub (iOS, paid, long-established)
    • Amperfy (iOS, free, open source, CarPlay support)
    • Sonixd / Feishin (desktop, Electron-based, cross-platform)
    • Supersonic (desktop, native, cross-platform)
    Connection settings for all of them look the same:

    • Server URL: https://music.yourdomain.com (after Step 10 -- use http://your-server-ip:4533 temporarily)
    • Username: the admin or regular account you created in Step 7
    • Password: the account password
    Make sure to enable Subsonic API or Subsonic legacy authentication if the app asks. Navidrome supports both the modern token-based Subsonic auth and legacy plaintext for older clients.

    Once connected, the app shows your library, artwork, playlists, and play history. Track ratings, starred tracks, and play counts sync back to the Navidrome server across all your devices -- star an album on your phone during a commute and it shows up starred on the web UI at home.

    If you already self-host other media, Navidrome fits cleanly alongside similar tools — see our guides on how to install Funkwhale, how to install Jellyfin, and how to install Plex for comparison with other media-server options.

    Step 10: Nginx Reverse Proxy with TLS

    Exposing Navidrome directly on port 4533 works but lacks HTTPS and a friendly domain. Nginx solves both.

    Install Nginx and Certbot:

    bash
    sudo apt install -y nginx certbot python3-certbot-nginx

    Create a site configuration for your domain:

    bash
    sudo tee /etc/nginx/sites-available/navidrome > /dev/null <<'EOF'
    server {
        listen 80;
        server_name music.yourdomain.com;

    # Certbot will add the TLS redirect and certificate directives client_max_body_size 100M;

    location / { proxy_pass http://127.0.0.1:4533; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;

    # WebSocket and streaming proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

    # Long-lived streams need generous timeouts proxy_read_timeout 600s; proxy_send_timeout 600s; proxy_buffering off; } } EOF

    Replace music.yourdomain.com with your actual domain. Make sure the domain already resolves to your server's IP -- check with dig +short music.yourdomain.com.

    Enable the site and reload Nginx:

    bash
    sudo ln -s /etc/nginx/sites-available/navidrome /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl reload nginx

    Obtain a Let's Encrypt certificate:

    bash
    sudo certbot --nginx -d music.yourdomain.com

    Certbot prompts for an email (for expiry warnings), asks you to agree to the terms, and offers to redirect HTTP to HTTPS -- answer yes. The tool edits your Nginx config in place, installs the certificate, and schedules automatic renewal via a systemd timer.

    Test the HTTPS endpoint:

    bash
    curl -s https://music.yourdomain.com/ping

    Expected output:

    json
    {"status":"ok","version":"0.54.0"}

    Open https://music.yourdomain.com in your browser and log in with your admin credentials. Update your mobile app server URL to the HTTPS address -- the apps now stream everything over TLS.

    Firewall

    If UFW is active, allow HTTP, HTTPS, and SSH, then block port 4533 from outside so Navidrome is only reachable through Nginx:

    bash
    sudo ufw allow ssh
    sudo ufw allow http
    sudo ufw allow https
    sudo ufw deny 4533
    sudo ufw enable

    Troubleshooting

    ProblemCauseSolution
    systemctl status navidrome shows failedConfig file permissions or syntax errorCheck sudo journalctl -u navidrome -n 50 --no-pager for the exact error. Verify the TOML file parses and navidrome:navidrome owns it.
    Library is empty after scanWrong folder permissionsConfirm /media/music is readable by the navidrome user: sudo -u navidrome ls /media/music
    Album art missingArt not embedded and no cover.jpg in album folderAdd a cover.jpg, folder.jpg, or album.jpg file to each album directory, then trigger a rescan
    Nginx returns 502 Bad GatewayNavidrome not running or bound to a different portsudo systemctl status navidrome; confirm Address = "127.0.0.1" and Port = 4533 in the TOML file
    Mobile app cannot connectFirewall blocking or wrong URLUse the HTTPS URL, not http://. Confirm TLS cert is valid with curl -vI https://music.yourdomain.com
    Transcoding produces silenceffmpeg not installed or wrong command stringwhich ffmpeg must return a path. Re-check the transcoding profile command for typos
    Scans are slow on large librariesRunning on HDD or with too many embedded imagesMove the data folder to SSD-backed storage; set ImageCacheSize = "500MB" in the TOML file
    Streaming logs in real time:

    bash
    sudo journalctl -u navidrome -f

    FAQ

    How much disk space do I need for my music library?

    Storage needs depend on format. A typical FLAC album ranges from 250 MB to 500 MB, so 50 GB holds roughly 150 to 200 FLAC albums. MP3 at 320 kbps averages 100 MB per album, giving you around 500 albums per 50 GB. Opus at 192 kbps is even denser -- about 60 MB per album. For a mixed library of 2,000 to 3,000 albums, plan on 200 to 500 GB. VPS plans with block storage let you attach additional volumes as your library grows without resizing the main disk.

    Can my family share one Navidrome server with separate accounts?

    Yes. Navidrome supports multi-user setups natively. As the admin, go to Settings > Users and add accounts for each family member. Every user has independent playlists, ratings, starred tracks, play counts, and listening history. You can optionally restrict users to a subset of the library by setting permissions, though most families share the full library. One Starter VPS comfortably serves five simultaneous streamers.

    What audio formats does Navidrome support?

    Navidrome reads and streams FLAC, MP3, AAC (in M4A containers), OGG Vorbis, Opus, WAV, WMA, AIFF, Monkey's Audio (APE), WavPack (WV), and DSD (DSF, DFF). Metadata is extracted from ID3v1, ID3v2, Vorbis comments, and MP4 tags. Cover art is read from embedded images or loose files named cover.jpg, folder.jpg, or album.jpg. If your source format is unusual, as long as ffmpeg can decode it, Navidrome can transcode and stream it.

    How do I migrate from Spotify or Apple Music?

    Navidrome does not download from streaming services -- doing so would break their terms of service. The typical migration path is to buy the albums you care about from Bandcamp, Qobuz, or 7digital in FLAC, rip any CDs you still own, and import any legally purchased digital downloads you already have. Tools like Soundiiz and TuneMyMusic export your Spotify and Apple Music playlists to CSV or M3U format. You can then use those lists as a shopping checklist for which albums to acquire. Once the files are in /media/music, Navidrome indexes them automatically.

    Does Navidrome work on a Raspberry Pi or ARM VPS?

    Yes. Navidrome is distributed as a static binary for linux_arm, linux_arm64, linux_amd64, darwin_amd64, darwin_arm64, and windows_amd64. Download the arm64 build for modern Raspberry Pi 4 and Pi 5 boards or ARM VPS instances. Performance is more than adequate for personal use -- a Pi 4 with 4 GB RAM serves a 5,000-track library without issue. On ARM VPS instances, follow this tutorial verbatim but substitute the arm64 download URL in Step 3.

    How do I automatically back up my Navidrome data?

    The critical data is the SQLite database and the music files themselves. Back up /var/lib/navidrome/navidrome.db nightly with a cron job running sqlite3 /var/lib/navidrome/navidrome.db ".backup '/var/backups/navidrome.db'" followed by an upload to S3-compatible object storage. For the music library, use restic or borgbackup against /media/music on a weekly schedule. Album files change rarely, so incremental backups stay small.

    How does Navidrome compare to Plex, Jellyfin, and Funkwhale for music?

    Plex and Jellyfin handle video, photos, and music in one product. Their music features are serviceable but not their focus -- audio transcoding settings are less granular and the mobile apps are built around video-first workflows. Use them if you want a single media server; use Navidrome if music quality and API compatibility matter more.

    Funkwhale is closer in spirit to Navidrome but doubles as a federated social music-sharing platform, which adds complexity. Navidrome is simpler, lighter, and faster for a pure personal library. Funkwhale makes sense if you want to publish music to an ActivityPub community.

    For a straightforward "my music on my server, any client, no friction" experience, Navidrome is the smallest and cleanest of the three options.

    Next Steps

    With Navidrome running over HTTPS, you have a complete personal streaming service. Here are recommended follow-ups:

    • Install a mobile client and enable offline sync -- Symfonium on Android or Amperfy on iOS let you pin albums for flight-mode listening. Configure sync-on-Wi-Fi to keep a rotating selection cached.
    • Scrobble to ListenBrainz -- In Navidrome Settings > Personal, paste a ListenBrainz token to publish your play history. Years of listening data at listenbrainz.org give you much richer "year-in-review" stats than Spotify Wrapped.
    • Add a second user for a family member -- Go to Users > Create User, share your server URL, and onboard them in five minutes.
    • Automate library additions -- If you buy from Bandcamp regularly, a small cron job that unzips new downloads into /media/music/<Artist>/<Album>/ and touches a rescan endpoint keeps the library fresh without manual work.
    • Read the official docs -- The Navidrome documentation covers advanced topics: Last.fm scrobbling, MusicBrainz metadata lookups, smart playlists, custom tags, and API integrations.

    Want a different self-hosted media stack? Explore related install guides: Funkwhale for a federated music platform, Jellyfin for all-in-one media, and Plex for the most polished media-server experience. All three run comfortably on our Starter VPS.

    Was this article helpful?

    ← Back to Install GuidesBrowse all categories →

    Still have questions?

    Contact Support →Submit a Ticket