Releases: Kopuz-org/kopuz
Release list
v0.11.0
This release is about presentation and personalization: fullscreen and theming get a top-to-bottom rework, the radio page is rebuilt around real station search with live now-playing, and the app is now yours to reshape with custom fonts, cover-art backgrounds, and a 10-band EQ.
Highlights
Fullscreen and theming rework. Fullscreen can now drive playback from the bottom bar itself (a setting), and in that mode the bar sheds its redundant cover, title, and expand controls. Fullscreen artwork finally uses the whole space instead of grey letterbox strips, and a new cover-art background option paints the current cover behind the entire app on any theme, with darkening and blur sliders to tune the look. Bright covers no longer wash out text (the extracted palette is luminance-capped), the local-track album-art gradient bug is fixed (with tests), and there's a toggle to hide the small thumbnails in track and queue rows (#544).
Radio overhaul. The radio page is rebuilt around the radio-browser.info API: search across thousands of stations with runtime mirror discovery, proper loading and polling, and a redesigned layout. Now-playing is seeded from the stream itself via ICY StreamTitle metadata (and cover updates) for stations without a REST/WebSocket source, .pls/.m3u/.m3u8 URLs are resolved to their first stream, and browser stations can be pinned to your Selected list, all backwards-compatible with existing stations (#541).
Make it yours. A font picker lets you apply any ttf/otf/woff/woff2 as the app font, injected at runtime and overriding the default JetBrains Mono stack (#545). The equalizer expands from its previous set to a full 10 bands, with a migration to carry existing settings forward (#417).
Features
- Quick search (Cmd/Ctrl+K), foobar2000-style: type, hit enter, the song plays. The queue is seeded from the whole library so shuffle doesn't get stuck inside your search results (#544).
- Helium added as a browser sign-in option for YouTube Music and SoundCloud (#542).
- New Swedish locale for the UI (#537).
- A sync button and paused auto-scroll: the lyrics view stops auto-following once you scroll by hand.
Fixes
- sources: media server reachability is now verified instead of assumed connected, so a settings connection reflects reality.
What's Changed
- feat: add Swedish locale by @ryurt46 in #537
- various: add Helium browser for browser sign-in by @temidaradev in #542
- various: radio-browser.info search, ICY now-playing, playlist resolution by @Servus-Altissimi in #541
- various: expand the EQ to 10 bands by @FormalSnake in #417
- various: fullscreen rework, cover art backgrounds, quick search, hig pass by @temidaradev in #544
- various: custom UI font support by @temidaradev in #545
New Contributors
Full Changelog: v0.10.0...v0.11.0
v0.10.0
This release is about the audio path and offline resilience: the player engine is rewritten as a single-owner actor, scrobbles now queue when you're offline and flush when connectivity returns, and multi-priority sorting lands across the library, artist, and album views.
Highlights
Player engine rewrite. The player is re-architected as a single-owner actor with a dedicated worker/sink split and its own runtime, replacing the old sprawling player.rs (#504). Source stream preparation is centralized into one path so every backend feeds the engine the same way (#500), and a new output sample rate mode lets you control the device rate from settings (#523). The rewrite ships with an extensive engine test suite.
Offline scrobbling. A scrobble that fails with a transient error (no response or a 5xx) is now persisted to a scrobble_queue table and resubmitted later with its original listen timestamp, across Last.fm, Libre.fm, and ListenBrainz. Permanent failures (4xx, e.g. bad credentials) are never queued, and one listen owed to several services is delivered independently so a single failing service never blocks the others (#511).
Multi-priority sorting. Album, library, and artist views gain configurable multi-key sorting, so you can order by several fields at once instead of a single column (#510, #522).
Features
- Reconnect Discord Rich Presence when Discord starts late or restarts, instead of giving up on the first failed connection (#507).
- Seek from the macOS now-playing widget / Control Center (#525).
- Seek, shuffle and loop from the MPRIS (#504)
- Output sample rate mode in settings for controlling the device output rate (#523).
- Multi-priority sorting extended from albums to the library and artist views (#510, #522).
- High-quality cover artwork requested for the home hero banner.
- Playlist back button now returns to the playlist page.
- Workspace and other dependency bumps (#520).
Fixes
- server: don't split the Windows browser path on spaces during cookie import (fixes #513) (#521).
- covers: fix YouTube Music artist thumbnails. Stop singles from dominating artist covers, split multi-artist names to the primary artist, and add a re-fetch mechanism for artist pictures (addresses #314) (#498).
- sync: remote favorites now work correctly on remote sources (#529).
What's Changed
- various: reconnect Discord presence when Discord starts late or restarts by @temidaradev in #507
- various: add offline scrobbling support by @temidaradev in #511
- player: centralize source stream preparation by @NotAShelf in #500
- player: player engine rewrite as a single-owner actor by @UMCEKO in #504
- various: add multi-priority sorting to the album view by @temidaradev in #510
- various: bump workspace dependencies by @temidaradev in #520
- various: extend multi-priority sorting to library, artists... by @temidaradev in #522
- various: add output sample rate mode by @temidaradev in #523
- various: support seeking from the macOS now playing widget by @temidaradev in #525
- server/cookies: never split a browser path on spaces (fixes #513) by @UMCEKO in #521
- fix: replace text for "radio" and "discover" in arabic by @holiday-in-cambodia in #528
- fix(covers): fix/yt artist thumbnails by @UMCEKO in #498
- fix: remote favorites sync by @UMCEKO in #529
New Contributors
- @holiday-in-cambodia made their first contribution in #528
Full Changelog: v0.9.0...v0.10.0
v0.9.0
This release is about making the flaky parts reliable: YouTube Music playback moves to a native botguard, ListenBrainz scrobbling gets retries and accuracy work, and the UI stops stuttering on large libraries now that data queries run off the UI thread.
Highlights
Native botguard. The webview pot minter and wry stream decryption are replaced with an embedded Deno runtime. Botguard now runs the same way on every OS, which resolves a whole class of YouTube Music playback issues (#386, #477, #489).
More reliable scrobbling. ListenBrainz submissions retry on 429/5xx/timeout with backoff, stale playing_now updates are no longer retried, MusicBrainz matching is more accurate, and scrobble tasks survive page navigation instead of getting dropped. Detailed logging makes scrobble outcomes traceable.
Smoother UI on big libraries. sqlx row decoding, InnerTube JSON parsing, and other data-query work moved off the UI thread, the playlist query was de-N+1'd, and the showcase memoizes track clone/sort out of the scroll path. Large queries no longer stall scrolling.
Features
- Settings sections are grouped into bordered section cards with labeled headers; Connectivity moved out of General.
- Flatpak browser support for cookie sign-in, with
KOPUZ_BROWSER_FLATPAK_IDandKOPUZ_BROWSER_COMMANDoverrides for other browsers and install methods. - Clear image cache and force rescan buttons for local covers, so you don't have to dig through the file manager.
- Opt-in UI render profiler via
KOPUZ_UI_PROFILE. - Dropped the wasm32/web build target.
- Contributor onboarding: pull request template, commit message guidelines enforced in CI, and an agent development guide.
Fixes
- server: don't split the Windows browser path on spaces during cookie import.
- scrobble: keep scrobble tasks alive across page navigation.
- scrobble: stop retrying stale ListenBrainz
playing_nowsubmissions. - images: prevent overlapping cover re-extraction jobs.
- kopuz: drop launcher self-registration on launch.
What's Changed
- feat: add clear cache and force rescan images(local) by @temidaradev in #479
- meta: improve contributor onboarding and contribution QA by @NotAShelf in #485
- feat: flatpak browser support by @yofukashino in #480
- treewide: drop the wasm32/web build target by @temidaradev in #488
- kopuz: add opt-in UI render profiler via
KOPUZ_UI_PROFILEby @NotAShelf in #490 - components/showcase: memoize track clone/sort off the scroll path by @NotAShelf in #491
- scrobble/musicbrainz: retry ListenBrainz submits on 429/5xx/timeout by @temidaradev in #492
- various: detailed scrobble logging and accuracy for MusicBrainz by @temidaradev in #493
- Add AGENTS.md agent dev guide by @UMCEKO in #465
- treewide: move data-query CPU off the UI thread by @UMCEKO in #494
- various: group settings sections into bordered section cards by @temidaradev in #497
- Implement native botguard by @UMCEKO in #501
- server/cookies: don't split the Windows browser path on spaces by @UMCEKO in #502
New Contributors
- @yofukashino made their first contribution in #480
Full Changelog: v0.8.2...v0.9.0
v0.8.2
Quick fix for cargo install kopuz users, discord RPC source visibility option and a little fix for hero image song name.
Use cargo install --locked kopuz please.
What's Changed
- docs: document scoped commit conventions in contributing document by @NotAShelf in #476
- various: show media source in Discord presence with optional toggle by @temidaradev in #478
- fix: handle long song titles correctly by @uhidontkno in #482
New Contributors
- @uhidontkno made their first contribution in #482
Full Changelog: v0.8.1...v0.8.2
v0.8.1
Bug fixes for navigation back button made.
What's Changed
New Contributors
Full Changelog: v0.8.0...v0.8.1
v0.8.0
This release is mostly cleanup and refactor work: a big code split across server, utils, sources, and the playback controller, native Windows cookie decryption for sign-in, assets baked into the binary, and a bunch of new translations.
Highlights
Native Windows cookie decryption. YouTube Music and SoundCloud sign-in now read browser cookies natively on Windows instead of going through the rookie crate (which is now off on Windows). Sign-in works without the third-party cookie reader.
Assets are baked into the binary. CSS, fonts, and the favicon now ship inside the kopuz binary, so it doesn't need any external files at runtime.
Big refactor. Server and utils are split up, the source model, page runtimes, backend modules, and playback controller are all broken out, and audio init, playback parsing, and config views got reworked. Dependencies are deduplicated through a virtual manifest to get ready for publishing on crates.io.
Features
- yt-music showcase refactor.
- Focus indicators on interactive elements that didn't have them.
- Matroska audio content-types now map to the
mkadecode hint. - CSS, fonts, and favicon embedded into the binary.
- Dropped panicky
.unwrap()calls, added crate docs, and movedeprintln!over totracing. - Deduplicated shared deps via a virtual manifest to prep for publish.
- Added contributing guidelines.
- New locales: Dutch, Malayalam, Tamil, Filipino, and European Portuguese (pt-PT), plus an updated Indonesian one.
Fixes
- ytdlp: give yt-dlp a valid stdin so downloads work on Windows.
- queue: don't split the queue when shuffling.
- server: gate the
rookiebrowser-cookie import to non-Windows. - db: tolerate line-ending-only migration checksum differences.
- lyrics: drop negative cache TTL from 7 days to 1 day.
- styles: stop the console warnings from re-diffing the stylesheet.
What's Changed
- fix(ytdlp): give yt-dlp a valid stdin so downloads work on Windows (#430) by @UMCEKO in #431
- feat(yt-music): yt-music general showcase refactor by @temidaradev in #438
- Add Dutch locale by @FormalSnake in #441
- Added Malayalam and Tamil translations by @aka-nahal in #440
- UI/UX: Missing Focus Indicators on Interactive Elements by @tomaioo in #439
- feat(locale): add Filipino (fil) translation by @IsaacCodesStuff in #448
- feat(locale): add European Portuguese (pt-PT) support by @deohanis in #443
- refactor: eliminate panicky .unwrap() calls, add crate docs, migrate eprintln! to tracing by @jomvick in #416
- fix(README-PT-PT) refine clarity and grammar for easier reading by @deohanis in #450
- fix(queue): Remove split of queue when shuffling by @FluffyPunk in #433
- feat: map Matroska audio content-types to mka decode hint by @mvanhorn in #449
- Update Indonesian Translation by @naturbrilian in #456
- Better audio initialization, playback parsing, and config views by @NotAShelf in #458
- Refactor server and utils for better modularity and separation by @NotAShelf in #460
- Split source model, page runtimes, backend modules, and playback controller by @NotAShelf in #461
- meta: deduplicate dependencies via virtual manifest; prepare for publish by @NotAShelf in #462
- feat(kopuz): embed CSS, fonts, and favicon into the binary by @UMCEKO in #434
- fix(server): gate browser-cookie import (rookie) to non-Windows by @UMCEKO in #435
- fix(db): tolerate line-ending-only migration checksum differences by @UMCEKO in #436
- Initial contributing guidelines by @NotAShelf in #463
- Implement native Windows cookie decryption for YouTube Music and SoundCloud sign-in by @UMCEKO in #468
New Contributors
- @FormalSnake made their first contribution in #441
- @aka-nahal made their first contribution in #440
- @tomaioo made their first contribution in #439
- @IsaacCodesStuff made their first contribution in #448
- @deohanis made their first contribution in #443
- @FluffyPunk made their first contribution in #433
- @naturbrilian made their first contribution in #456
Full Changelog: v0.7.0...v0.8.0
v0.7.0
This release adds two major data systems: a brand-new SoundCloud streaming backend and a full SQLite storage rewrite with a reactive data layer, plus a native YouTube Music streaming path, a desktop tray icon and mini-player, richer lyrics, and a long tail of fixes and translations.
(Flatpak may not work this time, sorry for the inconsistency i will fix it next release)
Highlights
SoundCloud is now a streaming backend. You can add SoundCloud as a server option, sign in through your browser, and browse it like any other source: favorites, playlists, home menu, search, and track playback. Public tracks work, and your liked/favorite tracks sync in.
New SQLite storage + reactive data layer. The whole library now lives in a SQLite database (crates/db, compile-checked queries via sqlx) behind a reactive data layer, alongside a MediaSource refactor and a unified "client wall" for backends. Large libraries load and update faster, and views react to data changes instead of re-fetching.
YouTube Music plays natively, with no yt-dlp and no botguard. YouTube Music now deciphers streams natively with a built-in solver and a cross-platform PoToken minter, so the old yt-dlp + botguard path is gone for playback. Anonymous mode works with a webview-minted token (browse, search, Discover, mix radio, public tracks), and signed-in accounts stream Premium-tier audio. Stream tier is now routed by itag (141/256/258/774 handled correctly), free to Premium is re-verified, and 0 kbps readouts are hidden.
Features
- Tray icon for the desktop app. Click to hide/show the window.
- Mini-player integration.
- Local file type tag so local tracks are clearly marked.
- Libre.fm scrobbling support (alongside existing Last.fm).
- Progressive remote lyrics: Apple syllable-synced lyrics UI, enhanced word-synced lyrics, a new Paxsenix NetEase provider, and smarter fallback selection that fetches lyrics chunk-by-chunk.
- Metadata viewer and editor for inspecting and editing track tags.
- Fullscreen view: artist/album navigation buttons, a permanent bitrate readout, plus accessibility and localization for the tab buttons.
- Album artist header is now a clickable link to the artist page.
- In-app logging & observability: a tracing toggle, per-session log rotation, crash reports, and export / open-log-folder, with a Chrome-trace mode for performance debugging. Runtime
println!/eprintln!is gone in favor oftracing. - Radio: added Turkish stations (Radyo 7, Nostalji).
- Translations: localized messages across many languages, a new Vietnamese locale, and a Turkish README.
- CI:
fmt+clippylinting added.
Fixes
- ytmusic: suppress the flashing cmd window on Windows process spawn.
- Now-playing cover artwork is stored in the app cache dir instead of system temp, with an Android-writable cache path.
- SoundCloud: fixed playlists, home-menu/album-menu integration, and offline + track covers.
- Fullscreen: fixed the multimedia-side and hero layout.
- player: dropped a duplicate resolve in
play_queue_linear. - Flatpak: host-browser sign-in via
flatpak-spawnplus soname/portal fixes. - Linux: tray and button fixes.
- lyrics: corrected active-line focus timing, short-gap bridging, and remote-provider fallback.
What's Changed
- feat(soundcloud): add soundcloud as a server option by @temidaradev in #413
- fix(ytmusic): suppress cmd window on windows process spawn by @lilsemihboi in #418
- fix: store now-playing cover artwork in app cache dir instead of system temp by @mvanhorn in #419
- feat(local): add local file type tag by @temidaradev in #420
- feat(mp): mini-player integration by @temidaradev in #421
- feat(tray-icon): implement tray icon for kopuz by @temidaradev in #422
- SQLite storage + reactive data layer, MediaSource refactor, client wall, and SoundCloud (#347) by @UMCEKO in #424
New Contributors
- @lilsemihboi made their first contribution in #418
- @mvanhorn made their first contribution in #419
Full Changelog: v0.6.7...v0.7.0
v0.6.7
This release brings a major new streaming backend, a big performance pass on the UI, and a long list of fixes and translations from the community.
Highlights
YouTube Music is now a first-class backend. You can connect YouTube Music as a full streaming source. It comes with a Discover page (recommended songs, playlists, albums, artists, and moods), rich artist profiles with banners, top songs, albums and singles, album and playlist browsing, and mix radio so you can start a radio station from any track. Sign in with your account to get your library, Liked Music, and playlists, or run it anonymously with no sign-in for browse, search, and public track playback.
Virtual scrolling everywhere. The library, album, playlist, search, and queue views now use virtual scrolling, so large collections stay smooth and responsive.
Features
- Play Next support in the queue, with localization.
- Multi-line lyrics support.
- Radio now supports static metadata, plus new documentation.
- Mobile lives in the main repo now.
- Share button that copies a link to MusicBrainz.
- Auto-fetch covers so albums fill in artwork on their own.
- Discord mini status shows the artist and an optional paused state.
- MusicBrainz metadata added as extra info when scrobbling.
Fixes
- Jellyfin: ProductionYear widened to u32 so malformed values no longer break parsing.
- Jellyfin album covers now fetch properly into both Kopuz and Discord.
- Reverted the Discord status back to "Listening to Kopuz".
- Fixed the active lyric line lookup condition.
- Windows toolbar icons are now included in assets.
- Added a check for whether a file comes from a server.
- yt-dlp dependencies are now optional dependencies in the PKGBUILD.
What's Changed
- More Polish localization by @Shavixinio in #296
- Add polish and english locale for playing and shuffling in albums by @Shavixinio in #310
- Add yt-dlp related dependencies as optional dependencies in the PKGBUILD by @Shavixinio in #309
- fix(jellyfin): widen ProductionYear to u32 to handle malformed values by @Paliy0 in #305
- feat(queue): Add "Play Next" functionality and localization support by @kosa12 in #301
- feat: add multi-line lyrics by @ak4duy in #292
- feat: add virtual scrolling across library, album, playlist, search, and queue views by @Irilith in #308
- feat(radio): add static metadata support, documentations by @Irilith in #319
- Fix active line lookup condition by @albanog00 in #312
- feat(mobile) take mobile into main repo by @temidaradev in #318
- feat(discord): mini status now shows artist and optional paused state by @owlenz in #320
- fix: revert to "Listening to Kopuz" discord status by @owlenz in #329
- Update Russian locale by @portanz in #328
- Add check if a file is from a server by @Shavixinio in #326
- feat(share) add share button which copies link to musicbrainz by @temidaradev in #330
- Italian translation by @N-T-Lock in #331
- fix: add musicbrainz metadata as additional info on scrobbling by @owlenz in #333
- Feat/auto fetch covers by @jomvick in #300
- fix: include Windows toolbar icons in assets by @ak4duy in #337
- fix: fetch jellyfin album covers properly to kopuz and discord by @owlenz in #336
- feat(deps) bump dependencies by @temidaradev in #332
- Add YouTube Music as a first-class backend by @UMCEKO in #341
New Contributors
- @Shavixinio made their first contribution in #296
- @Paliy0 made their first contribution in #305
- @portanz made their first contribution in #328
- @N-T-Lock made their first contribution in #331
Full Changelog: v0.6.5...v0.6.7
v0.6.5
Features
- Multi-server support - you can now save more than one server
- Folder import and playlist rename - bulk-add tracks from folders and rename playlists in-place
- Draggable queue tracks - reorder queue items via drag and drop
- Registry-based radio - radio providers are now pluggable instead of hardcoded, with Asia Dream Radio added as the first external one
- MusicBrainz/Last.fm cover art - missing album art gets auto-fetched from online sources, with manual cover editing also supported
- Windows taskbar toolbar - playback controls show up directly in the taskbar thumbnail
- Album disc display - library page now groups tracks by disc within albums
- Now playing indicator - visible in genre and search detail views
Fixes
- Shuffle mode was using wrong track indexes, now fixed
- Play button in showcase respects the shuffle toggle
- Space bar no longer accidentally fires focused playback buttons
- Playlist cover art path was wrong, now corrected
- Cover detection is now case-insensitive
- Favorite handling uses a fresh track snapshot so no stale state sneaks in
- Queue item indexing in the right bar was off, fixed
- Jellyfin client is now cached instead of being recreated every time
- Home hero and empty states now respect playback history
- Hardcoded white font color swapped out for a theme variable
- DRPC album image mismatch fixed
- Downloads and settings menus now use full width instead of being cramped; activity menu old look also fixed
- Background color corrected to 0,0,0,255
- Increased buffer size in the server side library
Refactors and Chores
- Big tree-wide crate reorganization by @NotAShelf
- Queue and lyrics views merged into shared components
- Tracklist header unified across pages
- Makefile replaced with a Justfile and docs got a refresh
- Nix packaging and Rust tooling unified through
rust-toolchain.toml - Nix result symlink removed and gitignored
denoremoved from the default Nix devshell; Markdown formatted vianix fmt- CI now runs PR-only Nix checks and i18n key validation
- Kopuz logo rebranded
- README updated with credits section, new badge links, and updated image source
What's Changed
- fix: update application icon paths in Dioxus.toml and Cargo.toml by @kosa12 in #239
- ci: add PR-only Nix checks and Rust i18n key validation by @kosa12 in #240
- fix: update favorite handling to use current track snapshot in bottombar components by @kosa12 in #243
- fix: cache jellyfin client by @albanog00 in #244
- fix: use correct indexes on shuffle mode by @albanog00 in #245
- fix: replace hardcoded white font color with theme variable by @owlenz in #250
- feat(playlists): add folder import support & rename by @ak4duy in #254
- chore: delete Nix result symlink; gitignore Nix build results by @NotAShelf in #256
- feat(radio): add asia dream radio as a provider by @krypt0graphy in #257
- fix(rightbar): improve queue item indexing in track retrieval by @kosa12 in #258
- feat: enhance library page ui, show album discs, refactor modern album page by @owlenz in #259
- Fix/async safety and comments by @jomvick in #251
- treewide: reorganize crate by @NotAShelf in #262
- Replace Makefile with Justfile; modernize documentation by @NotAShelf in #266
- feat(search_genre_details): add is playing indicator by @ak4duy in #261
- feat(windows): add taskbar thumbnail toolbar by @ak4duy in #267
- fix(showcase): make play button respect shuffle toggle by @krypt0graphy in #270
- fix(playlists): use playlist cover art path by @ak4duy in #273
- fix(find_folder_cover): fix case-insensitive cover detection by @Irilith in #283
- Refactor/unify tracklist header by @owlenz in #276
- feat(radio): replace hardcoded radio provider with registry-based support by @Irilith in #264
- Unify Nix packaging and Rust tooling with rust-toolchain.toml by @NotAShelf in #286
- feat(server) save more than 1 server by @temidaradev in #275
- feat(ui): fix home hero and empty states to respect playback history by @NotAShelf in #285
- refactor(components): share queue and lyrics view by @albanog00 in #274
- feat: auto-fetch missing album covers from MusicBrainz/Last.fm by @jomvick in #279
- fix: prevent space key from triggering focused playback buttons by @owlenz in #278
- feat(queue_drag): add draggable tracks by @ak4duy in #287
New Contributors
- @NotAShelf made their first contribution in #256
- @krypt0graphy made their first contribution in #257
Full Changelog: v0.6.0...v0.6.5
v0.6.0
Vaxry theme is finally in along with a bunch of fixes that have been annoying people for a while. Queue shuffle actually works correctly now, search doesnt stutter, album tracks with the same name no longer get skipped. Last.fm scrobbling is in, you can type hex values directly in the theme editor and there's live internet radio now. Lyrics are cached so they load faster. Windows gets a custom title bar. Auto update checks added. Lots of smaller metadata and scanner fixes too
For windows: if .exe setup doesnt work just try msi, also check the README.md if you have problems on other platforms or just ask us in our discord server or in discussions
What's Changed
- fix(queue): fix shuffle queue sync and add-to-queue behavior by @Irilith in #185
- feat(search): add click to view album on search (solve: #184) by @Irilith in #187
- fix: audio thread crashes by @laurensegberink in #183
- fix: queue behavior in shuffle mode by @albanog00 in #197
- feat(queue): add add-to-queue in Selection by @lilyud420 in #199
- Normal and Vaxry UI stylings by @temidaradev in #198
- Allow manual hex input in theme editor by @mihaidaniel34 in #202
- Add issue templates for bug reports, feature requests, and performance issues by @kosa12 in #210
- Add js_runtimes option to YtdlpOptions and update command builder by @kosa12 in #211
- feat: Add local artist image handling and improve artwork URL formatting by @kosa12 in #209
- feat(scrobble): add Last.fm integration by @lilyud420 in #206
- fix: correct metadata display bugs and improve scanner performance by @jomvick in #205
- feat(radio): Add live internet radio by @Irilith in #207
- feat: implement lyrics caching and prefetching for improved performance by @kosa12 in #220
- fix(album): album skips tracks with the same name by @lilyud420 in #223
- refactor(workspace): centralize package versioning by @Irilith in #225
- feat: add auto check updates feature with localization support by @kosa12 in #226
- improve performance for rightbar component by @albanog00 in #224
- refactor: streamline lyrics fetching and improve track metadata handling by @kosa12 in #228
- feat: Implement custom title bar functionality for Windows by @kosa12 in #232
- feat(showcase): add sortable track columns and normal UI metadata layout by @lilyud420 in #230
- fix: add GSETTINGS_SCHEMA_DIR to devshell for nixos by @owlenz in #237
New Contributors
- @laurensegberink made their first contribution in #183
- @albanog00 made their first contribution in #197
- @mihaidaniel34 made their first contribution in #202
- @jomvick made their first contribution in #205
- @owlenz made their first contribution in #237
Full Changelog: v0.5.5...v0.6.0