Black Candy

Music streaming server

Media Servers ★ 4.4k stars Medium setup MIT

A self hosted music streaming server. Contribute to blackcandy-org/blackcandy development by creating an account on GitHub.

Key features

  • Personal music streaming
  • Responsive web player
  • Multi-user accounts
  • PWA support

Pros & cons

Strengths

  • Clean modern interface
  • Simple to deploy

Trade-offs

  • Music only
  • Smaller ecosystem

Black Candy replaces

Last reviewed Sep 13, 2026 · 753 words

For most people the answer is Navidrome, and Black Candy is the exception worth knowing about. It wins for one specific listener: someone who plays music in a browser or through the project's own iOS app, keeps a library in the low tens of thousands of tracks, and cares more about a clean player than about client choice. The dividing line is the Subsonic API, which Black Candy does not implement, and everything below follows from that.

No Subsonic API, and that decides it

Navidrome speaks the Subsonic protocol, which means 20-odd third-party clients on every platform, car head units included. Black Candy has its own web player, installable as a PWA on Android and desktop, plus a native iOS app. That is the whole client story. If you already love a particular Android player, or want to scrobble from a Subsonic-aware app, stop here. If you have never used one and a good browser player on the phone is fine, keep reading, because the player is the reason this project exists.

What it does well

The interface is the point. It is a Ruby on Rails app with a modern, uncluttered web player: album grid, artist pages, playlists, queue, dark mode, keyboard shortcuts, and a mobile layout that does not feel like a desktop page squeezed narrow. Multi-user accounts are built in, so a household shares one library with separate playlists. Formats the browser cannot play natively are transcoded on the fly with ffmpeg, so a FLAC collection streams to a phone on mobile data without a second copy. The iOS app is the same player wrapped natively, with background playback and lock-screen controls that a PWA on iOS still handles badly, which is the practical reason the project bothered building it. On Android the PWA install is good enough that I would not miss a native app.

It reads tags from files and nothing else: no podcasts, no internet radio, no video, no audiobooks. The catalogue's "music only" con is a statement of scope rather than a complaint, and for a lot of people it is the appeal. If you want one server for films and music, Jellyfin does both, and the Jellyfin vs Navidrome page covers that trade.

The setup that works

One container, SQLite by default, music mounted read-only:

services:
  blackcandy:
    image: blackcandy/blackcandy:latest
    ports:
      - "3000:3000"
    volumes:
      - ./blackcandy-data:/app/storage
      - /srv/music:/media_data:ro
    restart: unless-stopped

Log in with the default admin account (the README lists it; change the password on the first visit), set the media path to /media_data in Settings, and start a library scan. SQLite lives under /app/storage along with transcode caches, so that volume is your backup target. Updates are a pull and recreate; database migrations run on boot. PostgreSQL is supported if you prefer it, but for a single household it buys nothing.

The catalogue rates it Medium, 512 MB of RAM. The deploy itself is Easy; the Medium is fair because Rails is heavier than a Go binary and needs a moment to warm up, and because scan and transcode tuning is done in a settings page rather than left alone. Expect the process to idle at a few hundred MB, my estimate from a small install, against the few tens of MB Navidrome uses on the same library.

Library size is where I'd hesitate

Black Candy scans and serves a 10,000 to 20,000 track library without complaint. I would not put a 100,000-track collection on it: scans are slower than Navidrome's, the community is smaller, and the 4,409 stars against Navidrome's much larger following mean fewer people have hit the edge cases before you. For the big-library, many-clients case, the bigger project is the safer pick and I would say so without hedging. The self-hosted Spotify walkthrough covers that route end to end.

What I'd do

If my listening happens in a browser tab at a desk and on an iPhone, and the library is a curated few thousand albums: Black Candy, SQLite, behind a reverse proxy with HTTPS, one nightly copy of the storage volume. It is the nicest-looking option in media servers for that user. If Android clients, scrobbling, or a very large library are in the picture, Navidrome, and no regrets about the prettier UI you gave up.

Compare Black Candy

21 head-to-head comparisons.

Similar media servers apps