Changelog History
Page 2
-
v9.3.4 Changes
May 18, 2026What's Changed
- ๐ docs: add upgrade guide and simplify FrankenPHP install pages by @phanan in #2484
- ๐ fix: validate URLs at podcast sync, playback, and radio AI tool (GHSA-7j2f-6h2r-6cqc) by @phanan in #2485
Full Changelog : v9.3.3...v9.3.4
-
v9.3.3 Changes
May 17, 2026What's Changed
Full Changelog : v9.3.2...v9.3.3
-
v9.3.2 Changes
May 17, 2026What's Changed
- ๐ fix: align sqlite connection with Laravel 12 defaults by @phanan in #2480
- ๐ ci: pin DB_DATABASE to :memory: in release build by @phanan in #2481
Full Changelog : v9.3.0...v9.3.2
-
v9.3.0 Changes
May 16, 2026What's Changed
- ๐จ refactor: reduce lodash usage in the frontend by @phanan in #2444
- chore: drop select, local-storage, compare-versions, and md5 by @phanan in #2445
- ๐ fix: cast favorite attribute to boolean across favoriteable models by @phanan in #2446
- ๐ฆ chore: drop the color package in favor of a small isDarkColor helper by @phanan in #2447
- chore: drop koel/dotenv-editor in favor of an in-house service by @phanan in #2448
- feat: introduce a Guest role that can play but not upload by @phanan in #2450
- ๐ fix: keep search index in sync with post-scan mass-deletes by @phanan in #2452
- ๐ fix: skip native draggable on touch devices so context menu fires reliably by @phanan in #2453
- ๐ fix: redirect guests to / and log proxy-auth failure modes by @phanan in #2454
- feat: list only album artists on the Artists screen by @phanan in #2455
- feat: save and load custom equalizer presets by @phanan in #2456
- ๐จ refactor: collapse UserPreferences into a polymorphic Preference hierarchy by @phanan in #2457
- ๐จ refactor: organize Services/ into feature subfolders by @phanan in #2458
- ๐ test: move SongStorageType enum tests to tests/Unit by @phanan in #2459
- ๐ fix: show a sensible error when an upload's response body is not JSON by @phanan in #2461
- ๐ fix: show newly uploaded songs in their album and artist screens by @phanan in #2462
- ๐จ refactor: consolidate window globals under window.KOEL by @phanan in #2464
- ๐จ refactor: collapse Util facade into App\Helpers\Encoding\Bom by @phanan in #2465
- ๐ fix(tailwind-v4): silence two prod-build CSS warnings by @phanan in #2467
- 0๏ธโฃ feat: support FrankenPHP, bump default upload limit to 512M by @phanan in #2475
- feat: store user-generated images under storage/app/public/images by @phanan in #2479
Full Changelog : v9.2.1...v9.3.0
-
v9.2.1 Changes
May 03, 2026What's Changed
- ๐ fix: properly move playlist between folders / out to root on update by @phanan in #2436
- chore: clarify radio-station public toggle label by @phanan in #2437
- ๐ fix: restart radio playback when the on-air station's URL is edited by @phanan in #2438
- ๐ fix: don't blank-page the app when GitHub is unreachable by @phanan in #2440
- ๐ fix: arrowleft hotkey now seeks backward, not forward by @phanan in #2442
Full Changelog : v9.2.0...v9.2.1
-
v9.2.0 Changes
May 01, 2026What's Changed
- ๐ fix: use default cursor on context menu items instead of text cursor by @phanan in #2408
- feat: include user's edit permission in album resource by @phanan in #2409
- feat: include user's edit permission in artist resource by @phanan in #2410
- feat: include user's edit and delete permissions on playlist resource by @phanan in #2411
- feat: include user's edit and delete permissions on radio station resource by @phanan in #2412
- feat: include viewer's edit and delete permissions on user resource by @phanan in #2413
- ๐ chore: remove obsolete acl/permissions endpoint and Permissionable contract by @phanan in #2414
- ๐ chore: remove the Acl namespace entirely; bundle assignable roles into initial data by @phanan in #2415
- โ test: strengthen User::getAssignableRoles tests with exact assertions by @phanan in #2416
- ๐ fix: align user card with album/artist card affordances by @phanan in #2417
- chore: announce loading regions to assistive technologies by @phanan in #2418
- ๐จ refactor: replace Btn boolean attrs with variant and size props by @phanan in #2419
- ๐ fix: add hover state to BasicListSorter menu items by @phanan in #2420
- ๐จ refactor: migrate dropdowns and context menus to native popover API by @phanan in #2421
- chore(deps): bump dompurify from 3.3.2 to 3.4.0 by @dependabot[bot] in #2404
- chore(deps): bump phpseclib/phpseclib from 3.0.50 to 3.0.51 by @dependabot[bot] in #2401
- ๐ fix: increase album/artist thumbnail corner radius by @phanan in #2423
- ๐จ refactor: consolidate DownloadService storage dispatch via factory by @phanan in #2425
- ๐จ refactor: extract shared store vault into useVault composable by @phanan in #2426
- ๐จ refactor: route paginated store URLs through flattenParams by @phanan in #2427
- chore: align tsconfig with the typecheck override by @phanan in #2428
- ๐ chore: thread Eloquent generics through custom builders + repo docblock cleanup by @phanan in #2429
- ๐ chore: round out builder generics on remaining custom builders by @phanan in #2430
- ๐ fix: shift tabindex from list/panel wrappers to media list items by @phanan in #2431
- ๐จ refactor: extract model-image cleanup into a field-bound ModelImageObserver by @phanan in #2432
- ๐ fix: harden ModelImageObserver edge cases ('0' filename + log noise) by @phanan in #2433
- โฌ๏ธ chore: upgrade factoria to v5 by @phanan in #2435
- chore(deps-dev): bump postcss from 8.5.8 to 8.5.10 by @dependabot[bot] in #2424
Full Changelog : v9.1.2...v9.2.0
-
v9.1.2 Changes
April 25, 2026What's Changed
- ๐ feat: allow dragging the progress bar to seek by @phanan in #2395
- ๐ fix: preserve compilation album artist when editing songs by @phanan in #2396
- ๐ fix: remove special colors from Favorites and Recently Played sidebar icons by @phanan in #2397
- ๐ fix: resolve Butterchurn visualizer ESM interop double-wrapping regression by @acjohnson in #2399
- feat: auto-hide visualizer controls in fullscreen mode by @phanan in #2400
- ๐ fix: use most recent feed date for podcast sync freshness check by @phanan in #2407
๐ New Contributors
- @acjohnson made their first contribution in #2399
Full Changelog : v9.1.1...v9.1.2
-
v9.1.1 Changes
April 07, 2026What's Changed
- ๐ fix: fall back to GET when HEAD fails for radio station URL validation by @phanan in #2390
- ๐ fix: prevent list-view cards from stretching to the tallest row item by @phanan in #2392
Full Changelog : v9.1.0...v9.1.1
-
v9.1.0 Changes
April 07, 2026What's Changed
- ๐ fix: FolderSelect focus border by @phanan in #2364
- ๐ fix: show offline mark on playable cards by @phanan in #2365
- feat: show offline caching status on playable cards and list items by @phanan in #2366
- ๐ fix: use separate cache directory for test runner by @phanan in #2368
- ๐จ refactor: fix bugs and improve repositories and query builders by @phanan in #2369
- ๐ fix: use leftJoin for play count to include zero-play albums and artists by @phanan in #2370
- ๐ fix: apply browsability check to subfolders by @phanan in #2371
- ๐ fix: context menu submenu not reliably appearing on hover by @phanan in #2372
- ๐ fix: context menu submenu not appearing on hover by @phanan in #2373
- โ Remove redundant paragonie/sodium_compat dependency by @brendt in #2375
- chore(deps): bump lodash from 4.17.23 to 4.18.1 by @dependabot[bot] in #2376
- ๐ fix: reliable context menu submenu hover for all directions by @phanan in #2374
- ๐ fix: prevent SSRF via podcast subscription URL by @phanan in #2377
- chore(deps): bump lodash-es from 4.17.23 to 4.18.1 by @dependabot[bot] in #2367
- ๐จ refactor: clean up ImageWritingConfig defaults by @phanan in #2380
- feat: virtual grid scroller for album and artist lists by @phanan in #2381
- ๐ fix: throw on failed song file backup by @phanan in #2383
- ๐ feat: support pasting image data in ArtworkField by @phanan in #2384
- ๐ fix: sidesheet reopens after refresh when collapsed by @phanan in #2385
- ๐ fix: reduce vertical gap for artist/album list in list mode by @phanan in #2386
- feat: keyboard navigation for context menus by @phanan in #2387
- ๐ fix: handle Last.fm single-track album response and add --delay option to fetch-artwork by @phanan in #2389
- feat: detect and flag duplicate file uploads by @AaronCohen21 in #2378
๐ New Contributors
- @brendt made their first contribution in #2375
- @AaronCohen21 made their first contribution in #2378
Full Changelog : v9.0.0...v9.1.0
-
v9.0.0 Changes
April 01, 2026๐ Welcome to Koel v9 (code-named Beethoven). This is a massive release with over 140 changes, bringing a completely revamped visual experience, offline support, crossfade playback, an AI-powered assistant, and much more.
What's New
๐ Offline Support
๐ Early offline support has landed. Songs can be cached for offline playback, and the app degrades gracefully when the network is unavailable.
Crossfade Playback
๐ง A long-requested feature: crossfade between tracks with a configurable duration, for a seamless listening experience.
Revamped Home Screen
The home screen has been completely redesigned with discovery sections, a card grid layout with row dividers, and a "Something Random" section with a refresh button. Cards now feature cursor-following gradient borders and entity-derived gradient colors for a more vibrant, immersive look.
Visual Overhaul
- Revamped equalizer with an SVG frequency response curve connecting the bands, gradient coloring, and a center reference line
- Album, artist, and other detail screens now display a blurred cover image as the background, giving each screen a unique, immersive feel
- Card-based layout for main content area and footer
- Marquee animations for long titles in the footer, sidebar, and screen headers instead of truncation
Radio Now-Playing
๐ When streaming a radio station, Koel now shows the current playing song by reading ICY metadata from the stream.
Favorites Drag-and-Drop Ordering
You can now reorder your favorite songs via drag-and-drop, giving you full control over the order of your favorites list.
Parallel Scanning
โก๏ธ Both library scanning and podcast syncing now run in parallel, significantly speeding up large-library imports and podcast updates.
Smarter Similar Songs
๐ The similar songs algorithm now uses multiple seed songs and is scoped to songs only (excluding podcast episodes), producing better recommendations.
Upload Abort
In-progress uploads can now be aborted.
AI Assistant (Experimental)
Koel now ships with a built-in AI assistant that lets you control your music with natural language. Ask it to play something, manage playlists, toggle favorites โ all through a conversational interface.
๐ For more information, refer to the documentation.More Great Features
- Persist song list sort preferences across sessions
- Double-click sidebar playlists to play
- Expand collapsed playlist folders on drag hover
- Create playlist folders inline from playlist forms
- ๐ Make collaborative playlist columns toggleable
- ๐ง Configurable download limit and transcode timeout
- Scroll to the current song in the queue by clicking the footer thumbnail
- Infinite scroll for YouTube video search results
Tooling Overhaul
The frontend toolchain has been modernized significantly:
- Migrated to Vite+ (wrapping Vite 8, Vitest, oxlint, and oxfmt)
- ๐ Replaced ESLint with oxlint and added oxfmt as the code formatter
- Replaced axios with ky for HTTP requests
- Replaced Cypress with a comprehensive Vitest test suite
- PHP linting now uses mago
- vue-tsc type checking added to CI
- Upgraded to Saloon v4
๐ Security
- ๐ Fixed CVE-2025-7783 (form-data unsafe random boundary)
๐ As usual, a bunch of bug fixes and improvements have also been added under the hood.
โฌ๏ธ Upgrade
Important
Koel v9 requires PHP 8.3 or higher (previously 8.2).
- Make a backup of your database
๐ 2. Depending on your installation method, either check out the tag by running
git pull && git checkout v9.0.0or downloading and extracting the release archive ๐ 3. If building from source, runcomposer koel:initas your webserver user - Enjoy!
๐ New Contributors
- @chrisvoo made their first contribution in #2329
- @Sammyjo20 made their first contribution in #2334
Full Changelog : v8.3.1...v9.0.0
