rmpd is a modern, high-performance, memory-safe music server written in pure Rust. It aims for 100% compatibility with the Music Player Daemon (MPD) protocol while providing first-class extensibility through a plugin architecture.
- π΅ MPD Protocol Compatible - Works with existing MPD clients (ncmpcpp, mpc, Cantata)
- π¦ Pure Rust - Memory-safe, fast, and reliable
- π Extensible - Plugin system for decoders, outputs, and inputs
- π§ High-Quality Audio - DSD support, ReplayGain, gapless playback, crossfade
- πΌ Format Support - FLAC, MP3, Ogg Vorbis, WAV, AAC, DSD (DoP and native)
- π Multi-Room Ready - Snapcast integration for synchronized playback
- π± Multi-Protocol - MPD and OpenSubsonic support (planned)
- β‘ Efficient - Runs on everything from Raspberry Pi to high-end servers
rmpd/
βββ rmpd/ # Main binary
βββ rmpd-core/ # Core types and traits
βββ rmpd-protocol/ # MPD protocol implementation
βββ rmpd-player/ # Audio playback engine
βββ rmpd-library/ # Music library/database
βββ rmpd-plugin/ # Plugin system
βββ rmpd-stream/ # Streaming support
System dependencies:
# Ubuntu/Debian
sudo apt-get install libasound2-dev pkg-config
# macOS
brew install pkg-configcargo build --release./target/release/rmpd --bind 127.0.0.1 --port 6600 --music-dir ~/Music# Check status
mpc status
# Update library
mpc update
# Add and play music
mpc add /
mpc playCreate ~/.config/rmpd/rmpd.toml:
[general]
music_directory = "~/Music"
playlist_directory = "~/.config/rmpd/playlists"
db_file = "~/.config/rmpd/database.db"
log_level = "info"
[network]
bind_address = "127.0.0.1"
port = 6600
[audio]
default_output = "alsa"
gapless = true
replay_gain = "auto"
buffer_time = 500
[[output]]
name = "ALSA Output"
type = "alsa"
enabled = true
device = "default"
[[output]]
name = "Snapcast Output"
type = "snapcast"
enabled = false
fifo_path = "/tmp/snapfifo"See rmpd.toml for a complete configuration example.
- Lossless: FLAC, WAV, ALAC, APE, WavPack, TrueAudio
- Lossy: MP3, Ogg Vorbis, Opus, AAC, MP4
- High-Resolution: DSD (DSF, DFF) with DoP and native playback
- Streaming: HTTP streams, Icecast, internet radio
rmpd includes comprehensive DSD support:
- DSD64, DSD128, DSD256 and higher sample rates
- DoP (DSD over PCM) for wider DAC compatibility
- Native DSD playback for compatible hardware
- Automatic format detection and conversion
cargo test --workspace --all-features# Format code
cargo fmt
# Run clippy
cargo clippy --workspace --all-targets --all-featuresThis project uses GitHub Actions for CI/CD with:
- Multi-platform testing (Ubuntu, macOS)
- Multi-architecture builds (x86_64, ARM64)
- Strict linting with Clippy
- Security audits with cargo-audit and cargo-deny
- Code coverage reporting
- Automated dependency updates via Renovate
See CI.md for detailed CI/CD documentation.
-
Core Infrastructure
- MPD protocol server (TCP/Unix sockets)
- Event bus system
- Configuration management
- Logging with tracing
-
Audio Playback
- Multi-format decoding (FLAC, MP3, Vorbis, WAV, AAC, DSD)
- High-rate DSD support (DSD128, DSD256+)
- Multiple output types (ALSA, PulseAudio, PipeWire)
- Gapless playback
- ReplayGain support
-
Library Management
- Filesystem scanning
- SQLite database
- Metadata extraction with lofty
- Full-text search with tantivy
- Album art support
-
MPD Protocol
- Core playback commands (play, pause, stop, seek)
- Queue management (add, delete, move, shuffle)
- Database queries (find, search, list)
- Status and statistics
- Playlist management
- Output control
- Advanced playback features (crossfade, MixRamp)
- Plugin system
- Snapcast integration
- Complete MPD protocol coverage
- OpenSubsonic support
- β mpc - Command-line client
- β ncmpcpp - TUI client
- β Cantata - Qt GUI client
- β rmpc - Modern TUI client
- π§ MPDroid - Android client (testing in progress)
- π§ MPDluxe - iOS client (testing in progress)
- π§ Snapcast - Synchronous multi-room playback (integration in progress)
rmpd is designed for efficiency:
- Startup time: < 500ms with 100k song library
- Memory usage: < 20MB idle, < 150MB with 100k songs loaded
- CPU usage: < 5% during FLAC playback
- MSRV: Rust 1.75.0+
- 100% MPD Compatibility - Drop-in replacement for MPD
- Modern Architecture - Clean, modular, testable code
- Extensibility - Plugin system for community contributions
- Performance - Efficient resource usage
- Multi-Protocol - MPD, OpenSubsonic support
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Run
cargo fmtandcargo clippy - Submit a pull request
See CI.md for development guidelines and CI/CD information.
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
- Inspired by the original Music Player Daemon
- Built with modern Rust audio libraries: Symphonia, cpal, lofty
- Special thanks to the Rust audio community
- Documentation: CI.md - CI/CD and development guide
- MPD Protocol: MPD Protocol Documentation
- Issue Tracker: GitHub Issues
- Discussions: GitHub Discussions