Open source music servers, installed and played

Tested between and . Each row shows its own test date; a project can change after that day.

34 of 41 tested projects run. 43 more waiting for a test.

In short: 23 of the 41 tested projects started as-is on a fresh machine: cliamp, blackcandy, wizarr, bili-sync, songloft, Youtarr, watchstate, and spotatui, and 15 more. 11 more started once a stand-in replaced a service they expect, such as a database: rmpc, Maintainerr, ISpotify, tonzhon-music, embyToLocalPlayer, SubTUI, infinitunes, and librespot-python, and 3 more. 7 could not be verified: lx-music-desktop, listen1_desktop, musicxx, Castafiore, Docker-Traefik, museeks, and freyr-js; the log shows where each one stopped.

Measured by Argusic on a fresh machine every time. Every number links to its evidence.

#projectverdictArgusic Scorelanguagestarstested on
1cliampRuns100 / 100Go4,444

cliamp - Terminal music player inspired by winamp

What the test found: cliamp builds with CGO from source, all 3407 tests pass, binary runs and prints help text, bundled MP3 decodes cleanly via ffmpeg. 8 minutes.

2blackcandyRuns100 / 100Ruby4,425

A self hosted music streaming server

What the test found: Black Candy Rails 8.1.3 app runs on Ruby 4.0.2 with SQLite, all 416 tests pass, server responds on port 3002. 16 minutes.

3wizarrRuns100 / 100Python3,215

Wizarr is an advanced user invitation and management system for Jellyfin, Plex, Emby etc.

What the test found: All 610 unit/integration tests pass, the Flask app starts and serves HTTP on port 5000 with Swagger API docs at /api/docs/, and database migrations apply cleanly from scratch. 11 minutes.

4bili-syncRuns100 / 100Rust2,622

由 Rust & Tokio 驱动的哔哩哔哩同步工具

What the test found: bili-sync compiles, all 33 unit tests pass, the binary launches and serves the web UI on port 12345, the frontend builds cleanly. 7 minutes.

5songloftRuns100 / 100Go1,876

🎵 插件化、无广告的免费音乐服务器

What the test found: The Go backend builds (make build-lite produces a working binary), starts with all 37 database migrations applied, serves GET /api/v1/health with 200, authenticates POST /api/v1/auth/login with admin/admin, and all 14 internal package unit tests pass. The root package test fails due to missing Flutter web assets... 16 minutes.

6YoutarrRuns100 / 100JavaScript1,730

Self-hosted web app that automates downloading, organizing, and scheduling YouTube channel content with support for Plex, Kodi, Emby and Jellyfin

7watchstateRuns100 / 100PHP1,575

Self-hosted service to sync your plex, jellyfin and emby play state. without relying on 3rd-party external services.

What the test found: WatchState (FrankenPHP 1.13.0 / PHP 8.5.11) installed with composer dependencies; HTTP server launches and healthcheck endpoint returns 200 OK; 905 of 907 tests pass. 21 minutes.

8spotatuiRuns100 / 100Rust1,416

A fast, standalone terminal music player in Rust: native Spotify streaming plus local, Subsonic, radio, Qobuz and Youtube sources

What the test found: spotatui 0.41.0 builds, passes 1282 tests, and runs (--help, --version) in a container with no root access, after installing Rust via rustup and extracting libasound2-dev from its .deb. 18 minutes.

9jellyfin-audio-playerRuns100 / 100TypeScript1,414

🎵 A gorgeous Jellyfin audio streaming app for iOS and Android

What the test found: pnpm install succeeds, Jest test suite passes (1/1), TypeScript type-checks clean, ESLint passes (0 errors, 110 pre-existing warnings), and the React Native Metro dev server starts successfully with Node 22. 9 minutes.

10multi-scrobblerRuns100 / 100TypeScript1,257

Scrobble plays from multiple sources to multiple clients

What the test found: multi-scrobbler v0.17.2 (HEAD-8d7b911) installs with npm ci, compiles TypeScript cleanly, passes 583/608 backend tests, and launches a web server on port 9078 responding with HTTP 200 on / and /api/health with sqlite-backed database, scheduler, and vite-express frontend serving in development mode. 9 minutes.

11KoitoRuns100 / 100Go1,097

Koito is a modern, themeable scrobbler that you can use with any program that scrobbles to a custom ListenBrainz URL

What the test found: The Go backend API server builds and runs: all 26 tests pass, the binary starts with SQLite, creates a default user, listens on a configured port, returns HTTP 200 on the /health endpoint, and shuts down cleanly. 56 minutes.

12qm-musicRuns100 / 100Java580

🎧☁️ Your Private Music Service

What the test found: qm-music builds with Maven, passes 201 tests, and runs on port 6688 serving a web UI and Subsonic-compatible REST API (ping returns status=ok). 9 minutes.

13mousikiRuns100 / 100C++248

Highly customizable TUI music player designed to be fast and lightweight

What the test found: Mousiki builds and runs: the binary launches its full keyboard-driven TUI in the terminal, displaying the spinning disk, progress bar, local/queue panels, and volume indicator; Python auxiliary tools (yt-dlp, lyrics fetcher, YouTube search) all connect to their respective live APIs and return valid data. 4 minutes.

14koelRuns98.8 / 100PHP17,273

Music streaming solution that works.

What the test found: Koel is fully installed with SQLite database, all 1612 backend tests pass, the Laravel web server starts and serves the homepage at 200, and the login API returns an authentication token for [email protected]. 27 minutes.

15music-playerRuns98.8 / 100Rust525

An extensible music server written in Rust , single binary, zero dependency 🚀🎵✨

What the test found: music-player builds and its test suite passes (158 of 158, 2 pre-existing ignores for external servers). Binary prints version and help. The core daemon, gRPC server, client, playback, scanner, tracklist, storage, migration, settings, entity, types, graphql, addons, and discovery crates all compile and test cleanly... 46 minutes.

16pear-desktopRuns97.3 / 100TypeScript33,684

Pear 🍐 is extension for music player

What the test found: Dependencies installed, project builds successfully with electron-vite, Playwright test suite passes all 6 tests: the Electron app launches, renders a window, and navigates to YouTube Music; LRC parser unit tests (empty string, chorus, attributes, karaoke) pass; sponsorblock segment sorting test passes. 4 minutes.

17seerrRuns97.3 / 100TypeScript12,834

Open-source media request and discovery manager for Jellyfin, Plex, and Emby.

What the test found: Seerr builds from source, all 182 tests pass, and the production server starts and serves the setup page with SSR HTML on port 5055 via SQLite. 9 minutes.

18ExploRuns96 / 100Go2,018

Spotify's "Discover Weekly" for self-hosted music systems

What the test found: Explo builds successfully from source as a Go binary with embedded Vite frontend, and the web UI server responds to all API endpoints including CSRF, login, auth, config, logs, and background art. 15 minutes.

19spotify-playerRuns86.2 / 100Rust7,267

A Spotify player in the terminal with full feature parity

What the test found: spotify_player 0.25.1 builds and passes all 45 tests, clippy (all features + no-features), and cargo fmt; the binary starts on Xvfd and produces the expected OAuth authentication URL on first launch. All requested features (streaming, rodio-backend, media-control, image, notify, fzf, daemon) compile and run without... 15 minutes.

20streamyfinRuns78.9 / 100TypeScript5,240

A modern Jellyfin client built with Expo

What the test found: Streamyfin installation succeeded: dependencies installed, all 365 unit tests pass, TypeScript type check passes, all 20 Expo SDK compatibility checks pass, and the Metro bundler serves valid JavaScript bundles for both iOS and Android platforms, ready for native device deployment. 15 minutes.

21musikcubeRuns66.7 / 100C++4,854

a cross-platform, terminal-based music player, audio engine, metadata indexer, and server in c++

What the test found: musikcube 3.0.5 built from source: terminal app (musikcube), streaming daemon (musikcubed), core library (libmusikcore.so), and 7 plugins all compile and run successfully on Ubuntu 24.04 x86_64 without root access. 26 minutes.

22openspot-music-appRuns60 / 100TypeScript2,933

OpenSpot is a free, open-source music app that lets you stream and download high-quality tracks across all your devices. With a sleek, intuitive UI built for a...

What the test found: Both openspot-mobile and openspot-desktop apps install dependencies via npm and export static web builds with 14 working routes including index, search, library, settings, downloads, and media pages. 20 minutes.

23mopidyRuns46.7 / 100Python8,592

Mopidy is an extensible music server written in Python

What the test found: Mopidy CLI works with GStreamer 1.24.2; all 1192 tests pass; pycairo/pygobject built from source against extracted dev packages in a local sysroot. 22 minutes.

24rmpcRuns with mocks92 / 100Rust3,408

A modern, configurable, terminal based MPD Client with album art support via various terminal image protocols

What the test found: rmpc 0.11.0 builds from source in both debug and release profiles, passes all 897 tests, and its CLI subcommands (status, outputs, version, help) return correct data against a mock MPD server. 18 minutes.

25MaintainerrRuns with mocks92 / 100TypeScript2,326

Looks and smells like Seerr, does the opposite. A library maintenance tool for Plex, Jellyfin and Emby.

What the test found: yarn install + yarn build succeeds for all 3 packages; NestJS API answers 200 on /api/health/live and /api/health/ready; Vite UI serves 200 at localhost:3000 with `<title>Maintainerr</title>`; 3108 of 3162 server tests pass; 215 of 224 UI tests pass. 83 minutes.

26ISpotifyRuns with mocks92 / 100Python1,900

Local-first desktop music search, playlist, download, and playback app for Windows and Linux

What the test found: All 59 tests pass, core libraries import cleanly, and the GUI application initializes and runs in offscreen mode with no crashes. 1 minute.

27tonzhon-musicRuns with mocks92 / 100JavaScript1,499

铜钟「Tonzhon」: 干净纯粹的音乐平台 (铜钟已不再使用原来的 tonzhon.com,现在的 tonzhon.com 不是正版的铜钟)

What the test found: The Tonzhon music web app builds with npm run build (551ms, 12 output assets), serves via npm run dev (Vite 8, 200 on /), proxies all /api endpoints to a custom mock server that returns realistic JSON for hot-songs, search, song-playback, and favorites endpoints. 8 minutes.

28embyToLocalPlayerRuns with mocks92 / 100Python1,448

etlp - Emby/Jellyfin 调用外部本地播放器,并回传播放记录。适配 Plex。

What the test found: embyToLocalPlayer HTTP server starts on 127.0.0.1:58000, serves root health check returning 200, accepts Emby/Jellyfin/Plex play requests via POST returning 200, and all 24 Python source files compile without warnings on Python 3.12.3 with requests 2.34.2 installed. 7 minutes.

29SubTUIRuns with mocks92 / 100Go276

A lightweight Subsonic TUI music player built in Go with scrobbling support.

What the test found: The app builds and launches, logs into and browses a mocked Subsonic server, renders search results, and sends stream loadfile commands to a mocked mpv IPC socket. 29 minutes.

30infinitunesRuns with mocks87.7 / 100TypeScript362

🎵 A Simple Music Player Web App built using ▲ Next.js, shadcn/ui, TailwindCSS, DrizzleORM and more...

What the test found: npm install completed, next.config.ts simplified (ppr removed), cache changed to no-store, mock JioSaavn API running on :3333, Next.js dev server starts on :4567 and serves the homepage at HTTP 200 with rendered HTML content. 40 minutes.

31librespot-pythonRuns with mocks86 / 100Python331

Open Source Spotify Client

What the test found: librespot-python 0.0.10 installs, imports, and the Zeroconf HTTP server component starts on a TCP port and responds to getInfo requests. 7 minutes.

32lx-music-mobileRuns with mocks82.4 / 100TypeScript18,620

一个基于 React native 开发的音乐软件

What the test found: npm installs 909 packages without errors, both dev (9.7MB) and release (3.1MB) React Native bundles compile for Android, Metro dev server starts on port 8088 answering HTTP 200 on /status, ESLint passes with 0 errors, built-in crypto test.js runs and produces correct output, and the theme builder completes... 23 minutes.

33SoundCloud-DesktopRuns with mocks71 / 100TypeScript536

🎵 Лучший неофициальный SoundCloud клиент для Windows, Linux и macOS | БЕЗ РЕКЛАМЫ | БЕЗ КАПЧИ | БЕЗ ЦЕНЗУРЫ | ДОСТУПНО В РОССИИ

What the test found: The desktop/ frontend installs, compiles TypeScript, builds 2261 Vite modules into dist/, runs a Vite dev server returning HTTP 200 on port 1420, and serves the production build at port 4173 returning HTTP 200. 21 minutes.

34spotifastRuns with mocks61.3 / 100Rust6,775

Spotify, native and fast. One lightweight Rust app for your whole library, local playback, and Spotify Connect on Linux, macOS, and Windows.

What the test found: Spotifast 0.8.0 builds from source on Ubuntu 24.04 (x86_64) without root, all 758 unit tests pass, and the app renders a demo screenshot showing the playlist view with queue panel visible. 71 minutes.

35lx-music-desktopCould not verify80 / 100TypeScript54,276

一个基于 Electron 的音乐软件

What the test found: npm install and full webpack build (main, renderer, renderer-lyric, renderer-scripts) succeed; patched use-gl to swiftshader for headless Linux; app launches and renders a visible LX Music window on Xvfb display. 18 minutes.

36listen1_desktopCould not verify80 / 100JavaScript11,434

one for all free music in china (Windows, Mac, Linux desktop)

What the test found: Listen 1 Electron desktop app installs and launches successfully on the virtual display, initializing its window and renderer process without fatal errors. 2 minutes.

37musicxxCould not verify80 / 100C++2,129

全格式本地/云盘/NAS音视频播放器

What the test found: Three C++ build targets (myServer static library, myMusic executable, myTest executable) build from source using workflow, fmt, spdlog, nlohmann-json, jwt-cpp, and OpenSSL; the myMusic binary runs and computes add(7,77)=84, the myTest binary runs and exits 0, and the Vitepress documentation site builds successfully. 11 minutes.

38CastafioreCould not verify80 / 100JavaScript371

🎶 Castafiore is a music player that support Navidrome and Subsonic API.

What the test found: The Castafiore Subsonic music player PWA builds and serves correctly via the web export pipeline: npm install completes, expo export -p web produces a valid dist/ with index.html, a 1.3 MB JS bundle, service worker, and assets all returning HTTP 200. 7 minutes.

39Docker-TraefikCould not verify50 / 100Shell3,448

Docker media and home server stack with Docker Compose, Traefik, CrowdSec, Google OAuth2/Authelia, and LetsEncrypt. Built with Deployrr and UDMS guides/videos.

What the test found: All 4 Docker Compose stacks validate successfully (83 services total), 9 broken YAML middleware files fixed, 1 network name mismatch corrected, Docker CLI/compose tools installed, but Docker daemon cannot start in this containerized environment. 11 minutes.

40museeksCould not verify25 / 100TypeScript2,135

🎵 A simple, clean and cross-platform music player

What the test found: The frontend installs, builds, and all 9 unit tests pass. The Rust/Tauri backend could not compile due to cumulative disk space exhaustion (7.8GB) from extracting system library .deb packages, the Rust toolchain, and 638 compiled crate dependencies. The E2E browser tests (7 tests across 3 files) fail because they... 55 minutes.

41freyr-jsCould not verify20 / 100JavaScript2,358

A tool for downloading songs from music streaming services like Spotify and Apple Music.

What the test found: could not be verified; the log shows where it stopped. 39 minutes.

-SuggestArrNot yet tested-Python1,334-
-NoraNot yet tested-TypeScript1,241-
-ezarrNot yet tested-Python1,079-
-pytoolsNot yet tested-Python951-
-ChattyPlay-AgentNot yet tested-TypeScript948-
-switchfinNot yet tested-C++880-
-jellyfin-webosNot yet tested-JavaScript871-
-metatube-sdk-goNot yet tested-Go861-
-lx-netease-music-mobileNot yet tested-TypeScript812-
-youtube-musicNot yet tested-TypeScript780-
-movaryNot yet tested-PHP777-
-xiadownNot yet tested-Go730-
-ytermusicNot yet tested-Rust699-
-react-h5-audio-playerNot yet tested-JavaScript692-
-jellyfin-plugin-skin-managerNot yet tested-JavaScript667-
-hummingbirdNot yet tested-Rust616-
-MonsterMusicNot yet tested-Java614-
-universal-remote-cardNot yet tested-TypeScript611-
-jellyfin-iosNot yet tested-JavaScript602-
-radio-activeNot yet tested-Python602-
-IMDb-Scout-ModNot yet tested-JavaScript586-
-tuliproxNot yet tested-Rust573-
-All-jellyfin-media-serverNot yet tested-Shell571-
-autopulseNot yet tested-Rust553-
-ytm-playerNot yet tested-Python520-
-soundcliNot yet tested-TypeScript514-
-MusicBoxNot yet tested-TypeScript503-
-ytdlp2STRMNot yet tested-Python497-
-NASSAVNot yet tested-Python464-
-lazyspotifyNot yet tested-Go445-
-skPlayerNot yet tested-JavaScript443-
-mediaboxNot yet tested-Shell441-
-openwhydNot yet tested-JavaScript433-
-InPlayerEpisodePreviewNot yet tested-JavaScript430-
-lunarr-goNot yet tested-TypeScript384-
-litefinNot yet tested-JavaScript379-
-list-syncNot yet tested-Python339-
-jellyfin-plugin-streamyfinNot yet tested-JavaScript305-
-OpenAverNot yet tested-Python296-
-EPlusTVNot yet tested-TypeScript291-
-Jellyfin-Auto-CollectionsNot yet tested-Python283-
-torbox-media-centerNot yet tested-Python277-
-jelly-appNot yet tested-TypeScript272-

runs installed and started with its real dependencies. runs with mocks started after stand-ins replaced external services such as a database or a third-party API. could not verify neither the standard agent nor the stronger one got it running within the time limit; the log shows where it stopped.

How we tested

On this list as of the latest test: 23 projects ran as-is, 11 with mocks, 7 could not be verified, 43 still waiting. Languages tested: C++, Go, Java, JavaScript, PHP, Python, Ruby, Rust, Shell, TypeScript. Every attempt used a clean single-use machine, the subject at a pinned version, and a 45-minute limit; the complete procedure is on the methodology page.

Frequently asked questions (FAQs)

How is this list ranked?

By measurement, not opinion: projects Argusic installed and launched on a fresh machine come first, then those that ran with mocks in place of external services, then those it could not verify. Ties go to the Argusic Score, then how popular it is on its own source.

Why are some projects unranked?

43 projects are still waiting for a test or for a finished attempt. They are listed without a rank until Argusic has measured them.

Where is the evidence?

Every row links to the project's Argusic page, where each run has a full log and a terminal recording stored with a sha256 fingerprint. The same pages exist for every one of the tested projects, on this list or not.

More lists in this category

All lists: Best. All tested projects: subjects.