A Rust-based HTTP server for managing and streaming music files with a CLI client and web interface.
- 🎵 Scan local music library folders
- 🎼 Support for FLAC, MP3, OGG Vorbis, and M4A (AAC) audio formats
- 📊 Extract metadata (title, artist, album, duration, cover art)
- 🌐 REST API for music library access
- 🎧 Stream audio files over HTTP with range request support
- 💻 CLI client for browsing library
▶️ Audio playback directly from CLI client- 🌐 Web client for browsing and managing tracks
- ✏️ Edit track metadata (title, artist, album, genre, year, etc.)
- 🖼️ Cover art management (view, add, remove)
- 📝 Lyrics support with plain text and LRC (synchronized) formats
- 💾 SQLite database for persistent lyrics storage
- 📋 Playlist management with server-side persistence
- Rust toolchain (Edition 2024)
- A folder with FLAC, MP3, OGG, or M4A music files
# Using command-line argument
cargo run -- --library /path/to/music/folder
# Or using environment variable
export MUSIC_LIBRARY_PATH=/path/to/music
cargo run
# Specify custom port (default is 3000)
cargo run -- --library /path/to/music --port 8080# List all tracks in the library
cargo run --bin music-client
# List with custom server URL
cargo run --bin music-client -- --server http://localhost:3000 list
# Get detailed information about a specific track
cargo run --bin music-client -- info <track-id>
# Play a specific track
cargo run --bin music-client -- play <track-id>
# Play all tracks in the library
cargo run --bin music-client -- play-allSee music-station-client-gtk for a GTK-based GUI client.
- Start the server (see above)
- Open your browser to
http://localhost:3000/web/index.html - Browse your music library with a clean web interface
- Click "Edit" on any track to update its metadata (title, artist, album)
- Changes are saved directly to the FLAC files
Music Station provides a comprehensive REST API for client development.
📖 For Client Developers:
- CLIENT_DEVELOPMENT_GUIDE.md - Quick start guide with examples in JavaScript, Python, Swift, Kotlin
- API_DOCUMENTATION.md - Complete REST API reference with all endpoints, parameters, and responses
The server:
- Scans the specified library folder on startup
- Parses audio metadata using Symphonia (FLAC, MP3, OGG, and M4A support)
- Stores track information in memory (thread-safe with
Arc<RwLock>) - Serves REST API via Axum on port 3000 (configurable)
- Supports HTTP range requests for efficient audio streaming
The client:
- Connects to the server via HTTP
- Fetches and displays track information
- Provides formatted output for easy browsing
- Streams and plays audio using Rodio audio library
See LICENSE file for details.