Black Candy
For music streaming, Black Candy is a self-hosted solution that provides personal music streaming server.
Self-hosted music streaming, honestly reviewed. No hype, just what you get when you run your own server.
TL;DR
- What it is: Open-source (MIT) self-hosted music streaming server — think Spotify, but for the music files you actually own, running on your own hardware [README].
- Who it’s for: People with a personal music collection who are tired of paying Spotify $12/mo for access to music they already own on disk, or who want privacy and offline ownership over their listening history.
- Cost savings: Spotify Individual runs $11.99/mo ($143.88/yr). Spotify Premium Family (6 users) runs $19.99/mo. Black Candy self-hosted runs on a $5–10/mo VPS — or free if you already have a home server — with no per-user charges.
- Key strength: Dead-simple Docker installation, native iOS and Android apps, clean web UI, and a live public demo you can poke before committing to deployment [README][demo].
- Key weakness: This only streams your own music files. It doesn’t pull from any catalog. If your library has gaps, you’re responsible for filling them. No podcast support, no social features, no AI recommendations.
What is Black Candy
Black Candy is a self-hosted music streaming server. You point it at a folder of MP3s, FLACs, and other audio files on your server; it indexes them; and then you stream your library from anywhere via a web browser or the native iOS/Android apps [README].
The project describes itself plainly: “a self hosted music streaming server, your personal music center.” That’s accurate. It doesn’t try to replace Spotify’s catalog of 100 million tracks — it replaces Spotify’s interface for the music you already have [README].
Built in Ruby on Rails with Hotwire for the frontend, it sits at 4,167 GitHub stars with 212 forks as of this review. It uses SQLite by default (good for single-user simplicity) and optionally PostgreSQL for larger or multi-user setups [README]. The README is clean and installation is documented thoroughly.
A live demo runs at https://demo.blackcandy.org with a public login (email: admin@admin.com, password: foobar). The demo library is drawn from Free Music Archive tracks, so you can evaluate the UI and playback without setting anything up locally — that’s a thoughtful touch most self-hosted tools skip [README][demo].
The project is listed alongside Gonic, mStream, Ampache, and Navidrome in open-source music server roundups, recognized as a Rails-based option with a focus on clean UX over protocol compatibility [1].
Why People Choose It
The honest answer: Black Candy appeals to a specific type of person — one who spent years building a local music library before streaming took over, or who consciously buys and downloads music rather than renting it from a platform.
The core problem it solves isn’t just cost. It’s the combination of cost, privacy, and permanence. With Spotify or Apple Music, your listening history lives on their servers, the catalog can drop albums without notice, and the moment you stop paying the music stops. With Black Candy, the library is yours, the data is yours, and the service keeps running as long as your server does [README].
Third-party coverage of Black Candy specifically is thin — it appears in music-server roundup lists [1] without deep independent reviews. That’s partly because it occupies a smaller niche than automation tools or note-taking apps — the audience of people with large local music libraries is genuinely smaller than it once was. But within that niche, it’s a serious implementation rather than a side project: 989 commits, active CI pipeline with coverage tracking, maintained Docker images on both GitHub Container Registry and Docker Hub [README].
The comparison that matters here isn’t Black Candy vs. n8n or Black Candy vs. some competitor — it’s Black Candy vs. paying Spotify forever for music you could own. The people who get the most out of it already know what they’re looking for.
Features
Based on the README and first-hand configuration documentation:
Core streaming:
- Web-based music player accessible from any browser [README]
- Indexes your existing music files from a mounted media directory [README]
- Supports standard audio formats (MP3, FLAC, and others common in personal libraries)
- Multi-user support with admin and standard user roles [README][demo]
Mobile apps:
- Native iOS app on the App Store [README]
- Native Android app on F-Droid (open source app store) and direct APK download from GitHub Releases [README]
- No web-only limitations — the mobile apps are real native apps, not just browser wrappers
Database and storage:
- SQLite by default — zero configuration, works immediately [README]
- Optional PostgreSQL for larger libraries or multi-instance setups [README]
- All persistent data stored in
/app/storage, which you mount to the host — straightforward backup [README]
Deployment flexibility:
- Docker (single container) [README]
- Docker Compose [README]
- Environment variable configuration for media path, database URL, UID/GID for permission handling [README]
- Logs to STDOUT — integrates cleanly with Docker logging drivers [README]
What’s not here:
- No podcast support mentioned in the README
- No Subsonic API compatibility (unlike Gonic or Navidrome, which expose the Subsonic protocol to unlock a wide ecosystem of third-party clients)
- No transcoding pipeline mentioned — it serves your files as-is
- No Last.fm scrobbling documented
- No web-based file upload or library management beyond mounting files from host
That last point matters: Black Candy assumes you manage your music files separately (iTunes, Beets, MusicBrainz Picard, whatever you use). It’s a streamer, not a music management system.
Pricing: SaaS vs Self-Hosted Math
Streaming services for comparison:
- Spotify Individual: $11.99/mo ($143.88/yr)
- Spotify Duo: $16.99/mo
- Spotify Family (6 users): $19.99/mo ($239.88/yr)
- Apple Music Individual: $10.99/mo ($131.88/yr)
- Apple Music Family (6 users): $16.99/mo ($203.88/yr)
- YouTube Music Family: $16.99/mo
Black Candy self-hosted:
- Software license: $0 (MIT) [README]
- VPS to run it on: $5–10/mo (Hetzner, Contabo, or DigitalOcean)
- A spare home server or NAS: $0 ongoing cost
Concrete math for a single person:
Spotify Individual for 5 years = $719.40. Black Candy on a $6 Hetzner VPS for 5 years = $360. Black Candy on a home server you already own = $0 (software cost). Over a decade, you’re looking at a $1,200+ difference versus Spotify alone — not counting family plans.
The catch: this math only holds if you have music to stream. Black Candy streams your files; it doesn’t provide a catalog. If you’re starting from zero, you’d need to buy or download the music separately. But if you already have a library of purchased music or ripped CDs sitting in a folder somewhere, the economics are obvious.
For a family scenario: Spotify Family at $20/mo is $240/yr with six licensed users. Black Candy has no per-user pricing — add as many family accounts as you want for the same $6/mo server cost [README].
Deployment Reality Check
Black Candy’s installation story is genuinely simple compared to most self-hosted tools. The README’s “Installation” section is four lines of shell commands [README]:
docker run -p 80:80 ghcr.io/blackcandy-org/blackcandy:latest
That’s it for a basic test run. For a production setup with persistent storage and your actual media files:
docker run -v /media_data:/media_data \
-e MEDIA_PATH=/media_data \
-v ./storage_data:/app/storage \
-p 80:80 ghcr.io/blackcandy-org/blackcandy:latest
What you actually need:
- A Linux VPS or home server (2GB RAM is comfortable, 1GB likely works for a single-user library)
- Docker installed
- Your music files accessible to the container via a volume mount
- A domain + reverse proxy (Caddy or nginx) if you want HTTPS
- Optional: PostgreSQL if you outgrow SQLite
What can go sideways:
- Volume permission issues are a documented reality. The README explicitly covers it — use
--userto pass UID/GID matching your host user [README]. This is a one-time config step, not a recurring headache, but it will confuse first-time Docker users. - The upgrade process requires manual steps: pull new image, stop old container, remove it, create new one [README]. This is normal Docker hygiene but means you can’t auto-update without setting up Watchtower or a similar tool.
- Breaking changes between versions are flagged as possible — the README explicitly warns to read the upgrade guide before every version bump [README]. For a music server, this is low-stakes, but it’s worth noting.
- No built-in HTTPS. You’ll need a reverse proxy in front of it if you want a proper TLS certificate, which is standard practice but adds one step for non-technical users.
Realistic time to a working instance:
- Technical user: 15–30 minutes from zero to streaming
- Non-technical user following a guide: 1–3 hours including domain setup and reverse proxy configuration
- Home server user with Docker already installed: under 10 minutes
The demo at https://demo.blackcandy.org gives you a real feel for the UI before you commit to deploying anything [README][demo].
Pros and Cons
Pros
- Genuinely simple install. One
docker runcommand for a test instance. The README earns its reputation for clarity [README]. - Native mobile apps. iOS on App Store, Android on F-Droid — not afterthoughts, but real apps with proper store distribution [README].
- Live public demo. You can evaluate the UI and playback without deploying anything first — unusually considerate for a self-hosted project [README][demo].
- MIT license. Run it anywhere, fork it, embed it. No commercial agreement, no “fair-code” restrictions [README].
- SQLite default. No PostgreSQL setup required to get started. Correct call for a personal music server [README].
- Zero per-user pricing. Add family members without paying more. Spotify Family charges $20/mo for six users; Black Candy charges $0 extra [README].
- Privacy by design. Your listening history, play counts, and library structure never leave your server.
Cons
- Streams only your files. This is the fundamental limitation. If your library has gaps — albums you haven’t bought, artists you want to discover — Black Candy doesn’t help. It’s not a Spotify replacement for catalog access, only for streaming what you own.
- No Subsonic API. Navidrome and Gonic expose the Subsonic/OpenSubsonic protocol, unlocking dozens of compatible third-party clients (Symfonium, DSub, Ultrasonic, Strawberry, etc.). Black Candy uses its own client apps only. If you have a preferred third-party music client, check compatibility first [1].
- No transcoding documented. Gonic handles on-the-fly transcoding with ffmpeg for mobile bandwidth constraints. Black Candy’s README doesn’t mention transcoding — it likely serves files as-is, which can mean large FLAC files streaming over mobile data [README].
- No scrobbling. Last.fm and ListenBrainz integration isn’t mentioned in the README. If you track your listening history through those services, Black Candy doesn’t help [README].
- No podcast support. Some self-hosted music servers double as podcast managers. Black Candy doesn’t [README].
- Thin independent review coverage. Black Candy appears in roundup lists [1] but lacks the deep third-party reviews that n8n, Navidrome, or Jellyfin have accumulated. You’re largely relying on the GitHub README and the demo to evaluate it.
- Manual upgrade process. No auto-update, documented breaking changes between versions [README]. Low-risk but requires attention.
Who Should Use This / Who Shouldn’t
Use Black Candy if:
- You have a local music library (hundreds or thousands of albums) sitting on a hard drive and you want to stream it from anywhere.
- You’re paying Spotify or Apple Music primarily to listen to music you already own, and you want to cut that bill.
- You want iOS and Android apps that actually work, not just a browser tab.
- You’re comfortable with basic Docker commands or willing to follow a guide once.
- You want a clean, modern web UI over a configuration-heavy setup.
Skip it (use Navidrome) if:
- You need Subsonic API compatibility to use your existing third-party client (Symfonium, Ultrasonic, Strawberry, etc.).
- You need Last.fm or ListenBrainz scrobbling.
- You need transcoding for mobile bandwidth management.
- You want broader community support and more third-party client options.
Skip it (use Jellyfin) if:
- You want a unified server for music, movies, and TV shows.
- You want a larger plugin ecosystem and community.
- You need transcoding as a first-class feature.
Skip it entirely if:
- You don’t have a local music library and you want access to a streaming catalog. Black Candy can’t help with this.
- You’re looking for a music discovery platform or social listening features.
- You’re terrified of the command line and have no technical help available.
Alternatives Worth Considering
- Navidrome — the most popular self-hosted music server right now. Subsonic API compatible, Last.fm/ListenBrainz scrobbling, transcoding, works with dozens of third-party clients. More features than Black Candy, slightly more configuration. Strong choice if client flexibility matters.
- Gonic — lightweight Subsonic server written in Go. Good for Raspberry Pi / low-power hardware. Podcast support, transcoding, jukebox mode [1]. More technical setup than Black Candy.
- Funkwhale — federation-focused, built for sharing music with others, not just personal streaming. Higher complexity, different use case.
- Jellyfin — full media server. If you want music + video in one place, this is the answer. Heavier resource usage, richer ecosystem.
- mStream — another personal streaming option with Milkdrop visualizer. Narrower active development [1].
- Plex — freemium, partially closed source. The Plexamp mobile app for music is genuinely excellent, but you’re back in vendor lock-in territory and the free tier has limitations.
- Ampache — mature, PHP-based, Subsonic compatible. Shows its age in the UI but has a large feature set.
For someone who just wants to stream their existing music collection with mobile apps and a clean interface, the realistic shortlist is Black Candy vs. Navidrome. Pick Black Candy if you want the simpler setup and don’t need Subsonic client compatibility. Pick Navidrome if you want scrobbling, transcoding, and a wider client ecosystem.
Bottom Line
Black Candy solves one problem cleanly: it takes the music files you already own and makes them streamable from anywhere, with iOS and Android apps, at the cost of a cheap VPS or whatever server you already have running. If that matches your situation — a library of purchased or ripped music, a Spotify bill you pay mostly to access music you own anyway — the value is immediate. The setup is as simple as any self-hosted tool gets, the demo lets you evaluate before committing, and the MIT license means no strings attached. The gaps are real: no Subsonic compatibility, no transcoding, no scrobbling, no catalog access. But for its stated purpose — a personal music center for your own files — it does what it says.
Sources
- medevel.com — “35 Open-source Free Music and Audio Streaming Servers (Self-hosted)”. https://medevel.com/music-and-audio-streaming/
Primary sources:
- GitHub repository and README — https://github.com/blackcandy-org/blackcandy (4,167 stars, MIT license)
- Live demo — https://demo.blackcandy.org
Features
Mobile & Desktop
- Mobile App
Replaces
Related Media & Streaming Tools
View all 334 →Immich
95KHigh-performance self-hosted photo and video management — automatic backup, ML-powered search, and a Google Photos-like experience on your own server.
Jellyfin
49KThe volunteer-built media solution that puts you in control of your media. Stream movies, shows, music, and photos to any device from your own server.
PhotoPrism
39KAI-Powered Photos App for the Decentralized Web. Tag and find pictures automatically without getting in your way.
Cobalt
39KSave what you love without ads, tracking, paywalls or other nonsense. Just paste the link and you're ready to rock.
qBittorrent
36KAn open-source software alternative to uTorrent. Feature-rich and runs on all major platforms.
SRS
29KSimple, high efficiency, realtime video server. Supports RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH and GB28181.