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.
| # | project | verdict | Argusic Score | language | stars | tested on |
|---|---|---|---|---|---|---|
| 1 | cliamp | Runs | 100 / 100 | Go | 4,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. | ||||||
| 2 | blackcandy | Runs | 100 / 100 | Ruby | 4,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. | ||||||
| 3 | wizarr | Runs | 100 / 100 | Python | 3,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. | ||||||
| 4 | bili-sync | Runs | 100 / 100 | Rust | 2,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. | ||||||
| 5 | songloft | Runs | 100 / 100 | Go | 1,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. | ||||||
| 6 | Youtarr | Runs | 100 / 100 | JavaScript | 1,730 | |
Self-hosted web app that automates downloading, organizing, and scheduling YouTube channel content with support for Plex, Kodi, Emby and Jellyfin | ||||||
| 7 | watchstate | Runs | 100 / 100 | PHP | 1,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. | ||||||
| 8 | spotatui | Runs | 100 / 100 | Rust | 1,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. | ||||||
| 9 | jellyfin-audio-player | Runs | 100 / 100 | TypeScript | 1,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. | ||||||
| 10 | multi-scrobbler | Runs | 100 / 100 | TypeScript | 1,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. | ||||||
| 11 | Koito | Runs | 100 / 100 | Go | 1,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. | ||||||
| 12 | qm-music | Runs | 100 / 100 | Java | 580 | |
🎧☁️ 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. | ||||||
| 13 | mousiki | Runs | 100 / 100 | C++ | 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. | ||||||
| 14 | koel | Runs | 98.8 / 100 | PHP | 17,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. | ||||||
| 15 | music-player | Runs | 98.8 / 100 | Rust | 525 | |
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. | ||||||
| 16 | pear-desktop | Runs | 97.3 / 100 | TypeScript | 33,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. | ||||||
| 17 | seerr | Runs | 97.3 / 100 | TypeScript | 12,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. | ||||||
| 18 | Explo | Runs | 96 / 100 | Go | 2,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. | ||||||
| 19 | spotify-player | Runs | 86.2 / 100 | Rust | 7,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. | ||||||
| 20 | streamyfin | Runs | 78.9 / 100 | TypeScript | 5,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. | ||||||
| 21 | musikcube | Runs | 66.7 / 100 | C++ | 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. | ||||||
| 22 | openspot-music-app | Runs | 60 / 100 | TypeScript | 2,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. | ||||||
| 23 | mopidy | Runs | 46.7 / 100 | Python | 8,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. | ||||||
| 24 | rmpc | Runs with mocks | 92 / 100 | Rust | 3,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. | ||||||
| 25 | Maintainerr | Runs with mocks | 92 / 100 | TypeScript | 2,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. | ||||||
| 26 | ISpotify | Runs with mocks | 92 / 100 | Python | 1,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. | ||||||
| 27 | tonzhon-music | Runs with mocks | 92 / 100 | JavaScript | 1,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. | ||||||
| 28 | embyToLocalPlayer | Runs with mocks | 92 / 100 | Python | 1,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. | ||||||
| 29 | SubTUI | Runs with mocks | 92 / 100 | Go | 276 | |
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. | ||||||
| 30 | infinitunes | Runs with mocks | 87.7 / 100 | TypeScript | 362 | |
🎵 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. | ||||||
| 31 | librespot-python | Runs with mocks | 86 / 100 | Python | 331 | |
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. | ||||||
| 32 | lx-music-mobile | Runs with mocks | 82.4 / 100 | TypeScript | 18,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. | ||||||
| 33 | SoundCloud-Desktop | Runs with mocks | 71 / 100 | TypeScript | 536 | |
🎵 Лучший неофициальный 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. | ||||||
| 34 | spotifast | Runs with mocks | 61.3 / 100 | Rust | 6,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. | ||||||
| 35 | lx-music-desktop | Could not verify | 80 / 100 | TypeScript | 54,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. | ||||||
| 36 | listen1_desktop | Could not verify | 80 / 100 | JavaScript | 11,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. | ||||||
| 37 | musicxx | Could not verify | 80 / 100 | C++ | 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. | ||||||
| 38 | Castafiore | Could not verify | 80 / 100 | JavaScript | 371 | |
🎶 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. | ||||||
| 39 | Docker-Traefik | Could not verify | 50 / 100 | Shell | 3,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. | ||||||
| 40 | museeks | Could not verify | 25 / 100 | TypeScript | 2,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. | ||||||
| 41 | freyr-js | Could not verify | 20 / 100 | JavaScript | 2,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. | ||||||
| - | SuggestArr | Not yet tested | - | Python | 1,334 | - |
| - | Nora | Not yet tested | - | TypeScript | 1,241 | - |
| - | ezarr | Not yet tested | - | Python | 1,079 | - |
| - | pytools | Not yet tested | - | Python | 951 | - |
| - | ChattyPlay-Agent | Not yet tested | - | TypeScript | 948 | - |
| - | switchfin | Not yet tested | - | C++ | 880 | - |
| - | jellyfin-webos | Not yet tested | - | JavaScript | 871 | - |
| - | metatube-sdk-go | Not yet tested | - | Go | 861 | - |
| - | lx-netease-music-mobile | Not yet tested | - | TypeScript | 812 | - |
| - | youtube-music | Not yet tested | - | TypeScript | 780 | - |
| - | movary | Not yet tested | - | PHP | 777 | - |
| - | xiadown | Not yet tested | - | Go | 730 | - |
| - | ytermusic | Not yet tested | - | Rust | 699 | - |
| - | react-h5-audio-player | Not yet tested | - | JavaScript | 692 | - |
| - | jellyfin-plugin-skin-manager | Not yet tested | - | JavaScript | 667 | - |
| - | hummingbird | Not yet tested | - | Rust | 616 | - |
| - | MonsterMusic | Not yet tested | - | Java | 614 | - |
| - | universal-remote-card | Not yet tested | - | TypeScript | 611 | - |
| - | jellyfin-ios | Not yet tested | - | JavaScript | 602 | - |
| - | radio-active | Not yet tested | - | Python | 602 | - |
| - | IMDb-Scout-Mod | Not yet tested | - | JavaScript | 586 | - |
| - | tuliprox | Not yet tested | - | Rust | 573 | - |
| - | All-jellyfin-media-server | Not yet tested | - | Shell | 571 | - |
| - | autopulse | Not yet tested | - | Rust | 553 | - |
| - | ytm-player | Not yet tested | - | Python | 520 | - |
| - | soundcli | Not yet tested | - | TypeScript | 514 | - |
| - | MusicBox | Not yet tested | - | TypeScript | 503 | - |
| - | ytdlp2STRM | Not yet tested | - | Python | 497 | - |
| - | NASSAV | Not yet tested | - | Python | 464 | - |
| - | lazyspotify | Not yet tested | - | Go | 445 | - |
| - | skPlayer | Not yet tested | - | JavaScript | 443 | - |
| - | mediabox | Not yet tested | - | Shell | 441 | - |
| - | openwhyd | Not yet tested | - | JavaScript | 433 | - |
| - | InPlayerEpisodePreview | Not yet tested | - | JavaScript | 430 | - |
| - | lunarr-go | Not yet tested | - | TypeScript | 384 | - |
| - | litefin | Not yet tested | - | JavaScript | 379 | - |
| - | list-sync | Not yet tested | - | Python | 339 | - |
| - | jellyfin-plugin-streamyfin | Not yet tested | - | JavaScript | 305 | - |
| - | OpenAver | Not yet tested | - | Python | 296 | - |
| - | EPlusTV | Not yet tested | - | TypeScript | 291 | - |
| - | Jellyfin-Auto-Collections | Not yet tested | - | Python | 283 | - |
| - | torbox-media-center | Not yet tested | - | Python | 277 | - |
| - | jelly-app | Not yet tested | - | TypeScript | 272 | - |
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
- developer CLI tools (shares spotatui, spotify-player with this list)
- workflow automation tools (shares SuggestArr, Youtarr with this list)
- self-hosted AI apps (shares SuggestArr with this list)
- VPN tools (shares All-jellyfin-media-server with this list)
- backup tools (shares watchstate with this list)
- message queues (shares radio-active with this list)
- AI agent frameworks
- API clients
- API gateways
- CI/CD tools
- CMS platforms
- LLM gateways
- MCP servers
- browser automation tools
- code editors
- open source coding agents
- Open source databases, installed and queried
- e-commerce platforms
- ebook readers
- game engines
- open source games
- home automation tools
- low-code platforms
- map tools
- observability tools
- Open source office suites, installed and launched
- self-hosted password managers
- project management tools
- screen recorders
- search engines
- self-hosted analytics
- speech tools
- static site generators
- uptime monitors
- vector databases
- open source video editors
- video players
- web scraping tools
- whiteboard tools
- wikis
- self-hosted Notion alternatives
- self-hosted dashboards
- self-hosted git servers