RSPlayer is an open-source, headless music server primarily for Linux, with experimental macOS and Windows builds — run it on your NAS, home server, Raspberry Pi, or any x86_64/ARM machine and control it from any browser. A native desktop app (Linux x86_64, macOS, Windows) is also available.
It runs as a systemd service and exposes a responsive web UI, making it a great fit for machines without a monitor or keyboard — but equally at home on a dedicated desktop audio PC. Under the hood it uses Symphonia for decoding and Cpal for output, with a Rust-native pipeline for low-latency, high-performance playback.
📖 Full documentation: https://ljufa.github.io/rsplayer/
🖥️ Online demo: https://rsplayer.dlj.freemyip.com/
🎬 One-minute video tour — navigation, queue, library, and settings:
rsplayer-tutorial.mp4
- Pure-Rust playback engine (Symphonia + cpal) — Linux, macOS, and Windows; also a native desktop app
- Native multiroom (beta): synchronized playback across devices with automatic discovery and encrypted QUIC streaming
- Low-latency ALSA / PipeWire output, plus local playback straight to your browser
- Formats: FLAC, MP3, AAC, OGG Vorbis, WAV, AIFF, CAF, DSD (DSF/DFF), APE
- Built-in DSP: parametric EQ, filters, and presets
- EBU R128 per-song loudness normalization
- Automatic high-quality resampling when the DAC can't match the source rate
- Real-time music visualizer (12 styles) and synchronized lyrics (LRCLIB)
- Library browsing, dynamic playlists, priority queue, drag-and-drop reordering
- Network storage (SMB/CIFS, NFS) mount management from the settings page
- Home Assistant integration and optional DIY hardware control
See the full feature list and feature comparison for details.
Requires curl. The script auto-detects your distribution (Debian/Ubuntu, Fedora/RHEL, Arch/Manjaro) and architecture (x86_64, ARM64/ARMv7/ARMv6, RISC-V 64), adds the RSPlayer package repository on deb/rpm distros (so updates arrive via regular apt/dnf upgrade), then installs and starts the systemd service.
bash <(curl -s https://raw.githubusercontent.com/ljufa/rsplayer/master/install.sh)Or add the repository yourself — Debian/Ubuntu/Raspberry Pi OS:
sudo curl -fsSL -o /usr/share/keyrings/rsplayer.gpg https://ljufa.github.io/rsplayer-pkg/rsplayer.gpg
echo "deb [signed-by=/usr/share/keyrings/rsplayer.gpg] https://ljufa.github.io/rsplayer-pkg/deb stable main" | sudo tee /etc/apt/sources.list.d/rsplayer.list
sudo apt update && sudo apt install rsplayerFedora/RHEL/openSUSE:
sudo curl -fsSL -o /etc/yum.repos.d/rsplayer.repo https://ljufa.github.io/rsplayer-pkg/rpm/rsplayer.repo
sudo dnf install rsplayerFlatpak, from the RSPlayer flatpak repo (updates arrive via flatpak update):
flatpak install https://ljufa.github.io/rsplayer-flatpak/io.github.ljufa.rsplayer.flatpakrefPlayback works out of the box. To enable bit-perfect direct ALSA output to USB DACs and music on host mounts like /mnt, see desktop app sandbox permissions.
or deb/rmp install using script
bash <(curl -s https://raw.githubusercontent.com/ljufa/rsplayer/master/install_desktop.sh)Prefer to install a package manually (.deb / .rpm / .tgz) or run the raw binary? See the Linux installation guide.
No install script — download directly from the latest release:
- Server binary:
rsplayer_darwin_arm64(Apple Silicon) orrsplayer_darwin_amd64(Intel), thenchmod +x rsplayer && ./rsplayer - Desktop app: open the
.dmgand drag RSPlayer to Applications
Audio output uses CoreAudio via cpal. See the macOS installation guide.
Download directly from the latest release:
- Server:
rsplayer_windows_amd64.exe— run it directly, then openhttp://localhost:8000 - Desktop app: run the
rsplayer-desktop_windows_amd64.exeNSIS installer (fetches WebView2 automatically if needed)
Audio output uses WASAPI by default via cpal, and installed ASIO drivers are selectable in Settings → Audio interface for exclusive, low-latency, bit-perfect playback. See the Windows installation guide.
ASIO is a trademark and software of Steinberg Media Technologies GmbH.
docker run -p 8000:80 -v ${MUSIC_DIR}:/music -v rsplayer_data:/opt/rsplayer --device /dev/snd -it --rm ljufa/rsplayer:latestOr use docker compose:
services:
rsplayer:
image: ljufa/rsplayer:latest
devices:
- /dev/snd
ports:
- 8000:80
volumes:
- ${MUSIC_DIR}:/music:ro
- 'rsplayer_volume:/opt/rsplayer'
restart: unless-stopped
volumes:
rsplayer_volume:
driver: localNavigate to http://localhost (or the IP of the machine running RSPlayer). For the Docker command above, the UI is at http://localhost:8000. For configuration, see the documentation.
| Topic | Link |
|---|---|
| Overview & full feature list | https://ljufa.github.io/rsplayer/ |
| Installation | https://ljufa.github.io/rsplayer/#/installation |
| Configuration | https://ljufa.github.io/rsplayer/#/configuration |
| Usage guide | https://ljufa.github.io/rsplayer/#/usage |
| Troubleshooting | https://ljufa.github.io/rsplayer/#/troubleshooting |
| Building from source | https://ljufa.github.io/rsplayer/#/build |
| Feature comparison | https://ljufa.github.io/rsplayer/#/feature_parity |
RSPlayer can be controlled from Home Assistant via the rsplayer_hacs_plugin. For DIY builds, see rsplayer_hardware and rsplayer_firmware.
Contributions are welcome — submit a pull request or open an issue. To build from source, see the Building from Source documentation.
RSPlayer is licensed under the MIT license. See the LICENSE file for more information.