
Should I self-host Spotify?
NOT REALLYkeep paying
Navidrome is a lovely server for music you own — and Spotify's product is music you don't. Self-hosting replaces the player, not the catalog, and the catalog is the subscription.
The math (nothing hidden, including your time)
| Spotify (Premium Individual) | $11.99/mo |
| VPS share + storage | −$1.50/mo |
| Your maintenance: 15 min/mo at $20/h | −$5.00/mo |
| Net saving | $5.49/mo |
| Setup: 30 min measured (one-time) | $10.00 |
| Break-even | 1.8 months |
| Markup Index (price ÷ real self-host cost) | 1.8× |
Price: source, checked 2026-08-10. Inputs are stored in git; every number above is derived, never hand-written.
What you lose
- The catalog: everything you haven't bought — which for most subscribers is everything
- Discovery — Discover Weekly has no self-hosted answer, because the input is everyone else's listening
- Zero-effort availability on every speaker, car and TV that ships a Spotify button
What you're paying Spotify for
- stream a ~100M-track catalog
- discovery: recommendations, radio, Discover Weekly
- playlists synced across every device
- offline listening on mobile

Ranked alternatives
A music server for the files you already own, and the phone apps that make them worth owning.
Hardware
Runs comfortably on Raspberry Pi.
The tested compose file (our evidence, CI-booted)
# Navidrome — music streaming server for music YOU OWN (tested against Spotify's job list;
# see the verdict for why owning zero files changes the answer)
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
restart: unless-stopped
ports:
- "4533:4533"
volumes:
- navidrome-data:/data
- ./music:/music:ro # point at your library
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:4533/ping || exit 1"]
interval: 5s
timeout: 5s
retries: 24
start_period: 20s
volumes:
navidrome-data:
Want a guided install instead? caniselfhostit.com/spotify has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.
Verification
Protocol v1 · verified by zernonia on 2026-08-10 · setup measured at 30 min · AI assistant: claude-code (allowed & stated)
What broke
- Nothing — Navidrome is a single container that boots in seconds. The economics even pass our rubric. The capability gap is the entire verdict: it can only play files you bring.
Full timed log
# Timed setup log: Spotify → Navidrome **Protocol:** v1 · **Verified by:** zernonia · **Date:** 2026-08-10 **Assistant:** claude-code · **Environment:** containerized runner, 2 vCPU class, Docker 29.3 / Compose v5.1 ## Timeline | Step | Time | |---|---| | Draft compose (one container + a music folder mount) | 6 min | | **Boot: healthy in 16 s (measured, `compose up --wait`)** | 1 min | | Core workflow: create admin, point at a test library, scan, stream a track in the browser | 15 min | | Re-run from clean volumes | 5 min | | **Total: ~30 min** | | ## Measurements - Boot to healthy: **16 s** · 1 container · idle RAM ~80 MB — Raspberry Pi territory ## What broke Nothing. Navidrome is a model citizen: one container, one config mount, a `/ping` endpoint, ARM builds, instant scan on a small library. ## Verdict-relevant notes - This is the clearest case on the site of **setup ≠ verdict**. The install passes every effort test; the economics even pass the rubric. What it cannot do is contain music you don't own — and "a ~100M-track catalog you don't own" is the first job on Spotify's list. - If you already have a real library (rips, Bandcamp), read this page as a personal YES: Navidrome + any Subsonic client is genuinely better than Spotify for owned music.
Verdict history
- 2026-08-10: unscored → NOT_REALLY — Initial verdict: replaces the player, not the catalog — and the catalog is the subscription.