Repolode
tsirysndr

tsirysndr/music-player

An extensible music player daemon, server and client written in Rust, with gRPC, GraphQL, a web UI, a terminal UI and a desktop app.

Open-source alternative to:SpotifySonos

Stars
529
Forks
34
Open issues
15
Last commit
9 days ago

What is it?

Music Player is a music player daemon in the spirit of mpd and Mopidy. A single binary acts as both the server and the client: the first instance starts the daemon, and later invocations detect it and send commands to it. The daemon scans a local music directory, indexes the library into SQLite with FTS5 full-text search, and exposes it over gRPC, GraphQL and WebSocket events.

Audio decoding and playback use the Rockbox firmware's engine through several published Rust crates. It supports over 40 audio formats and a DSP chain with EQ presets, crossfade and ReplayGain. Output can go to the system audio device or to stdout, a named pipe, or a Unix or TCP socket.

Control surfaces include a ratatui terminal UI, a React web UI served on port 5053, and a Slint desktop app. The daemon can also browse and stream from Subsonic, Navidrome and Jellyfin servers, cast to Chromecast and UPnP/DLNA renderers, and play internet radio. Optional integrations cover Rocksky scrobbling, AT Protocol sync, Chromaprint fingerprinting with AcoustID lookups, DuckDB-based listening analytics, and an MCP server for AI agents.

Key features

  • 01Plays 40+ audio formats through the Rockbox playback engine with EQ, crossfade and ReplayGain
  • 02Library indexed in SQLite with FTS5 full-text search
  • 03Terminal UI, React web UI and Slint desktop app controlling the same daemon
  • 04gRPC and GraphQL APIs for building custom clients
  • 05Streams from Subsonic, Navidrome and Jellyfin servers
  • 06Casts to Chromecast and UPnP/DLNA renderers

Use cases

  • Running a self-hosted music server on a home machine and controlling it from a phone browser or terminal
  • Streaming a remote Navidrome or Jellyfin library to a local audio output
  • Building a custom music client on top of its gRPC or GraphQL API
  • Letting an AI agent queue and manage playback through the MCP server

Quick start

  1. 1

    Install the CLI with Homebrew (macOS/Linux)

    brew install tsirysndr/tap/musicplayer
  2. 2

    Start the daemon, which scans $HOME/Music by default

    music-player

Things to know

  • The macOS desktop app is not code-signed or notarized, so Gatekeeper blocks it on first launch.
  • Compiling from source needs protobuf, Bun for the web UI, and a separate DuckDB fetch script before cargo install.

In collections

Topics

FAQ

What is music-player?
An extensible music player daemon, server and client written in Rust, with gRPC, GraphQL, a web UI, a terminal UI and a desktop app. Music Player is a music player daemon in the spirit of mpd and Mopidy. A single binary acts as both the server and the client: the first instance starts the daemon, and later invocations detect it and send commands to it. The daemon scans a local music directory, indexes the library into SQLite with FTS5 full-text search, and exposes it over gRPC, GraphQL and WebSocket events.
Is music-player free to use? What license does it have?
music-player is open source under the MIT license. Check the license terms before using it in commercial products.
Is music-player still maintained?
Actively maintained. The last commit to music-player was on Oct 30, 2026.
What can I use music-player for?
Running a self-hosted music server on a home machine and controlling it from a phone browser or terminal Streaming a remote Navidrome or Jellyfin library to a local audio output Building a custom music client on top of its gRPC or GraphQL API Letting an AI agent queue and manage playback through the MCP server
How do I install music-player?
Install the CLI with Homebrew (macOS/Linux): brew install tsirysndr/tap/musicplayer Start the daemon, which scans $HOME/Music by default: music-player
Where can I get music-player?
The source code and installation instructions are on GitHub: https://github.com/tsirysndr/music-player

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects