Spotify just raised prices again. Your "liked songs" playlist is buried under three new UI redesigns. And that album you saved last year? Gone — pulled by a licensing dispute you never heard about.
This isn't a bug. It's the business model. You don't own anything on streaming services. You're renting access to a catalog that shrinks, shifts, and disappears based on contracts you'll never see.
The alternative isn't buying CDs or dusting off an iPod (though you can). It's running your own music server — a Spotify replacement that lives on your hardware, streams to any device, and keeps your library intact for as long as you want.
I've been self-hosting music for three years. My server holds 12,000 tracks, syncs to my phone, streams in my car via CarPlay, and costs nothing beyond the electricity to run a single container. This guide covers the complete stack: server setup, library management, streaming clients, and the workflow for actually discovering new music without an algorithm doing it for you.
What You're Building
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Your Phone │◄────│ Plex Amp / │◄────│ Your Music │
│ (CarPlay) │ │ Navidrome │ │ Library │
├─────────────────┤ │ (Docker) │ │ (NAS/Local) │
│ Laptop │◄────├─────────────────┤ └─────────────────┘
├─────────────────┤ │ Reverse Proxy │ │
│ Work Desktop │◄────│ (SSL + Auth) │◄───────────┘
└─────────────────┘ └─────────────────┘
Three components:
- Music library stored locally (NAS, server drive, or external storage)
- Streaming server (Plex, Navidrome, or Jellyfin) to serve it
- Clients on every device for playback and offline sync
Total time to set up: about an hour. Total cost: $0 if you already have a server.
Step 1: Choose Your Streaming Server
Three options dominate self-hosted music. Each has tradeoffs:
| Feature | Plex Amp | Navidrome | Jellyfin |
|---|---|---|---|
| Cost | Free (core), Plex Pass for offline/lyrics ($120 lifetime) | Completely free | Completely free |
| Client polish | Excellent (dedicated music app) | Good (web + Subsonic apps) | Good (Finamp on mobile) |
| CarPlay/Android Auto | ✅ Native | ✅ via apps (DSub, Ultrasonic) | ⚠️ Finamp beta |
| Offline sync | ✅ Plex Pass | ✅ Most apps support | ✅ Finamp |
| Resource usage | Medium | Very low (~50MB RAM) | Medium |
| Setup complexity | Low | Very low | Low |
| Music-only focus | ✅ Yes | ✅ Yes | ❌ General media |
My recommendation: Start with Navidrome if you want dead-simple and free. Upgrade to Plex Amp if you want the most polished experience and don't mind the one-time Plex Pass cost for offline downloads and lyrics. Use Jellyfin if you already run it for movies/TV and want one app for everything.
This guide covers Navidrome (free, lightweight, straightforward) with notes on Plex Amp for those who want the premium experience.
Step 2: Prepare Your Music Library
Before you stream anything, you need music files. Here are your options:
Sources
CD ripping — The classic approach. Buy used CDs for $2-5, rip to FLAC with Exact Audio Copy (Windows) or XLD (Mac). You own the files forever. Storage cost: ~300-500MB per album in FLAC.
Bandcamp — Many artists sell DRM-free downloads directly. Often available in FLAC, MP3 320, or WAV. The artist gets a better cut than streaming.
Amazon Music purchases — Buying a physical CD or vinyl on Amazon often includes a free AutoRip digital copy in your Amazon Music library. These are DRM-free MP3s you can download.
Beatport / JunoDownload — Electronic music-focused stores with high-quality downloads.
Qobuz Store — Lossless downloads from a streaming service that also sells files outright.
What About My Streaming Playlists?
Services like TuneMyMusic or Soundiiz can export your Spotify/Apple Music playlists to CSV. This gives you a structured list of what to acquire — but not the files themselves. Consider it a migration checklist, not a direct transfer.
File Organization
Your streaming server expects a clean folder structure. The standard convention:
/music
/Artist Name
/[Year] Album Name
01 - Track Title.flac
02 - Track Title.flac
cover.jpg
Tools like MusicBrainz Picard or Beets can automatically tag, rename, and organize messy downloads into this structure. Highly recommended if your library is a pile of files with names like Track_01(1).mp3.
Format Notes
| Format | Quality | Size/Album | Best For |
|---|---|---|---|
| FLAC | Lossless | ~300-500MB | Archival, home listening |
| MP3 320 | Near-transparent | ~80-120MB | Mobile, large libraries |
| MP3 V0 | Variable, ~245kbps | ~70-100MB | Good compromise |
Rule of thumb: Keep FLAC masters on your server, let your client transcode for mobile if bandwidth matters. Navidrome and Plex both handle transcoding automatically.
Step 3: Deploy Navidrome with Docker
Navidrome is a lightweight Subsonic-compatible music server written in Go. It scans your library, serves a web UI, and exposes the Subsonic API — meaning any Subsonic client app can connect to it.
Docker Compose
# docker-compose.yml
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
restart: unless-stopped
ports:
- "4533:4533"
volumes:
- "./data:/data"
- "/mnt/music:/music:ro"
environment:
ND_SCANSCHEDULE: "1h"
ND_LOGLEVEL: "info"
ND_BASEURL: ""
Key details:
/mnt/music:/music:ro— Mount your music library read-only. Adjust the host path to wherever your files live.ND_SCANSCHEDULE: 1h— Automatically scan for new music every hour.- Port
4533— Navidrome's default web UI.
Deploy:
docker compose up -d
First run creates an admin user. Check logs for the auto-generated password:
docker logs navidrome
Log in at http://your-server:4533, change the password immediately, and let the initial scan complete. For a few thousand tracks, this takes 5-15 minutes.
Reverse Proxy (Optional but Recommended)
If you want HTTPS and external access, put Navidrome behind your reverse proxy (Nginx Proxy Manager, Traefik, Caddy, etc.).
Nginx Proxy Manager example:
- Scheme:
http - Forward hostname:
navidrome - Forward port:
4533 - Enable
Block Common Exploits - Request a new SSL certificate
For external streaming, you'll want this — it protects your login and lets you stream over HTTPS from anywhere.
Step 4: Connect Your Clients
Navidrome exposes the Subsonic API, so any Subsonic-compatible app works.
Mobile
| App | Platform | Cost | Notes |
|---|---|---|---|
| Ultrasonic | Android | Free | Lightweight, no nonsense |
| DSub | Android | Free | Feature-rich, offline sync |
| Substreamer | iOS/Android | Free | Modern UI, CarPlay support |
| play:Sub | iOS | $5 | Excellent iOS integration |
Setup is the same across apps:
- Add server URL:
https://music.yourdomain.com(orhttp://local-ip:4533for LAN-only) - Username: your Navidrome admin (or create users in Settings)
- Password: your Navidrome password
- Server type: Subsonic / Generic
Desktop
- Web UI:
https://music.yourdomain.com— full-featured, no install needed - Sublime Music (Linux): Native Subsonic client
- Sonixd (Windows/Mac/Linux): Modern desktop client
- Feishin (all platforms): Beautiful, feature-rich
CarPlay / Android Auto
Substreamer (iOS) and DSub (Android) both support in-car playback. The experience isn't quite as polished as Spotify's native app, but it's functional: browse albums, play playlists, and control playback through the car's interface.
Step 5: The Plex Amp Alternative
If you want the most polished self-hosted music experience — and don't mind a one-time cost — Plex Amp is the gold standard.
Why Plex Amp?
- Native CarPlay/Android Auto — First-class in-car experience
- Offline downloads — Download albums/playlists for plane rides or dead zones
- Lyrics display — Real-time synced lyrics
- Automatic mixes — "Time Travel Mix," "Artist Mix," "Mood Mix" generated from your library
- Sonic analysis — "Behind the Lyrics"-style track info and recommendations
- Gorgeous UI — Album art, artist bios, "Popular Tracks" from your library
The catch: offline downloads and lyrics require Plex Pass ($120 lifetime, or ~$5/month). Everything else is free.
Setup
# docker-compose.yml
services:
plex:
image: plexinc/pms-docker:latest
container_name: plex
restart: unless-stopped
ports:
- "32400:32400"
environment:
PLEX_CLAIM: "claim-TOKEN_HERE" # Get from https://plex.tv/claim
TZ: "America/New_York"
volumes:
- "./config:/config"
- "/mnt/music:/music:ro"
Claim your server at plex.tv/claim, paste the token, and deploy. Add a Music library pointed at /music, let it scan, then install Plex Amp on your phone.
Plex Pass Decision Tree
- Free tier: Stream your entire library, browse by artist/album/genre, basic playlists
- Plex Pass adds: Offline downloads, lyrics, loudness leveling, hardware transcoding, skip intros
If you listen to music mostly at home on Wi-Fi, free is fine. If you commute, travel, or want the full premium experience, the lifetime pass pays for itself in under two years compared to Spotify.
Step 6: Discovery Without Spotify's Algorithm
The hardest part of leaving streaming isn't hosting — it's finding new music. Spotify's recommendation engine is genuinely good. Here's how to replicate it:
Curated Sources
- RateYourMusic charts — Community-ranked best albums by year, genre, decade
- Album of the Year — Aggregated reviews from critics across publications
- r/letstalkmusic — Deep-dive discussions, weekly recommendation threads
- Spotify's "Discover Weekly" — Use it as a discovery tool, then buy what you like
- Bandcamp Daily — Editor-curated features, genre deep-dives, and emerging artists
Build Your Own Algorithm
Create a system:
- Discovery day (weekly): Spend 30 minutes on RateYourMusic, Bandcamp, or Spotify's free tier. Save interesting albums to a note.
- Acquisition: Buy 1-2 albums per week. Build your library intentionally.
- Listen: Actually listen to full albums. Not playlists. Not shuffled background noise.
- Log: Use Last.fm (still free!) to track scrobbles and find patterns in what you actually enjoy.
After six months, you'll have a library that reflects your taste — not an algorithm's guess.
Smart Playlists
Both Navidrome and Plex support smart playlists:
- "Recently Added" — Auto-populated with new acquisitions
- "Never Played" — Rotate through your backlog
- "Top Rated" — Surface your 5-star tracks
- "By Decade/Genre" — Organized browsing
These replace Spotify's "Daily Mix" with something more personal.
Step 7: Backup Your Library
You went through the effort of building this. Don't lose it.
3-2-1 for music:
- 3 copies: Your active library + local backup + cloud backup
- 2 media: Server/NAS + external drive or cloud
- 1 offsite: Backblaze B2, Wasabi, or even a hard drive at a friend's house
Tools:
rsyncfor local sync:rsync -av /mnt/music /mnt/backup/music- rclone for cloud:
rclone sync /mnt/music remote:bucket - BorgBackup for versioned, deduplicated backups
Your music library is likely 100GB-1TB+. Cloud storage costs ~$6/TB/month. Budget for it.
FAQ
Is this legal? Yes, if you own the files. Rip your own CDs, buy from Bandcamp/Amazon, or download from artist-direct stores. The server itself is just software — what you put on it determines legality.
How much storage do I need? Rule of thumb: ~300-500MB per album in FLAC, ~100MB in MP3 320. A 1,000-album library is roughly 300-500GB in FLAC.
Can I share with family? Yes — Navidrome supports multiple users with their own playlists and play history. Plex does too, and Plex Pass extends sharing to outside your home network.
What about podcasts/audiobooks? Navidrome is music-focused. For podcasts, use FreshRSS + a podcast client. For audiobooks, Audiobookshelf is purpose-built and excellent.
Will this work without internet? LAN streaming works without internet. For external access, you need your reverse proxy or VPN (WireGuard, Tailscale) to be accessible.
The Bottom Line
Self-hosted music isn't about nostalgia or being anti-streaming. It's about ownership, quality, and intentionality. You decide what goes in your library. You decide how it's organized. You decide when something stays or goes.
Spotify optimized for convenience. Self-hosting optimizes for control. Both are valid — but after three years of owning my music, I can't imagine going back to renting it.
Start small. Pick one server (Navidrome), add one album, connect one client. Build from there. Your future self — the one listening to an album ten years from now that Spotify delisted in 2028 — will thank you.
Questions? Find me in the Discord or drop a comment below. And if you found this useful, share it with someone who's complained about Spotify's UI lately.