Skip to content

Datastream v0.1.0

Choose a tag to compare

@SneakySelderey SneakySelderey released this 09 Feb 23:03
· 56 commits to main since this release
51e5984

First public release of Datastream: a self-hosted music library app with scanning, streaming, and playlist support.

Highlights

  • Fullstack monorepo setup with:
    • NestJS API server
    • React + Vite web client
  • Dockerized deployment with server and client containers
  • 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 httpOnly cookie 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.