About this project

Music Player is an extensible music daemon, server, and client written in Rust, distributed as a single binary with zero runtime dependencies. It is designed in the spirit of MPD and Mopidy. Playback is powered by the Rockbox firmware's audio engine (via rockbox-playback, rockbox-dsp, and rockbox-metadata crates), supporting 40+ formats including MP3, FLAC, Vorbis, Opus, MP4/AAC/ALAC, WavPack, APE, WMA, and chiptunes. The DSP chain provides EQ presets, crossfade, and ReplayGain, with gapless-grade buffering and native HTTP streaming. The daemon indexes the music library into SQLite with FTS5 full-text search, kept in sync automatically by database triggers. It exposes the library over gRPC (tonic, grpc-web enabled), GraphQL (with GraphiQL), WebSocket events, and a web UI. The same binary acts as both server and client — the first invocation starts the daemon, subsequent ones connect to it. User interfaces include: - A terminal UI (ratatui) with an fzf-style fuzzy finder, neovim-inspired status line, and help overlay. - A web UI (React 19, TanStack Query, Jotai, Tailwind v4) with live playback position via GraphQL subscriptions, responsive down to phone width. - A skinnable Slint desktop app with an embedded daemon, sharing the same skins, fonts, and components as the web UI. Additional features: - Browse and stream from Subsonic/Navidrome and Jellyfin servers. - Cast to Chromecast and UPnP/DLNA renderers, or control another music-player daemon. - Internet radio search and browsing (Radio Browser + TuneIn) with bookmarks and a fullscreen now-playing view. - Rocksky scrobbling over the AT Protocol. - AT Protocol sync for radio bookmarks and liked songs across devices. - Acoustic fingerprinting via Chromaprint, identifying files by audio and naming poorly tagged ones from AcoustID/MusicBrainz. - Listening analytics powered by DuckDB, importing Spotify, Last.fm, and Rocksky history (deduplicated across sources) for session, skip, and taste-drift analysis. - Flexible audio output: system device (cpal), stdout, FIFO, Unix socket, or TCP socket. Installation is available via curl install script, npm, Homebrew (including a macOS cask for the desktop app), APT and DNF repositories, AUR, Nix flakes, and prebuilt binaries for macOS (arm64/x86_64) and Linux (amd64/arm64). Configuration lives in ~/.config/music-player/settings.toml, with every key overridable via MUSIC_PLAYER_* environment variables.