Skip to content

chore(main): release 1.8.0 - #486

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main--components--waveflow
Open

chore(main): release 1.8.0#486
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main--components--waveflow

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

🤖 I have created a release beep boop

1.8.0 (2026-08-19)

Features

  • artist: spotify-style hero backdrop on the artist page (#482) (4b3f120)
  • audio: add audio.dsd_dop setting command + hydration (#495) (98207d8)
  • audio: add DSD-over-PCM (DoP) encoder core module (3d03b43)
  • audio: add wasapi exclusive dop output backend (#495) (81c068e)
  • audio: expose dop toggle, pipeline pill and i18n (#495) (7f98bd5)
  • audio: native DSD via DoP (DSD over PCM) on WASAPI Exclusive (db340d1)
  • audio: native dsd via dop on linux (raw hw: alsa) (#495) (e20aa16)
  • audio: native dsd via dop on macos (coreaudio hog mode) (#495) (8b80c9c)
  • audio: wire dop into the decoder and per-track output switch (#495) (41b17db)
  • canvas: opt-in local cache for plugin Canvases (#473) (70cd206)
  • canvas: opt-in local cache for plugin Canvases (#473) (8ce04be)
  • canvas: per-track looping Canvas behind the now-playing view (#442) (b5a8909)
  • canvas: per-track looping Canvas behind the now-playing view (#442) (f57d162)
  • canvas: waveflow:canvas/v1 world for per-track canvas plugins (#473) (fcdc1e5)
  • canvas: waveflow:canvas/v1 world for per-track Canvas plugins (#473) (de01b35)
  • context-menu: open the track menu from the keyboard everywhere (fc554b3)
  • context-menu: open the track menu from the keyboard everywhere (0fb44c3), closes #436
  • library: deep rescan for the whole library, not just one folder (c4f25ac), closes #457
  • library: grid tab for user playlists (542a0ff), closes #461
  • lyrics: progressive fill on the word being sung (8965f09)
  • lyrics: progressive fill on the word being sung (917b331)
  • maintenance: one-time cleanup of cached album covers for art-having albums (#493) (d9db659)
  • mini-player: volume slider and mute in the cover overlay (850556d)
  • mini-player: volume slider and mute in the cover overlay (45faadb)
  • mpd: serve the MPD protocol so existing clients can drive playback (b250be6)
  • mpd: serve the MPD protocol so existing clients can drive playback (0bae7ad), closes #471
  • now-playing: cover ↔ artist crossfade slideshow (#466) (62b33ed)
  • now-playing: cover ↔ artist crossfade slideshow (#466) (fd90186)
  • player: user-selectable spectrum visualizer colors (#468) (b5ef338)
  • player: user-selectable spectrum visualizer colors (#468) (904b652)
  • plugins: add waveflow:ui/v1 world host surface + redacted library read (#443) (a48cab8)
  • plugins: disclose ui library.read_artists permission in the store (afe2d62)
  • plugins: disclose ui library.read_artists permission in the store (92fada3)
  • plugins: localized manifest descriptions & option labels (a39e1cf), closes #440
  • plugins: publish-safe *_i18n sibling for localized strings (e76b70f), closes #440
  • plugins: render ui-world plugin views + dynamic sidebar (#443 Part 2) (d4c44eb)
  • plugins: render ui-world plugin views + dynamic sidebar (#443 Part 2) (7b8cd27)
  • plugins: support direct download_url in registry entries (c6d4bc7)
  • plugins: support direct download_url in registry entries (cd54eb8)
  • plugins: waveflow:ui/v1 world host surface + redacted library read (#443 Part 1) (5885099)
  • reconciliation: add exact track linking (cc533aa)
  • reconciliation: add exact track linking (d8f6212)
  • reconciliation: add explicit playlist conversion (d96cba2)
  • reconciliation: add explicit playlist conversion (60359d5)
  • reconciliation: copy linked user data explicitly (ec6a190)
  • reconciliation: copy linked user data explicitly (96e8bc8)
  • reconciliation: progress + cancellation and true-schema tests (9baf895)
  • reconciliation: scan progress, cancellation and true-schema tests (63129a7)
  • remote-playback: prefer confirmed local links (5548cea)
  • remote-playback: prefer confirmed local links (97e6d16)
  • remote: 1:1 parity for the remote playlist view (b16deb8)
  • remote: a diagnostics card so the protocol can be watched by a human (f0e78ef)
  • remote: add tracks to a remote playlist via catalogue search (d581ab4)
  • remote: artist photo, hero background and bio by name (9697deb)
  • remote: auto-generate the remote playlist cover from track art (24b343e)
  • remote: bootstrap from a snapshot and walk the journal (faa608d)
  • remote: bounded progress bar for remote tracks (1e1f473)
  • remote: bring remote playlist view to 1:1 with local (d250a08)
  • remote: capture the server's content fingerprint, unread (74f5063)
  • remote: clickable albums with a remote album view (c305351)
  • remote: clickable remote artist + heal stale artist_id cache (90b4c8d)
  • remote: columned track table on the remote playlist view (2034a83)
  • remote: complete the write surface with scrobbles, queue and shares (9b1157e)
  • remote: finish native remote-source integration (aa39ee0)
  • remote: foundations for the remote source and sync v2 (e2d6627)
  • remote: localize the sync_v2 remote surface across all 17 locales (edebaeb)
  • remote: play remote playlists as a native queue (53d4191)
  • remote: queue local changes and push them back as replayable calls (e03756e)
  • remote: read the projection back out for the interface (94bf6fa)
  • remote: remote music source and user-data sync v2 (RFC-005) (3818b3a)
  • remote: remove a track from a remote playlist (544b834)
  • remote: reorder tracks in a remote playlist (5b50b98)
  • remote: scrub remote tracks via HTTP range seeking (3615319)
  • remote: separate the two 409s and express clearing a field (7b62858)
  • remote: server-first lyrics for remote tracks (5b822ed)
  • remote: shares as queued mutations on the v2 endpoints (d321248)
  • remote: show the cover art for a remote track (ba9c470)
  • remote: show the remote play queue in the queue panel (ac10c35)
  • remote: sign in through the browser with authorization code + PKCE (7ce6802)
  • remote: similar artists on the remote artist view + ship sync_v2 (2f76759)
  • remote: stream remote tracks via server stream tickets (3fb3aba)
  • remote: surface the remote source in the sidebar (bbf1130)
  • remote: wake up on the journal socket instead of only polling (e5e65cd)
  • remote: wire user gestures to the queue (f9fdd25)

Bug Fixes

  • album: carry the full track row so Properties isn't half empty (c2515fb), closes #458
  • artist: address review on the hero backdrop (58d8348)
  • artist: clear the read stamp on profile change (da06a78)
  • artist: keep an in-flight read from clobbering an optimistic toggle (4ebc933)
  • artist: reset the hero preference when the profile changes (5ad81f2)
  • artist: scope the hero preference's resolved flag to the profile (d9605ff)
  • audio: drop a sub-stride DSD remainder instead of decoding it (cb430a6)
  • audio: fail the load when the output switch leaves us with nothing (0514647)
  • audio: finish short DSD block reads before decoding them (c2a5531)
  • audio: gate dop strictly to windows / wasapi exclusive (#495) (16118d4)
  • audio: keep the DSD seek offset exact (dd70a23)
  • audio: key the DoP speed pin off speed_dirty, not the value (d83d23c)
  • audio: left-align 24-bit samples in the 32-bit WASAPI container (7e4c842)
  • audio: left-align 24-bit samples in the 32-bit WASAPI container (2192622)
  • audio: left-align the DoP word in the padded WASAPI container (44fe37d)
  • audio: pass the DoP flag on the remote local-first open (c710a84)
  • audio: pin speed and honour A-B repeat on the DoP path (03d8220)
  • audio: rebuild the DoP output when the channel count changes (8f8e8bf)
  • audio: refuse the DoP open when the old physical format is unreadable (ad611bb)
  • audio: report a lost CoreAudio device instead of parking on it (84cf6bd)
  • audio: resolve the ALSA card by name and finish short writes (d6d0879)
  • audio: restore the CoreAudio physical format and watch IsAlive (23ee71f)
  • audio: restore the CoreAudio physical format and watch IsAlive (2c6ce07)
  • audio: restore the PCM output before a remote or URL load (184de8f)
  • audio: stamp the DoP marker from one running counter (0e3d4da)
  • audio: validate Content-Range start byte on a seek 206 (4b4322e)
  • canvas: atomic mp4 publish + profile-scoped Canvas cache (fe909ff)
  • canvas: harden Canvas cache profile isolation + atomic mp4 publish (d07be8f)
  • canvas: re-validate cache-download redirects (SSRF) + doc canvas world (10f904b)
  • canvas: treat an unsafe cache redirect as a hard security failure (8d87e8c)
  • context-menu: drop a dead tab stop and a mislabelled row (db09a80), closes #436
  • db: explain a downgrade instead of dying on the splash (8e6c739)
  • deezer: cross-profile-safe cover prune + preserve hash on skipped download (73b4482)
  • deezer: don't let a cover-less cache row block a re-fetch (#493 review) (94badcf)
  • deezer: only disk-cache an album cover when the album lacks local art (#493) (5281d9d)
  • deezer: only disk-cache an album cover when the album lacks local art (#493) (ea14ec5)
  • deps: force fast-uri >= 3.1.5 and resync the Flatpak sources (e0ee50c)
  • library: one shared lock for every rescan control (bca21df), closes #457
  • library: reach the playlists empty state instead of a missing key (83ea6b2), closes #461
  • library: surface scan failures instead of silently succeeding (0f867fe), closes #457
  • lyrics: carry the fill across speed changes, stop at a full word (23045ab)
  • lyrics: keep the fill responsive to seeks inside the active word (8dfdc5c)
  • lyrics: re-anchor the fill when playback resumes (15de90c)
  • lyrics: reset lyrics context on remote transitions too (9e353e1)
  • lyrics: retry LRCLIB fuzzily before the catch-all providers (b733769), closes #463
  • maintenance: fail the cover prune if the profile list can't be read (1b12cc6)
  • motion-cache: strip trailing-dot hosts in SSRF guard + allow 10 redirects (fff142d)
  • motion-cache: validate the initial url inside cache_mp4 (defence-in-depth) (198ba47)
  • mpd: address CodeRabbit review — protocol conformance + robustness (#471) (35c768d)
  • mpd: consistent snapshots + atomic writes + hardened MPD settings UI (#471) (e654ec0)
  • mpd: reject single oneshot instead of persisting it as durable (#471) (4d0b9fe)
  • mpd: seek-in-place + serialized settings saves + UI options sync (#471) (473837d)
  • now-playing: dedupe artist enrichment + gate slideshow fetch (#466) (1d04cce)
  • now-playing: exclude radio/Spotify tracks from the cover slideshow (#466) (ec41261)
  • now-playing: tag panel artist image by artist id to avoid a stale flash (#466) (c2dc991)
  • player: broadcast repeat, shuffle and like to the other window (c0d4176)
  • player: broadcast repeat, shuffle and like to the other window (d4129e6)
  • player: gate visualizer color cycle until the profile's value loads (858b206)
  • plugin-host: dedup a cause against its parent, not the whole buffer (5a7bff7), closes #452
  • plugin-host: surface the cause chain behind an http error (8546324), closes #452
  • plugins: busy-gate open-url + reject null badge elements (#443) (3a39a0f)
  • plugins: clamp track_count to u32 range before narrowing (#443) (241e46d)
  • plugins: gate artist snapshot on permission + validate descriptor JSON (#443) (12bba19)
  • plugins: harden ui view — separate flow tokens, a11y, text validation (#443) (a00a217)
  • plugins: skip blank entries when resolving a localized string (4784b4a), closes #440
  • plugins: validate download_url + install redirects with the SSRF guard (977635b)
  • plugins: validate ui descriptor tree + loading states + hi grammar (#443) (808fa09)
  • profile: scope profile_setting reads and writes to a profile (f1438f2)
  • reconciliation: address CodeRabbit review (1c022f3)
  • reconciliation: address playlist conversion review (8318ceb)
  • reconciliation: arbitrate the phase on the empty-remote early return (acf3098)
  • reconciliation: block unavailable local conversions (a77d686)
  • reconciliation: block unavailable playlist tracks (330040d)
  • reconciliation: close scan cancel races and listener leak (be655f2)
  • reconciliation: make cancel-vs-commit an atomic phase transition (2cb5437)
  • reconciliation: revalidate playlist link proofs (42d6a83)
  • reconciliation: roll back reconcile on a cancel during commit phase (eebdbae)
  • reconciliation: signal already-running scans and cover cancellation (07bc8c5)
  • reconciliation: verify playlist snapshot before commit (e2055dd)
  • release: unbundle libwayland-client from the AppImage (807428b)
  • release: unbundle libwayland-client from the AppImage (d368e42)
  • remote-playback: resume local source after device changes (a1066ee)
  • remote-ui: artwork cache, stale-pass guards, availability hardening (689b758)
  • remote-ui: bound the artwork cache, reset cover on hash change (7a23585)
  • remote-ui: update remote artwork before paint (5b40b36)
  • remote: address CodeRabbit review — correctness batch 1 (51cf286)
  • remote: address deferred CodeRabbit findings from #502 (6221b99)
  • remote: annotate RemoteClient lifetime in stream.rs (41ce018)
  • remote: back off on socket sync failure, not on a profile switch (ab71fa0)
  • remote: correct counter labels in ar, ja and zh-TW (63249aa)
  • remote: distinguish remote playback from web radio (c74e3d7)
  • remote: end the socket session when a catch-up fails (0f541ad)
  • remote: give the account-switch test its NOT NULL cached_at (d649c4a)
  • remote: idempotent placeholder resolve, FIFO-safe unreadable rows (b84ac59)
  • remote: ignore stray callbacks, bound the cached-id lookup (1900322)
  • remote: pin client+pool to one profile, share the rotated token (32ab652)
  • remote: pluralize remote counters and fix flagged translations (56e4be3)
  • remote: profile-aware socket catch-up, case-insensitive range unit (096ca33)
  • remote: refresh-and-replay on 401, harden the refresh path (248a46e)
  • remote: review batch 1b — clear-after-swap, lyrics fallback (6c3b789)
  • remote: server lyrics synced only when all lines are timestamped (2b09347)
  • remote: show remote track cover in the player bar (8dc4341)
  • remote: socket idle timeout + coalescing, sync/auth robustness (6d01d24)
  • remote: stricter Content-Range, socket profile pin + cap check (faa498f)
  • remote: strip only the loop newline from server lyrics (c42bf74)
  • scan-toast: a scan that hit errors no longer reads as a success (7b9d39f), closes #457
  • settings: locale-aware MB formatting in the cover-prune status (e748c11)
  • settings: tidy the cover-prune status timer + announce it to a11y (848add8)
  • stats: local artist images, ragged KPI row, clipped hour labels (e6d1000), closes #453
  • ui: drop inert DSP badges on DoP and harden the toggle (f203eb4)
  • ui: replay liked changes that land during a reload (f547d0f)
  • ui: scope the queued DoP write to the profile that made it (2fd7f9d)
  • ui: subscribe to liked changes before snapshotting the set (eed3254)
  • web-radio: let a 429 fall through to the next host (cb8a31c), closes #452
  • web-radio: try the round-robin host, and retry, before failing (4a20483), closes #452
  • wrapped: give each banner key its own broadcast channel (c74eb48)
  • wrapped: withhold the banner until both keys have been read (c83ebb7)

Performance Improvements

  • remote-ui: virtualize the remote playlist and queue lists (0b26205)

This PR was generated with Release Please. See documentation.

@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch 4 times, most recently from 5ec0476 to 97c63aa Compare August 9, 2026 01:52
@InstaZDLL InstaZDLL self-assigned this Aug 9, 2026
@InstaZDLL InstaZDLL added this to the v1.8.0 milestone Aug 9, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch from 97c63aa to 711f476 Compare August 10, 2026 10:15
@ABDALLAH9877

Copy link
Copy Markdown

may i ask when the next update will be added becouse im so exited for animated lyrics or word by word lyrics

@InstaZDLL

Copy link
Copy Markdown
Owner

may i ask when the next update will be added becouse im so exited for animated lyrics or word by word lyrics

Thanks, glad you're excited! 🎶 Word-by-word animated lyrics are landing in v1.8.0, which I'm targeting for around the end of next week (no hard promise, I'd rather ship it right). I'll post here the moment it's out! 🙌

@InstaZDLL InstaZDLL added scope: backend Rust/Tauri backend (src-tauri/) scope: deps Dependencies scope: docs Docs, README, assets type: chore Maintenance / tooling size: m 50-200 lines labels Aug 15, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch 15 times, most recently from 63f4288 to b4b5f42 Compare August 19, 2026 07:44
@github-actions
github-actions Bot force-pushed the release-please--branches--main--components--waveflow branch from b4b5f42 to 980863c Compare August 19, 2026 18:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment