Repository navigation
Datastream v0.1.0
First public release of Datastream: a self-hosted music library app with scanning, streaming, and playlist support.
Highlights
- Fullstack monorepo setup with:
NestJSAPI serverReact + Viteweb client
- Dockerized deployment with
serverandclientcontainers - Nginx reverse proxy routing for
/api,/stream, and Socket.IO
Added
Library Scanning
- Initial media scanner for local libraries (
mp3,flac,m4a,wav,ogg,opus) - Metadata parsing (title, artists, album, track/disc numbers, duration, bitrate, date, genre)
- ReplayGain/peak metadata extraction support
- Metadata checksum logic to skip unchanged files on rescan
- Automatic cleanup of removed tracks and orphaned artists/albums/genres
- Cover extraction and cover cache management
Streaming
- Track streaming endpoint (
/stream/track/:id) - Cover image endpoint (
/stream/cover/:filename) - Proper response headers for audio playback and media content
Realtime Updates
- Scanner progress over Socket.IO namespace (
/scanner) - Live scan status events (
idle,running,completed,failed) - Client-side scan progress and last rescan info display
Auth & User Management
- Registration and login
- JWT-based auth with
httpOnlycookie sessions - Protected routes/API guard + public endpoint decorator
- User profile updates (nickname/password) and account deletion
- Session validation endpoint (
/auth/me)
Music Domain APIs
- Albums, tracks, artists, playlists modules
- Filtering/search/pagination for library views
- Sorting modes:
- Alphabetical
- Recently added
- Most played
- Recently played
- Deterministic random (seed-based)
- Playlist CRUD + add/remove tracks
- Per-user play statistics tracking
Frontend
- Multi-page app for Albums, Artists, Tracks, Playlists, Account, Auth
- Player context with queue management and persisted state
- Route protection (public/private)
- i18n support (currently
en,ru) - Theme toggle (light/dark)
Infrastructure
- SQLite persistence via Docker volume
- Configurable host music directory mount (
MUSIC_HOST_PATH -> /music) - Environment-based runtime configuration (
JWT_SECRET,COOKIE_SECURE, etc.)
Notes
- Automatic startup scan is currently disabled; rescan is triggered via API/UI.
- This is the baseline release and foundation for future performance and UX improvements.