Repository navigation
Releases
v2.1.0
What's Changed
- fix(linux): prevent AppImage crash on modern glibc and resolve WebKit injected bundle warning by @Abhinav-Abster in #116
- feat(lyrics): zero-allocation GPU canvas engine & spatial duet layout overhaul by @ajisth69 in #115
- perf: cover-art caching, idle frame scheduling, lyrics compositing and motion-art decode by @ajisth69 in #119
New Contributors
- @Abhinav-Abster made their first contribution in #116
Full Changelog: v2.0.1...v2.1.0
v2.0.1
Fixed
- Canvas: the album cover no longer shows through a playing Canvas video.
The cover now fades out as the Canvas starts, and the video plays on a
solid background. The cover still shows while a Canvas loads and on
tracks that don't have one.
Full Changelog: v2.0.0...v2.0.1
v2.0.0
What's Changed
Playback and audio
- AutoMix: beat-aware mixing that analyses the audio, beat-matches and phase-locks the decks.
- Sound: loudness modes, headphone curves, a data saver tier, and an equalizer with pre-amp and presets.
New features
- Jam: listen-together rooms with lastwave:// invite links, always-on rooms, co-hosts and a shared queue.
- Spotify: integration with a 9:16 Canvas side panel.
- Podcasts with rails and search, local music folders, Mix Lab, and playlist import from CSV, M3U or text files.
- Two-way YouTube library sync, a YouTube-faithful Home feed, and sessions that stay signed in across updates.
- Friends: search users, add friends, and richer profiles.
- Backup: export and import of playlists and settings.
- Downloads: folder layouts and reorganizing existing files.
- Lyrics: a share card, line selection and translation.
- Caching: a new cache system that improves app performance and load times.
- Other: an in-app update checker and installer, accessibility labels, mouse back and forward buttons, and a diagnostics export.
UI
- Apple Music-style ambient Now Playing.
- Now Playing edge-to-edge mode and F11 fullscreen with a compact dock.
- A custom theme from any colour.
- A new Stats page, a Browse Categories genre page, a docked queue, and settings search.
v1.5.0
What's changed
-
10-Band Equalizer: A full graphic EQ with presets and the Studio Master Clarity DSP filters ported from LastWave Native — interactive vertical bands, acoustic and stage clarity targets, instant preset switching and a "Custom" fallback when a stored preset is no longer shipped.
-
Custom Crossfade: Pick a 3–12s perceptual crossfade; the engine pre-resolves the incoming lossless stream early and guards WASAPI Exclusive against overlapping mpv clients, so tracks blend instead of colliding.
-
Floating Mini Player: The mini player is a real window now — it detaches into a 380px always-on-top strip at the bottom-right of where the main window sat, remembers its last position, and restores your size, position and maximised state on the way back.
-
Now Playing & Lyrics: The media pane stops scrolling and scales its artwork to fit, metadata gets a clearer hierarchy with unified badges, the page paints its own stage so leaving it fades the whole screen instead of dropping the backdrop in one frame, and lyric lines fade behind a gradient mask instead of clipping hard-edged — with a static lyrics view and tighter line-by-line sync.
-
Tougher Playback: Fixed the audio races that could freeze playback, capped DASH assembly memory spikes, gave the local media server an auth token, and stopped WASAPI hot-plug property storms from stuttering audio — probe results are cached and only identity changes reach Dart.
-
Sign-In That Doesn't Lie: Cookie capture only persists a complete jar (baseline-change or identical-twice, domain-precedence merge, Google block-page and chrome-error detection), a session keeper re-mints rotated cookies in the cached window, WebView data folders are absolute so no more blank windows, and failures name the real cause with one-click "Connect with cookies".
-
One Accent, Resolved Once: Accent selection now lives in a single provider — custom pick, LastWave neutral, OS accent (Windows registry, macOS, KDE, GNOME probed in desktop order) or a tint from the current cover — and every source that can't answer falls back to your pick. All washes, rings and glyphs read from it, so nothing is stuck white or danger-red on a non-red theme, and Settings → Appearance prints the resolved swatch and where it came from.
-
A Real Design Ladder: One monotonic radius scale (tiny 6 → controls 10 → artwork 12 → menu 14 → floating 20 → hero 24) replaces ad-hoc corners, the meta text tier goes from 2.9:1 to 4.7:1 contrast, and the pearl theme gets actual depth: alpha dividers that read on either surface, light-mode shadows at a third of the dark strength, and menu hairlines.
-
Controls That Behave: In-house
WaveSelect,WaveMenuRowandWaveMenuButtonreplace plugin controls with baked 4px corners, text fields take the control corner instead of Fluent's hardcoded square,WaveRailkeeps the hover lift and shadow from being sheared off a carousel's top edge, Fluent's push buttons and every tappable card finally show a pointer cursor, and presses dip through one sharedWavePressable. -
Materials You Can Trust: The Solid / Haze setting now outranks a surface's blur request instead of being overridden by it, the expanded rail frosts the page it covers (with the correct L1 fill rather than a near-opaque slab), and the two experimental switches do real work — extra translucency widens every glass filter, and the wavy seekbar paints a sine you can still tap and drag.
-
Motion With Intent: The shell moves between destinations instead of cutting, detail pages grow out of the card you pressed, and a pressed cover flies into the detail header (no
Herotag collisions when the same album appears twice on a page). Entrances stop replaying after their cascade, and OS reduce-motion is honoured everywhere — entrances, hover washes, press dips, lyric fades, playing bars and keyboard scrolling. -
Home & Shelves: YouTube shelves get an action and a page of their own — See all opens the whole shelf at
/ytshelf/:titlewith Play all, shelf caps are honest about what's on screen, the hero lights from its cover with a halo that spills past the panel, and the 60px rail drops captions it could never fit. -
Detail Pages That Fill In: Collection heroes gain an artwork-tinted ambient band, album and artist pages draw their real header (title, portrait, skeleton rows, reserved transport row) while the browse is still in flight, artist covers relax from circle to rounded square on hover, and one accent Play pill plus one outline Radio pill replace the hardcoded white chips.
-
Dock & Output: Output path and device picker fold into one speakers control — endpoints on top, bit-perfect detail and the blocking reason under a separator, accent-tinted when perfect, same list in the narrow-width More menu — while the timeline reads
--:--instead of 0:00 for an unknown length and the volume knob stays visible at any non-zero level. -
Platform Fixes: AppImage detects legacy OpenGL (<3.0) and falls back to software rendering, with explicit
--no-enable-impeller/--enable-software-renderingflags (Windows and Linux both honour them); macOS draws its own traffic lights instead of a second custom trio; the window chrome reads its colours from tokens so first paint can't flash navy. -
Behaviour Change: Closing the window now quits and stops audio by default — close-to-tray is opt-in in Settings.
-
Small Touches: "Clear" wears the accent instead of danger red, search tiles lift further on hover, the dock's output glyph no longer duplicates the EQ glyph, download rows share the standard 8px inset and hover wash, "Add to playlist" ends in "New playlist…" so an empty library isn't a dead end (the queue picker gets the same row), and both experimental toggles rebuild the app live.
What's Changed
- fix: resolve stream availability, blank login, playback freezing, WASAPI slowdown, and Linux OpenGL crash by @YadneshTeli in #62
- feat: 10-band equalizer, customizable crossfade, movable miniplayer, and static lyrics view by @ajisth69 in #63
- fix(now-playing): remove media pane scrolling and refine metadata design by @ajisth69 in #64
- Fix playback race conditions, optimize DASH memory, and secure local media server by @Umangnamdeo in #65
New Contributors
- @YadneshTeli made their first contribution in #62
Full Changelog: v1.3.0...v1.5.0
What's Changed
- fix: resolve stream availability, blank login, playback freezing, WASAPI slowdown, and Linux OpenGL crash by @YadneshTeli in #62
- feat: 10-band equalizer, customizable crossfade, movable miniplayer, and static lyrics view by @ajisth69 in #63
- fix(now-playing): remove media pane scrolling and refine metadata design by @ajisth69 in #64
- Fix playback race conditions, optimize DASH memory, and secure local media server by @Umangnamdeo in #65
New Contributors
- @YadneshTeli made their first contribution in #62
Full Changelog: v1.3.0...v1.5.0
What's Changed
- fix: resolve stream availability, blank login, playback freezing, WASAPI slowdown, and Linux OpenGL crash by @YadneshTeli in #62
- feat: 10-band equalizer, customizable crossfade, movable miniplayer, and static lyrics view by @ajisth69 in #63
- fix(now-playing): remove media pane scrolling and refine metadata design by @ajisth69 in #64
- Fix playback race conditions, optimize DASH memory, and secure local media server by @Umangnamdeo in #65
New Contributors
- @YadneshTeli made their first contribution in #62
Full Changelog: v1.3.0...v1.5.0
What's Changed
- fix: resolve stream availability, blank login, playback freezing, WASAPI slowdown, and Linux OpenGL crash by @YadneshTeli in #62
- feat: 10-band equalizer, customizable crossfade, movable miniplayer, and static lyrics view by @ajisth69 in #63
- fix(now-playing): remove media pane scrolling and refine metadata design by @ajisth69 in #64
- Fix playback race conditions, optimize DASH memory, and secure local media server by @Umangnamdeo in #65
New Contributors
- @YadneshTeli made their first contribution in #62
Full Changelog: v1.3.0...v1.5.0
What's Changed
- fix: resolve stream availability, blank login, playback freezing, WASAPI slowdown, and Linux OpenGL crash by @YadneshTeli in #62
- feat: 10-band equalizer, customizable crossfade, movable miniplayer, and static lyrics view by @ajisth69 in #63
- fix(now-playing): remove media pane scrolling and refine metadata design by @ajisth69 in https://github....
v1.3.0
What's Changed
- 17 Lyrics Providers Suite (Parity with LastWave-Native): Upgraded from 5 to 17 synchronized lyrics sources racing concurrently — LastWave Karaoke, Kugou (KRC), LRC.red, Apple Music, BetterLyrics, QQ Karaoke (Portato), Syllable-Sync (Bini), Video-Match (SimpMusic), Catalog (Musixmatch), LRCLIB, LyricsPlus, Unison, YouTube Captions, YouTube Music, Megalobiz, and Genius. Features word-first priority, provider preferences in Settings, and instant source-switching with retry right from the Now Playing panel.
-
Dolby Atmos Streaming & Downloads: Added native support for quality tier 28 (ATMOS), Atmos badges in the player dock and track cards, stream waterfall step-down, and tagged Atmos
.m4adownloads. -
Global Live Telemetry: Anonymous real-time playback ticks to the global LastWave map (
telemetry.clashprojects.qd.je) on track start and periodic heartbeats, with metadata cleaning (- Topic, VEVO), an opt-out toggle, and "Open Live Map" in Settings. - YouTube Music Cookie Login & Liked Songs Sync: Added cookie-based authentication supporting raw headers, Netscape TSV, and JSON formats. Likes and unlikes now sync directly to your YouTube Music account, with automatic SQLite deduplication of liked songs playlists.
-
144Hz Bare-Metal Compositor & Engine Speed: Silky-smooth 144Hz mouse-wheel interpolation and trackpad physics, instant cold boot by deferring
libmpvinitialization past the first frame, DPR-aware artwork decode bucketing with bounded memory ceilings, and seamless tab switching viaStatefulShellRoute.indexedStack. - Low-Power Background Idle: When minimized or hidden, karaoke tickers mute, motion-art decoders pause, and presence narrows — eliminating background CPU consumption.
-
Smarter Diacritic & Multi-Artist Matching: Tracks match across accents and diacritics (e.g., Beyoncé
$\leftrightarrow$ Beyonce, Björk$\leftrightarrow$ Bjork), collaboration conjunctions (&,x,,,feat.,ft.), and apostrophe variations, preventing mismatches and missed lyrics. - Discord Rich Presence & AMOLED Theme: New music-card layout with brand badge and clean presence teardown on stop, alongside pure black AMOLED contrast improvements across UI components.
v1.2.0
What's changed
- Many New Lyrics Providers: Five new sources race to find your lyrics — BetterLyrics word-sync, Lrc.Red, Kugou KRC word-sync, Musixmatch line-sync and SimpMusic video-matched — with word-first racing, a preferred-provider picker (Auto by default) and a source switcher with retry right from Now Playing.
- Smarter Lyrics Matching: Strict version-aware matching so "Song" never steals the lyrics of "Song (Interlude)", enhanced-LRC word stamps, timed lines always beating static text, plus fixed line-by-line sync, active scroll tracking and refetch-after-miss.
- Cooler & Lighter: Background work now gates on minimized/hidden instead of focus — motion-art decode pauses, karaoke tickers mute and Discord presence narrows when the window is out of sight — and lyrics scrolling no longer burns CPU.
- Playlist Link Import: Paste a Spotify, Apple Music or YouTube playlist link and get a preview plus one-tap local import — no API keys needed, with short-link support, friendly errors and sensible caps.
- Tougher Playback: Survives sync throws in hot callbacks, hardened shuffle indices, fatal-error breadcrumbs for diagnostics, mpv cache pinned to its own dir and a 120s deadline bounding prefetch assembly.
- Linux Packaging Fixes: Global hotkeys now work on distros missing keybinder (bundled in AppImage, declared in deb/rpm), and the AppImage no longer crashes off-Ubuntu — WebKit helpers and TLS modules ship inside with a patched helper path.
- Small Touches: Windows SMTC now shows the real app name and icon
v1.1.1
What's Changed
• Right Song, Every Time: Sometimes a remix or slowed version played instead of the original you picked. The player now sticks to the exact recording you asked for, and hands off cleanly when it can't.
• Japanese Tracks Get Lossless: Songs billed in kana + romaji (like よあけのうた) were stuck on low-quality audio while Android played them in full quality. They now resolve to lossless like everything else.
• Smarter Matching: The player is now much pickier about telling originals apart from remixes, live cuts, slowed edits and covers, across both lossless and YouTube sources. Old bad matches clear themselves automatically.
• Real FLAC Downloads: Some lossless downloads were saved with the wrong extension. They now save as proper tagged .flac files.
v1.1.0
What's Changed
✨ New features
- YouTube Music home feed — home shelves (songs, artists, albums, playlists, mixes) now actually load from YTM instead of a dead section (#26)
- YT-only feed fallback + honest empty states — feed builds from YT liked/history/charts when Last.fm is unconfigured or failing; empty Home reports the real cause instead of always blaming offline (#23, #18)
- Windows media keys support — hardware play/pause/next/previous now drive the player
- Linux MPRIS support — now-playing metadata, status, and transport exposed on org.mpris.MediaPlayer2, so status bars, playerctl, and media keys work (#28)
⚡ Performance
- Static ambient background + half-res aura and blur-free glass on Now Playing — major raster-cost reduction
- Faster cold starts via addon search parallelization
- Throttled lyrics clock/position churn; cheaper motion art and tile state
🐛 Fixes
- macOS: YouTube sign-in WebView sent a bare Safari UA and got the "not optimized for your browser" page — now sends a Chrome UA suffix
- macOS: false "no internet" state fixed (#19)
- Windows: YT WebView login getting stuck + blank username fixed (#32)
- Linux: single reused hidden BotGuard WebView — no more per-song popup/taskbar flash/9s stall, and no destroy segfault
- Track resolution now matches Android (tier-aware search + ranked fallback)
- Global in-app shortcuts work regardless of focus
- Reliable progressive DASH serving
- Unmuting restores pre-mute volume; like button updates on state change
v1.0.0
LastWave Desktop v1.0.0 — first release 🎉
A Fluent-design desktop music player: YouTube Music streaming, lossless audio,
Last.fm scrobbling, Apple-Music-style synced lyrics, and a personal feed that
works with or without an account.

Highlights
- Guest mode — skip Last.fm entirely; browse, stream, download, and get
recommendations. Connecting later is Settings-only. - Last.fm BYOK — bring your own API key + secret (no bundled keys);
validated before saving, web-auth connect on welcome and in Settings. - Local taste engine — keyless guests get real personalization from
on-device signals (play log, liked songs, downloads): Heavy Rotation,
Jump Back In, discovery, personal mix, and Mix Lab all work offline-first. - Lossless-first playback — addon/Qobuz-style FLAC up to 24/192 with
YouTube fallback, WASAPI exclusive + bit-perfect status on Windows,
ALSA path in progress on Linux. - Synced lyrics — LRCLIB + Apple word-by-word karaoke with per-track offset.
- Animated album art on Now Playing (fixed on Linux), official studio
covers, YTM thumbnail fallback so cards never show initials. - Desktop-native — close-to-tray, global hotkeys, Mica/haze materials
(solid mode keeps full lyric contrast), Discord Rich Presence on
Windows and Linux, downloads with .lrc sidecars.
Known limitations
- Bit-perfect output is Windows-only for now (WASAPI exclusive); Linux always
reports Shared mode honestly. - macOS build is unsigned;