{"id":14983609,"url":"https://github.com/tsirysndr/music-player","last_synced_at":"2025-05-15T15:09:11.359Z","repository":{"id":59345299,"uuid":"531785468","full_name":"tsirysndr/music-player","owner":"tsirysndr","description":" An extensible music server written in Rust 🚀🎵✨","archived":false,"fork":false,"pushed_at":"2024-10-02T18:01:22.000Z","size":33458,"stargazers_count":448,"open_issues_count":31,"forks_count":32,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-12T01:55:57.665Z","etag":null,"topics":["audio","audio-streaming","cli","daemon","graphql","grpc","mp3","mpd","music","music-player","music-server","music-streaming","player","rust","self-hosted","server","tantivy","tokio","webassembly"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tsirysndr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"tsirysndr","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2022-09-02T04:52:00.000Z","updated_at":"2025-04-10T06:28:09.000Z","dependencies_parsed_at":"2024-03-27T15:52:24.107Z","dependency_job_id":"035e6f1a-9c65-4140-a14e-028a2790d970","html_url":"https://github.com/tsirysndr/music-player","commit_stats":{"total_commits":542,"total_committers":10,"mean_commits":54.2,"dds":0.044280442804428,"last_synced_commit":"cbf03c3f2f0f9baca831b08ec27d9b31438faa3d"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsirysndr%2Fmusic-player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsirysndr%2Fmusic-player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsirysndr%2Fmusic-player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsirysndr%2Fmusic-player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tsirysndr","download_url":"https://codeload.github.com/tsirysndr/music-player/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248505865,"owners_count":21115354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","audio-streaming","cli","daemon","graphql","grpc","mp3","mpd","music","music-player","music-server","music-streaming","player","rust","self-hosted","server","tantivy","tokio","webassembly"],"created_at":"2024-09-24T14:07:35.204Z","updated_at":"2025-04-12T01:56:21.172Z","avatar_url":"https://github.com/tsirysndr.png","language":"Rust","funding_links":["https://github.com/sponsors/tsirysndr"],"categories":["Rust"],"sub_categories":[],"readme":"## Music Player (written in Rust)\n\n\u003cp\u003e\n  \u003ca href=\"https://flakehub.com/flake/tsirysndr/music-player\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/endpoint?url=https://flakehub.com/f/tsirysndr/music-player/badge\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"LICENSE\" target=\"_blank\"\u003e\n    \u003cimg alt=\"License: MIT\" src=\"https://img.shields.io/badge/License-MIT-blue.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://buf.build/tsiry/musicserverapis/docs/main:music.v1alpha1\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/apidocs-yes-cyan.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/music-player\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/crates/v/music-player.svg\" /\u003e\n  \u003c/a\u003e\n   \u003ca href=\"https://crates.io/crates/music-player\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/crates/dr/music-player\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/tsirysndr/music-player\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://codecov.io/gh/tsirysndr/music-player/branch/chore/tests/graph/badge.svg?token=\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/tsirysndr/music-player/releases\" target=\"_blank\"\u003e\n    \u003cimg alt=\"GitHub all releases\" src=\"https://img.shields.io/github/downloads/tsirysndr/music-player/total\"\u003e\n   \u003c/a\u003e\n  \u003ca href=\"https://github.com/tsirysndr/music-player/actions/workflows/ci.yml\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://github.com/tsirysndr/music-player/actions/workflows/ci.yml/badge.svg\" /\u003e\n  \u003c/a\u003e\n   \u003ca href=\"https://github.com/tsirysndr/music-player/actions/workflows/release.yml\" target=\"_blank\"\u003e\n    \u003cimg alt=\"release\" src=\"https://github.com/tsirysndr/music-player/actions/workflows/release.yml/badge.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/tsirysndr/music-player/actions/workflows/rust-clippy.yml\" target=\"_blank\"\u003e\n    \u003cimg alt=\"rust-clippy\" src=\"https://github.com/tsirysndr/music-player/actions/workflows/rust-clippy.yml/badge.svg?branch=master\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://feat-webui--6343b23f7b47cd6de45a5849.chromatic.com/\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/storybooks/brand/master/badge/badge-storybook.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://discord.gg/reJ9gUNsMV\" target=\"_blank\"\u003e\n    \u003cimg alt=\"discord-server\" src=\"https://img.shields.io/discord/1026789060515205181?label=discord\u0026logo=discord\u0026color=5865F2\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp style=\"margin-top: 20px; margin-bottom: 50px;\"\u003e\n\u003cimg src=\"./preview.png\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n\u003cp style=\"margin-top: 20px; margin-bottom: 50px;\"\u003e\n\u003cimg src=\"./preview-tui.png\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\nNote: This is a work in progress. 🏗️🚧\n\nThis is a simple music player that I made for my own use. It is written in Rust and uses [rodio](https://github.com/RustAudio/rodio), [symphonia](https://github.com/pdeljanov/Symphonia), and [gRPC](https://grpc.io/) libraries.\u003cbr /\u003e\nMusic is played through the server's audio device. The daemon stores info about all available music, and this info can be easily searched and retrieved.\nLike [mpd](https://github.com/MusicPlayerDaemon/MPD) or [Mopidy](https://github.com/mopidy/mopidy) but written in Rust.\n\n\u003e [!NOTE]\n\u003e **Looking for more?**\n\u003e If you're interested in this project, you might want to check out [Rockbox Zig](https://github.com/tsirysndr/rockbox-zig), \n\u003e a music player daemon built on the [Rockbox](https://www.rockbox.org) Open Source Firmware. It offers advanced audio playback \n\u003e features, bringing the best of Rockbox to modern platforms with the power of [Zig](https://ziglang.org/) and [Rust](https://www.rust-lang.org).\n\u003e \n\n\u003cp style=\"margin-top: 20px; margin-bottom: 20px;\"\u003e\n  \u003cimg src=\"./preview.svg\" width=\"800\" /\u003e\n\u003c/p\u003e\n\n## Installation\n\nCompiling from source, without Nix:\n\n```bash\n# Install dependencies\nbrew install protobuf # macOS\nsudo apt-get install -y libasound2-dev protobuf-compiler # Ubuntu/Debian\nchoco install protoc # Windows using Chocolatey Package Manager\n# Compile\ngit clone https://github.com/tsirysndr/music-player.git\ncd music-player/webui/musicplayer\nnvm install # install node version specified in .nvmrc (optional on windows)\nbun install \u0026\u0026 bun run build # build webui\ncd ../..\ncargo install --path .\n```\n\nWith Nix:\n\n```bash\ngit clone https://github.com/tsirysndr/music-player.git\ncd music-player\nnix develop --experimental-features \"nix-command flakes\"\ncd webui/musicplayer\nbun install \u0026\u0026 bun run build # build webui\ncd ../..\ncargo install --path .\n```\n\n### macOS/Linux\n\nUsing [Homebrew](https://brew.sh/):\n\n```bash\nbrew install tsirysndr/tap/musicplayer\n```\n\nUsing [Nix](https://nixos.org/):\n\n```bash\ncachix use tsirysndr\nnix profile install --experimental-features \"nix-command flakes\" github:tsirysndr/music-player\n```\n\nOr download the latest release for your platform [here](https://github.com/tsirysndr/music-player/releases).\n\n## 📦 Downloads\n\n\u003c!-- download start --\u003e\n\n**Latest (Desktop):**\n\n- `Mac`: arm64: [music-player-desktop_v0.2.0-alpha.12_aarch64-apple-darwin.tar.gz](https://github.com/tsirysndr/music-player/releases/download/v0.2.0-alpha.12/music-player-desktop_v0.2.0-alpha.12_aarch64-apple-darwin.tar.gz) intel: [Music_Player_v0.2.0-alpha.12_x64.dmg](https://github.com/tsirysndr/music-player/releases/download/v0.2.0-alpha.12/Music_Player_v0.2.0-alpha.12_x64.dmg)\n- `Linux`: [music-player_v0.2.0-alpha.12_amd64.deb](https://github.com/tsirysndr/music-player/releases/download/v0.2.0-alpha.12/music-player_v0.2.0-alpha.12_amd64.deb)\n- `Windows`: [Music_Player_x64_en-US.msi](https://github.com/tsirysndr/music-player/releases/download/v0.2.0-alpha.12/Music_Player_x64_en-US.msi)\n\n**Latest (CLI):**\n\n- `Mac`: arm64: [music-player_v0.2.0-alpha.12_aarch64-apple-darwin.tar.gz](https://github.com/tsirysndr/music-player/releases/download/v0.2.0-alpha.12/music-player_v0.2.0-alpha.12_aarch64-apple-darwin.tar.gz) intel: [music-player_v0.2.0-alpha.12_x86_64-apple-darwin.tar.gz](https://github.com/tsirysndr/music-player/releases/download/v0.2.0-alpha.12/music-player_v0.2.0-alpha.12_x86_64-apple-darwin.tar.gz)\n- `Linux`: [music-player_v0.2.0-alpha.12_x86_64-unknown-linux-gnu.tar.gz](https://github.com/tsirysndr/music-player/releases/download/v0.2.0-alpha.12/music-player_v0.2.0-alpha.12_x86_64-unknown-linux-gnu.tar.gz)\n- `Windows`: [music-player_x86_64-pc-windows-gnu.tar.gz](https://github.com/tsirysndr/music-player/releases/download/v0.2.0-alpha.12/music-player_x86_64-pc-windows-gnu.tar.gz)\n\n[Other version...](https://github.com/tsirysndr/music-player/releases)\n\n\n## Start the server\n\n```bash\nmusic-player\n```\n\n## Usage\n\n```\nUSAGE:\n    music-player [SUBCOMMAND]\n\nOPTIONS:\n    -h, --help       Print help information\n    -V, --version    Print version information\n\nSUBCOMMANDS:\n    albums      List all albums\n    artists     List all artists\n    help        Print this message or the help of the given subcommand(s)\n    next        Play the next song\n    pause       Pause the current song\n    open        Open audio file\n    playlist    Manage playlists\n    prev        Play the previous song\n    queue       Manage the queue\n    play        Resume the current song\n    scan        Scan music library: $HOME/Music\n    search      Search for a song, album, artist or playlist\n    stop        Stop the current song\n    tracks      List all tracks\n```\n\n### GraphQL API\n\n```bash\n# Start the server\nmusic-player\n```\n\nOpen [http://localhost:5053/graphiql](http://localhost:5053/graphiql) in your browser.\n\n\u003cp style=\"margin-top: 20px; margin-bottom: 20px;\"\u003e\n \u003cimg src=\"./preview-api.png\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n### Features\n\n- [x] Play music from specified path\n- [x] Configuration file support\n- [x] [gRPC API](https://buf.build/tsiry/musicserverapis/docs/main:music.v1alpha1) for controlling the player\n- [x] Scan music library\n- [x] Play/Pause/Stop music\n- [x] Next/Previous track\n- [x] Create/Delete playlists\n- [x] Music Player Client\n- [x] Terminal UI (using [tui-rs](https://github.com/fdehau/tui-rs))\n- [x] GraphQL API \n- [x] Web UI\n- [ ] Desktop version (using [gtk-rs](https://gtk-rs.org/))\n- [x] Android Library (See [songbird-android](https://github.com/tsirysndr/songbird-android) and [songbird-android-rs](https://github.com/tsirysndr/songbird-android-rs))\n- [ ] iOS Library\n- [ ] Mobile version (React Native)\n- [x] Stream to Chromecast\n- [ ] Stream to Airplay\n- [x] Stream to Kodi\n- [x] Stream to UPnP Media Renderer\n- [ ] Stream from Youtube (audio only)\n- [ ] Stream from Spotify\n- [ ] Stream from Soundcloud\n- [ ] Stream from Deezer\n- [ ] Stream from DatPiff\n- [ ] Stream from Tidal\n- [ ] Stream from [MyVazo](https://myvazo.com/)\n\n## ✨ Star History\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=tsirysndr/music-player\u0026type=Date\u0026theme=dark\" /\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=tsirysndr/music-player\u0026type=Date\" /\u003e\n  \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=tsirysndr/music-player\u0026type=Date\" /\u003e\n\u003c/picture\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsirysndr%2Fmusic-player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftsirysndr%2Fmusic-player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsirysndr%2Fmusic-player/lists"}