Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add initial CHANGELOG.md

+69
+69
CHANGELOG.md
··· 1 + # Changelog 2 + 3 + All notable changes to this project will be documented in this file. 4 + 5 + The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). 6 + 7 + ## [2026.04.28-1] 8 + 9 + ### Added 10 + - Real-time PCM loudness normalizer (`normalize_volume = true` in `settings.toml`) — RMS-based AGC with asymmetric attack/release, similar to Spotify's "Normalize Volume"; applied across all PCM sinks (SDL, FIFO, AirPlay, Squeezelite, UPnP, Chromecast, Snapcast TCP) 11 + - `GET /player/volume` REST endpoint returning `{ volume, min, max }` 12 + - `volume` GraphQL query returning live current volume with min/max range 13 + - `useGetVolumeQuery` GraphQL hook in the web UI 14 + - `get_current_volume()` gRPC client helper in the GPUI app 15 + 16 + ### Fixed 17 + - Volume slider in GPUI mini-player now responds to mouse clicks (replaced plain `div` with `SeekBar` component) 18 + - Volume slider in web UI now uses correct 0–100 range with explicit `min`/`max` on the MUI Slider 19 + - `globalSettings.volume` in GraphQL now returns the live current volume via `rb::sound::current(0)` instead of a hardcoded `0` 20 + - `VOLUME_MIN_DB` constant in GPUI corrected from `-74` to `-80` (SDL target range) 21 + - Volume in GPUI loads the live value at startup via `SoundCurrent` gRPC instead of the stale saved setting 22 + - `adjust_volume` now has audible effect on all non-SDL PCM sinks (FIFO, AirPlay, Squeezelite, UPnP, Chromecast, Snapcast TCP) — SW volume scaling (`pcm_copy_buffer`) was not being applied in any of these sinks 23 + 24 + ## [2026.04.28] 25 + 26 + ### Added 27 + - Snapcast TCP PCM sink (`audio_output = "snapcast_tcp"`) — streams S16LE PCM directly to a Snapcast `tcp://` source; compatible with snapserver v0.35+ 28 + - Stream metadata forwarding for Snapcast TCP sink 29 + 30 + ### Fixed 31 + - MPD `getvol` / `setvol` handlers now correctly map the Rockbox dB range (−80..0) to the MPD 0–100 scale 32 + 33 + ## [2026.04.27] 34 + 35 + ### Added 36 + - TypeScript SDK (`@rockbox/sdk`) for controlling rockboxd from Node.js / browser applications 37 + - Playlists UI in the web interface — create, edit, and manage saved and smart playlists 38 + - Album art footer overlay shown on album cover hover 39 + 40 + ### Changed 41 + - Web UI data layer migrated from Apollo Client to TanStack React Query 42 + - Playlist modals rendered into document body via React portal (fixes z-index stacking issues) 43 + 44 + ## [2026.04.26] 45 + 46 + ### Added 47 + - Chromecast PCM sink (`audio_output = "chromecast"`) — streams WAV over HTTP and controls playback via the Cast Media protocol 48 + - UPnP/DLNA support: ContentDirectory media server (`upnp_server_enabled`), MediaRenderer:1 (`upnp_renderer_enabled`), and UPnP PCM sink (`audio_output = "upnp"`) with auto-renderer discovery 49 + - Device picker UI in the GPUI and web mini-player — switch audio output (Rockbox built-in, AirPlay, Squeezelite, Chromecast) without restarting 50 + - Multi-room AirPlay: `airplay_receivers` list in `settings.toml` supports sending to multiple RAOP receivers simultaneously 51 + - Squeezelite multi-room PCM sink (`audio_output = "squeezelite"`) — Slim Protocol TCP server + HTTP PCM broadcast; supports unlimited concurrent squeezelite clients with independent reader cursors 52 + 53 + ### Fixed 54 + - Duplicate Chromecast devices skipped during discovery 55 + - Typesense search index initialised before the HTTP server accepts requests (avoids empty results on cold start) 56 + 57 + ## [2026.04.25] 58 + 59 + ### Added 60 + - Saved playlists: create, rename, delete, and reorder tracks via gRPC, GraphQL, and REST APIs 61 + - Smart playlists: rule-based auto-generated playlists with play-count and skip-count tracking 62 + - Playlist search integration with Typesense 63 + - `StreamLibrary` gRPC server-streaming RPC — pushes library updates to clients when a scan completes 64 + - GPUI file browser: navigate the local filesystem and enqueue directories directly 65 + 66 + ### Fixed 67 + - Now Playing widget in GPUI shows correctly when the app opens with a paused track (initial status fetched once at startup) 68 + - Rocksky registration failures logged at `debug` level instead of `warn` to reduce noise 69 + - Global Play/Pause keybind no longer fires when a text input field has focus