Skip to content
Go back

Navidrome vs Funkwhale: Self-Hosted Music

By SumGuy 10 min read
Navidrome vs Funkwhale: Self-Hosted Music

Spotify Owns Your Library. Until You Self-Host.

There’s a moment every music nerd hits: you realize Spotify’s playlist gets deleted if you stop paying, your data lives on someone else’s server, and that deep cut you’ve loved for a decade might disappear if the rights holder has a bad day.

So you think, “I’ll just self-host my music.” Then you find two projects that actually work, and they’re solving completely different problems. That’s Navidrome and Funkwhale in a nutshell.

One is a lightweight, fast, Subsonic-API-compatible streaming server that respects you and your hardware. The other is a federated social music platform that lets you share, discover, and podcast with your friends. They’re not really competitors — they’re two different answers to “why do I want my music on my own server?”

Let me save you the research rabbit hole.


Navidrome is what happens when you ask a Go developer to build a music server and they say, “sure, let me also make it so small you can run it on a Raspberry Pi.” It’s a single binary. No Python, no Django, no six services playing tag. You download a 40 MB file, point it at your music library, and boom — you’ve got Subsonic.

“What’s Subsonic?” you ask. It’s a protocol — a ten-year-old open API spec that basically every music streaming app that isn’t Spotify has agreed to understand. DSub, Symfonium, play:Sub, Substreamer on Android. Maroofy on iOS. Subsonic itself (the original, still around). Most of them talk the same language. You pick a Navidrome server, you pick a client you like, and you’re done.

Navidrome reads your library from files — MP3, FLAC, OGG, whatever. It respects ID3 tags, folder structure, cover art. No forced upload, no reprocessing. It scans your disk and indexes what’s there. If you’ve got 50,000 songs in a folder tree, Navidrome will find them, tag them, and make them searchable. The search is fast because it’s Go, not Python sitting there thinking about it.

You can transcode on the fly. Navidrome will convert FLAC to MP3 to save bandwidth if your client asks. Or don’t — if you’re on the same network, stream lossless all day. Scrobble to Last.fm. Create playlists. Shuffle. Star tracks. The mobile experience is solid because the Subsonic client ecosystem spent a decade nailing it.

The footprint? Tiny. RAM usage is measured in tens of MB. CPU idles. A single ARM chip from 2015 runs it without breaking a sweat. You could throw it on a Synology NAS, a Docker container, a VPS, or literally anywhere you can point it at a music folder.


Funkwhale: The Federation Experiment

Funkwhale is the idealist’s answer. It’s built on ActivityPub — the same protocol that powers Mastodon. Your Funkwhale server can talk to other Funkwhale servers without a central gatekeeper. You can follow people across instances, share playlists, discover music, and if you’re into it, host podcasts alongside your music.

It’s Python and Django (so it’s heavier — you’re looking at 512 MB RAM, maybe a gig if you’re ambitious). But it’s feature-rich. Funkwhale has a built-in music discovery mechanism. You can follow other users. There’s a radio station mode where the server generates playlists based on what’s trending on your instance or the wider federation. You can upload tracks for other people to listen to, or tag releases as a “draft” and iterate.

Podcasts live here too. You can import podcast RSS feeds and serve them alongside your music library. Same player, same library interface, same sync.

The federation part is the hook. If your friend runs a Funkwhale server, you can share playlists across the network. You’re not locked into your instance — you’re part of an ecosystem. (In practice, federation for music is still niche and early. Not many people are running their own Funkwhale boxes. But it’s there if you want it.)

Scrobbling to Last.fm? Yes. Last.fmsubmit support. Playlist sharing? Built-in. User permissions? You can create shared accounts, listener-only accounts, uploaders. It’s a social music server.


The Trade-Offs: Speed vs Features

Navidrome wins on:

Funkwhale wins on:


Library Handling & Mobile Clients

Here’s where Navidrome shines: mobile client choice.

The Subsonic protocol is the lingua franca. You can:

Funkwhale has a web player (really good one, actually) and some mobile app support, but it’s more “Funkwhale” flavored. You’re not jumping between clients mid-session. That’s not a knock — the Funkwhale web player is solid. It’s just different philosophy.

For tags and metadata: both read ID3 tags from files. Both handle cover art. Navidrome’s approach is “scan and index,” so it’s faster on large libraries. Funkwhale lets you edit metadata in the web UI, which is nice if you want to fix stuff without editing files.


Deploy: Docker Compose Reality Check

Navidrome (you’re looking at ~3 minutes setup):

version: "3.8"
services:
navidrome:
image: deluan/navidrome
ports:
- "4533:4533"
environment:
ND_SCANINTERVAL: 1h
ND_LOGLEVEL: info
volumes:
- /path/to/music:/music
- navidrome_data:/data
restart: unless-stopped
volumes:
navidrome_data:

That’s it. Start it. Point your browser to localhost:4533. Login as admin/admin, change the password, add your music folder, and wait for the scan. First client? Fire up DSub, add a server entry with your IP, and start playing.

Funkwhale (you’re looking at ~15 minutes, more if you care about federation):

version: "3.8"
services:
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: funkwhale
POSTGRES_PASSWORD: funkwhale
volumes:
- funkwhale_db:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:7-alpine
restart: unless-stopped
funkwhale:
image: funkwhale/funkwhale:latest
ports:
- "5000:5000"
environment:
FUNKWHALE_DJANGO_ALLOWED_HOSTS: localhost
FUNKWHALE_DJANGO_SECRET_KEY: your-secret-key-here
DATABASE_URL: postgresql://postgres:funkwhale@postgres/funkwhale
CACHE_URL: redis://redis
FUNKWHALE_DJANGO_DEFAULT_FROM_EMAIL: noreply@localhost
volumes:
- /path/to/music:/music
- funkwhale_data:/data
depends_on:
- postgres
- redis
restart: unless-stopped
volumes:
funkwhale_db:
funkwhale_data:

More moving parts. Postgres, Redis, the app itself. More to patch, more to back up. But you get the features.


Transcoding, Scrobbling, and Ecosystem

Both do transcoding. Both talk to Last.fm. Both cache playlists. Both handle offline storage (on the client side — both Subsonic clients support it).

Listenbrainz (the open-source Last.fm alternative)? Funkwhale has built-in support. Navidrome can scrobble there too, but it depends on your client — some Subsonic clients support it, some don’t.

DLNA / UPnP? Neither does it natively, but you could run a Subsonic-to-UPnP bridge if you’re desperate.

Airsonic and Airsonic-Advanced (Subsonic forks)? They exist. Airsonic is slower than Navidrome, heavier, but more feature-complete than vanilla Subsonic. If you’re comparing, Navidrome is the lean option, Airsonic is the Swiss Army knife, and vanilla Subsonic is… outdated. Most people skip vanilla Subsonic entirely now.


When You Pick Navidrome

You want to:

You’re a solo listener with a big library and strong opinions about your music app.


When You Pick Funkwhale

You want to:

You’re thinking about music as social, not just personal. You want features Navidrome will never have because it refuses to leave the file-server lane.


The Honest Take

Navidrome is what happens when someone asks, “What’s the minimum viable product for playing my own music?” and actually ships it. It’s not sexy. It doesn’t have network effects. Nobody’s going to build a community on Navidrome because that’s not what it’s for. But it’s rock solid. It’s the Toyota Corolla of music servers — boring, reliable, fuel-efficient, and you’ll never worry about it.

Funkwhale is the idealist’s platform. It’s got federation, it’s got features, it’s got vision. But it comes with the operational weight of Django and Postgres. You’re running a platform now, not a file server.

If you’re reading this on your home lab subreddit at 2 AM, trying to figure out what to install on that spare NAS, the answer is probably Navidrome. Fire up DSub, throw in your USB drive of FLAC files, and go to bed. Your morning shower is going to sound great, and you didn’t need to think about database migrations.

If you’re the type to say, “I want my friends to discover music on my instance,” or “I want podcasts and music in one place, federated forever,” then Funkwhale’s your jam. Just budget the RAM and patience.


Picking the Player

The real win here is that you’re not locked into anything. Your music stays on your server, in your folder structure, with your tags. If Navidrome disappeared tomorrow, you’d just point Airsonic or Subsonic at the same folder and keep going. The protocol outlives the implementation.

That’s the whole point of self-hosting. You’re not renting. You’re owning. You’re not waiting for some company to decide your music isn’t profitable. You’re the gatekeeper of your library.

So spin up one, try it for a week, and if it doesn’t fit, spin up the other. Your music folder won’t judge you.


Share this post on:

Send a Webmention

Written about this post on your own site? Send a webmention and it'll show up above once verified.


Next Post
Argo Workflows vs Tekton

Discussion

Powered by Garrul . Sign in with GitHub or Google, or post anonymously.

Related Posts