1.4.0 (2026-05-28)
β¨ What's new in v1.4.0
WaveFlow 1.4.0 is the foundations & polish release β under the hood it lays the groundwork for the upcoming waveflow-server, on the surface it cleans up the rough edges you've been reporting against 1.3.0. No flashy new view this time, but the app is steadier, more correct, and Flathub-ready.
π§± Architecture β waveflow-core workspace extraction (RFC-001 Phase 1.a)
The Rust backend split into a Cargo workspace with two crates:
- waveflow-core β portable business logic (domain types, repository traits + SQLite implementations, scanner helpers, smart-playlist engine, audio analysis, DSD format conversion, HTTP clients for Deezer / Last.fm / LRCLIB, artwork pipeline). Zero Tauri, zero cpal β designed to be reusable from the future waveflow-server.
- waveflow β the Tauri 2 desktop app. Keeps the #[tauri::command] handlers, the real-time cpal + rtrb audio engine, the DLNA / OS media-controls / Discord RPC integrations, the watcher, tray, profile pool wiring.
End-users won't notice anything different β the desktop app behaves identically. What changes is the future shape of the project: 1.5.0 will start hooking waveflow-server on top of the same waveflow-core crate so the desktop app and a future browser / mobile client can share scanning, repositories, and metadata enrichment without rewriting them.
ποΈ Equalizer β popup β Settings stay in sync (#166)
The player-bar EQ popover and the Settings β Playback EQ card now share live state through a new player:eq broadcast. Toggling the master switch, changing presets or nudging a band from either surface updates the other instantly β no more "popup says EQ is on, Settings says off". The popup bypass thumb also lands flush-left when OFF and flush-right when ON instead of looking drifted on Windows. As a bonus, picking an unknown preset key now surfaces an actual error instead of silently no-op'ing.
π€ Lyrics editor β footer always reachable (#172)
The Save / Cancel bar at the bottom of the lyrics editor could be pushed off-screen on 1920Γ1080 displays with Windows scaling at 125% or higher. The modal now sizes itself like the onboarding wizard (calc(100vh - 2rem) + flex-1 body), so the action bar stays pinned at any zoom level.
π Library β "No cover" filter removed (#170)
The albums-tab "No cover" checkbox was ambiguous enough that several users read it as "hide no-cover albums" and concluded their artwork had vanished. The legitimate use case (find missing covers to backfill) is already covered by RΓ©cupΓ©rer toutes les pochettes manquantes and the per-album cover picker, so the filter is gone for good β one less footgun.
π¨ Theming β topbar toggle preserves your family
Picking Lavender Light and then clicking the sun/moon toggle now switches to Lavender (dark) instead of resetting to the global Γmeraude default β and vice-versa for every paired preset (Midnight, Sunset, Lavender, Crimson, Ocean). Themes without a counterpart (OLED, Neon) keep falling back to the global default swap so the toggle still does something sensible.
π¦ Packaging β Flathub manifest (#164)
A Flatpak manifest landed in tree, ready for submission to Flathub. The build uses the no-default-features path (no in-app updater, since Flatpak owns updates), and the script permissions in the bundle are now correctly non-executable per Flathub's review checklist.
π©Ή Quality pass
- Theme-pair fix and EQ broadcast cover the visible regressions from 1.3.0 that you reported.
- Phase 1.a went through four rounds of CodeRabbit review before merge β dozens of edge cases caught and fixed (Windows path canonicalisation in playlists, DSD bit-depth ranking in browse SQL, transactional cleanup on profile init failure, file hash recomputation propagation, β¦).
- release-please config updated to the post-workspace-split manifest paths so future minor bumps land in one shot without manual catch-up.
- TypeScript-ESLint upgraded to the latest stable.
π¦ Recommended install
Use your distro's package manager so updates flow through the same tool you already use for the rest of your system.
Windows
winget install InstaZDLL.WaveFlow
Arch / Manjaro / EndeavourOS / CachyOS
yay -S waveflow-bin
or: paru -S waveflow-bin
Fedora / RHEL / Rocky / Alma / CentOS Stream
sudo dnf copr enable instazdll/waveflow
sudo dnf install waveflow
Debian / Ubuntu / Mint / Pop!_OS
The Debian package is wave-flow (kebab-case, required by the Debian naming spec β Tauri bundles it that way from the WaveFlow product name).
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://packages.buildkite.com/instazdll/waveflow/gpgkey
| sudo gpg --dearmor -o /etc/apt/keyrings/waveflow.gpg
echo "deb [signed-by=/etc/apt/keyrings/waveflow.gpg] https://packages.buildkite.com/instazdll/waveflow/any/ any main"
| sudo tee /etc/apt/sources.list.d/waveflow.list
sudo apt update && sudo apt install wave-flow
macOS
No package manager yet β grab the .dmg from the assets below. The bundle is not Apple-Developer-signed; right-click β Open the first time, or run xattr -cr /Applications/WaveFlow.app to clear the quarantine flag.
Standalone download
Everything is also available as a raw bundle in the assets below β .AppImage, .deb, .rpm, .exe, .msi, .dmg for users who'd rather skip the repo.
β οΈ Build in progress β the desktop bundles (.AppImage, .deb, .rpm, .exe, .msi, .dmg) and the signed updater manifest are still being produced by the release workflow (~15β20 min total). Track progress on actions/runs/26607029021. The package-manager install commands above will start working once the downstream packagers (winget, AUR, Copr, apt) finish their own pipelines β usually within the hour after this build turns green.