Repository navigation
Releases: Adoxcol/studio
Releases · Adoxcol/studio
Release list
v0.8.0
Added
- A redesigned Listening stats page. Top 10 artists, albums and tracks now show artist pictures and album covers, with a bar for how each compares with number one; the period's most played artist, album and track get large spotlight cards. New figures: albums and tracks heard, average listening per day, change against the previous period, artists that are new to you, when you listen (by hour and by weekday) and top genres.
- Genres have their own colours. The Genres tab shows each genre as a coloured card with a bar for how much of your library it makes up, and track and artist details show genres as coloured chips. Familiar genres get fitting colours (jazz amber, electronic cyan, metal red); every other genre keeps a stable colour of its own.
- "Date added" sort in the Library (click Sort until it shows Date added), newest first. Navidrome / Subsonic tracks use the date they were added to the server, so it matches Navidrome's Recently Added; tracks scanned by earlier versions get their server date on the next scan.
- The website has a "What's new" section listing every release with its notes, newest first, and download buttons for each version, so older builds are one click away.
Fixed
- Choosing Navidrome in the Library now sticks: a "This computer / Navidrome" switch next to the search box picks the catalogue, and it stays selected while you move between Songs, Artists, Albums, Genres and Playlists, and after restarting. Navidrome is no longer listed as a folder, and the Folders tab shows only this computer's folders.
Changed
- GitHub release pages now show that version's notes from this changelog, followed by the list of merged pull requests.
What's Changed
- 🎨 Palette: Add Semantics to editorial playback toggles by @Adoxcol in #182
- ci(release): use the CHANGELOG section as the release notes by @Adoxcol in #183
- fix(library): keep the Navidrome source across tabs by @Adoxcol in #184
- feat(library): Date added sort, with Navidrome's own dates by @Adoxcol in #185
- feat(library): give genres their own colours by @Adoxcol in #186
- feat(stats): richer listening stats with artwork and top 10s by @Adoxcol in #187
- feat(website): release notes and downloads for every version by @Adoxcol in #188
- chore(release): prepare v0.8.0 by @Adoxcol in #189
Full Changelog: v0.7.0...v0.8.0
v0.7.0
What's Changed
- perf(subsonic): keep the UI responsive during a Navidrome scan by @Adoxcol in #176
- fix(shortcuts): Space in search, and no per-tick rebuilds while playing by @Adoxcol in #177
- perf(subsonic): cached cover art and parallel album fetches by @Adoxcol in #178
- fix(subsonic): consistent Navidrome artist pictures, accent colours from server art by @Adoxcol in #180
- ⚡ Bolt: Optimize map insertion in artistImageRequests by @Adoxcol in #179
- chore(release): prepare v0.7.0 by @Adoxcol in #181
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
- 🎨 Palette: Improve screen reader accessibility in Library Browse view by @Adoxcol in #164
- 🛡️ Sentinel: [security improvement] Prevent artwork file corruption with atomic writes by @Adoxcol in #165
- fix(library): make concurrent artwork saves safe; sync docs and CI with the project by @Adoxcol in #166
- refactor: drop palette_generator, remove dead Subsonic UI, split large files by @Adoxcol in #167
- feat(scrobbling): scrobble to Last.fm and ListenBrainz by @Adoxcol in #168
- feat(subsonic): offline downloads for Navidrome tracks by @Adoxcol in #169
- feat(mini-player): compact always-on-top mini player by @Adoxcol in #170
- feat(command-palette): jump anywhere with Ctrl+K by @Adoxcol in #171
- feat(stats): listening stats and a yearly review by @Adoxcol in #172
- feat(skins): shareable .studioskin skins by @Adoxcol in #173
- fix(updates): stop "Checking for updates" looking stuck by @Adoxcol in #174
- chore(release): prepare v0.6.0 by @Adoxcol in #175
Full Changelog: v0.5.0...v0.6.0
v0.5.0
What's Changed
- 🛡️ Sentinel: [MEDIUM] Fix DoS vulnerability in cover art upload by @Adoxcol in #138
- 🎨 Palette: Add tooltip to audio engine close button by @Adoxcol in #139
- 🛡️ Sentinel: [security improvement] Make Subsonic config writes atomic by @Adoxcol in #140
- 🎨 Palette: Add tooltip directly to IconButton in player_bar by @Adoxcol in #141
- 🎨 Palette: Add Semantics wrappers to library page buttons by @Adoxcol in #142
- 🎨 Palette: Add explicit semantics to custom interactive color swatches by @Adoxcol in #150
- ⚡ Bolt: Replace O(N) library filtering scan with O(1) subset lookup by @Adoxcol in #149
- ⚡ Bolt: Replace putIfAbsent with ??= in O(N) loops by @Adoxcol in #143
- 🛡️ Sentinel: [security improvement] Prevent file corruption with Atomic Writes by @Adoxcol in #145
- 🎨 Palette: Add Semantics to interactive widgets by @Adoxcol in #144
- ⚡ Bolt: Optimize text search in LibraryIndex by @Adoxcol in #146
- 🛡️ Sentinel: [HIGH] Fix predictable temporary files in tests (symlink vulnerability) by @Adoxcol in #148
- ⚡ Bolt: Avoid closure allocation in LibraryIndex.creditsOf by @Adoxcol in #151
- 🎨 Palette: Add semantics to accent color swatches by @Adoxcol in #147
- chore: remove unactionable TODO comment in linux/flutter/CMakeLists.txt by @Adoxcol in #153
- Fix max height constraint on visible children in TabsAreaLayout by @Adoxcol in #154
- feat(subsonic): sync artist artwork and playlists by @Adoxcol in #155
- fix(artist-artwork): classify aborted requests as transient by @Adoxcol in #152
- ⚡ Bolt: Fix O(N^2) disk writes by batching refreshSources mutations by @Adoxcol in #157
- Move Windows build logic to ephemeral by @Adoxcol in #156
- ⚡ Bolt: Optimize Subsonic track insertion with batch upsert by @Adoxcol in #159
- ⚡ Bolt: batch insert subsonic tracks to avoid N+1 queries by @Adoxcol in #158
- fix(release): restore Navidrome sync and Windows readiness by @Adoxcol in #160
- 🎨 Palette: Add semantics and selected states to navigation icon rail buttons by @Adoxcol in #161
- 🛡️ Sentinel: [MEDIUM] Prevent file corruption with Atomic Writes by @Adoxcol in #162
- chore(release): prepare v0.5.0 by @Adoxcol in #163
Full Changelog: v0.4.11...v0.5.0
v0.4.11
What's Changed
Full Changelog: v0.4.10...v0.4.11
v0.4.10
What's Changed
Full Changelog: v0.4.9...v0.4.10
v0.4.6
Downloads
| Platform | File | Notes |
|---|---|---|
| Windows x64 | studio-windows-x64.zip |
Unzip and run studio.exe. Keep data/ and DLLs next to the exe. Windows may show an unsigned-app warning — click More info → Run anyway. |
| macOS | studio-macos.zip |
Unzip and move studio.app to Applications. macOS may block the first launch — right-click → Open to bypass Gatekeeper. |
| Linux x64 | studio-linux-x64.tar.gz |
Extract and run ./studio. Requires libkeybinder-3.0 and libayatana-appindicator3 on the host. |
What's Changed
- fix(website): fix spotlight image swapping and scope desktop CI builds to main by @Adoxcol in #126
- fix(website): public assets build and feat(subsonic): full library scan & browsing by @Adoxcol in #127
- Release/0.4.6 by @Adoxcol in #128
- fix(windows): delay focus() call so OS processes show() before foregr… by @Adoxcol in #129
Full Changelog: v0.4.5...v0.4.6
v0.4.5
Downloads
| Platform | File | Notes |
|---|---|---|
| Windows x64 | studio-windows-x64.zip |
Unzip and run studio.exe. Keep data/ and DLLs next to the exe. Windows may show an unsigned-app warning — click More info → Run anyway. |
| macOS | studio-macos.zip |
Unzip and move studio.app to Applications. macOS may block the first launch — right-click → Open to bypass Gatekeeper. |
| Linux x64 | studio-linux-x64.tar.gz |
Extract and run ./studio. Requires libkeybinder-3.0 and libayatana-appindicator3 on the host. |
What's Changed
- ⚡ Bolt: [performance improvement] Pre-compute playlists by ID by @Adoxcol in #121
- 🛡️ Sentinel: [HIGH] Fix symlink vulnerability in PcmFifo by @Adoxcol in #122
- feat(website): add 3d showcase website with editorial mono aesthetic by @Adoxcol in #123
- feat(subsonic): OpenSubsonic & Navidrome streaming support (v0.4.5) by @Adoxcol in #124
- docs(readme): link Website to https://studio.adoxcol.com by @Adoxcol in #125
Full Changelog: v0.4.0...v0.4.5
v0.4.0
Downloads
| Platform | File | Notes |
|---|---|---|
| Windows x64 | studio-windows-x64.zip |
Unzip and run studio.exe. Keep data/ and DLLs next to the exe. Windows may show an unsigned-app warning — click More info → Run anyway. |
| macOS | studio-macos.zip |
Unzip and move studio.app to Applications. macOS may block the first launch — right-click → Open to bypass Gatekeeper. |
| Linux x64 | studio-linux-x64.tar.gz |
Extract and run ./studio. Requires libkeybinder-3.0 and libayatana-appindicator3 on the host. |
What's Changed
- docs: polish README with contributors section, profile pictures, and … by @Adoxcol in #118
- feat(playback): add editorial audio environment fullscreen playback mode by @Adoxcol in #119
- chore(release): bump version to 0.4.0 by @Adoxcol in #120
Full Changelog: v0.3.0...v0.4.0
v0.3.0
Downloads
| Platform | File | Notes |
|---|---|---|
| Windows x64 | studio-windows-x64.zip |
Unzip and run studio.exe. Keep data/ and DLLs next to the exe. Windows may show an unsigned-app warning — click More info → Run anyway. |
| macOS | studio-macos.zip |
Unzip and move studio.app to Applications. macOS may block the first launch — right-click → Open to bypass Gatekeeper. |
| Linux x64 | studio-linux-x64.tar.gz |
Extract and run ./studio. Requires libkeybinder-3.0 and libayatana-appindicator3 on the host. |
What's Changed
- feat(library): add safe metadata editor by @Adoxcol in #68
- feat(library): edit embedded cover art by @Adoxcol in #69
- 🎨 Palette: Add Semantics to LibraryTextAction for accessibility by @Adoxcol in #71
- feat(library): add batch metadata workflow by @Adoxcol in #72
- feat(playlists): add smart playlists and saved filters by @Adoxcol in #73
- feat(playlists): add playlist management essentials by @Adoxcol in #74
- ⚡ Bolt: [performance improvement] Convert heavy getters to late final in _LibraryFilterDialogState by @Adoxcol in #70
- ci: use the self-hosted homelab runner for Linux jobs by @Adoxcol in #75
- 🛡️ Sentinel: [MEDIUM] Fix insecure temporary file creation in POSIX PcmFifo by @Adoxcol in #76
- 🎨 Palette: Add Semantics to library tabs by @Adoxcol in #77
- ⚡ Bolt: Memoize smart playlist evaluation during rebuilds by @Adoxcol in #78
- 🎨 Palette: Add Semantics to IconRail buttons for accessibility by @Adoxcol in #79
- 🎨 Palette: Add Semantic traits to custom Tab widgets by @Adoxcol in #80
- 🛡️ Sentinel: [MEDIUM] Fix insecure temporary file creation in tests by @Adoxcol in #81
- 🎨 Palette: Add tooltips to immersive transport controls by @Adoxcol in #82
- 🎨 Palette: Add accessibility semantics to accent swatches by @Adoxcol in #83
- 🎨 Palette: Add Semantics to clickable widgets in Library Browse View by @Adoxcol in #84
- ⚡ Bolt: Non-blocking file existence check by @Adoxcol in #85
- ⚡ Bolt: Change existsSync to async exists in ArtworkStore save method by @Adoxcol in #86
- ⚡ Bolt: [Performance] Avoid synchronous file I/O on session load by @Adoxcol in #89
- Implement auto-merge functionality in CI workflow by @Adoxcol in #87
- 🧹 Remove unreachable NativePlayer check in _configureNative by @Adoxcol in #88
- ⚡ Bolt: Optimize deleteTracksNotKept to use safe batched queries by @Adoxcol in #92
- 🧪 Testing Improvement Task: Add test for playlist order dialog error state by @Adoxcol in #91
- 🛡️ Sentinel: [security improvement] Secure preferences with atomic writes by @Adoxcol in #90
- ⚡ Make DiscordArtworkResolver.cachedUrl async to prevent UI thread blocking by @Adoxcol in #97
- 🧹 Preserve exception fallback logic while resolving false positive dead code warning by @Adoxcol in #93
- ci: build desktop targets only on main by @Adoxcol in #100
- fix(ci): dispatch builds after automatic merge by @Adoxcol in #101
- fix(ci): target repository when dispatching builds by @Adoxcol in #102
- 🎨 Palette: [a11y] Announce window controls as buttons by @Adoxcol in #104
- Fix
auto_mergeworkflow failure by makingghrepository context explicit by @Adoxcol with @Copilot in #103 - 🛡️ Sentinel: [MEDIUM] Fix insecure temporary file creation in tests by @Adoxcol in #107
- ⚡ Bolt: Memoize playlist evaluation by ID during rebuilds by @Adoxcol in #108
- test: stabilize timing-sensitive suites by @Adoxcol in #110
- ⚡ Bolt: Replace O(N) indexOf in Queue UI with O(1) queueIndex by @Adoxcol in #99
- test(discord): await retry completion by @Adoxcol in #111
- 🧹 Fix deprecation in ReorderableListView by @Adoxcol in #94
- 🧹 Refactor _NamedAction to use enum to resolve dead code warning by @Adoxcol in #95
- ⚡ Bolt: O(1) Artist/Album view filtering by @Adoxcol in #96
- ⚡ Bolt: Optimize track table rebuilds and search/sort allocations by @Adoxcol in #98
- 🛡️ Sentinel: [MEDIUM] Fix insecure file saving in ArtworkStore by @Adoxcol in #105
- ⚡ Bolt: Optimize smart playlist evaluation during name edit by @Adoxcol in #109
- 🛡️ Sentinel: [CRITICAL] Fix SQL injection by @Adoxcol in #112
- 🛡️ Sentinel: [security improvement] by @Adoxcol in #113
- chore(deps): upgrade dependencies by @Adoxcol in #114
- fix(windows): raise and center the window on launch by @Adoxcol in #115
- Release/0.3.0 by @Adoxcol in #116
- Release/0.3.0 by @Adoxcol in #117
New Contributors
Full Changelog: v0.2.0...v0.3.0