Releases: koel/koel
v8.1.0
What's Changed
- chore: make file inputs not take the full width by @phanan in #2148
- fix: enable picking custom themes when creating embeds by @phanan in #2149
- chore(ui): ensure checkbox contrast by @phanan in #2150
- fix: selected playables are not collected properly by @phanan in #2151
- feat(ui): use dialog element for context menus by @phanan in #2152
- refactor: extract artwork fields to a reusable component by @phanan in #2156
- feat(ui): use highlight color for selection by @phanan in #2157
Full Changelog: v8.0.0...v8.1.0
v8.0.0 Tchaikovsky
Welcome to Koel v8 (code named Tchaikovsky). This version brings a set of major changes, most notably:
Embeds
You can now embed songs, playlists, artists, albums… hosted by Koel. Embedding allows you to share your music with others without having to create an account for them, making it super useful for music creators.
For more information on embedding, refer to the documentation.
Custom themes
Koel Plus users can now create and use custom themes, which is simply a combination of a color pallette (foreground, background, and highlight colors), an optional background image, font family, and font size.
Check the documentation for more details.
White labeling
Koel Plus users (or, to be precise, admins) can now customize the branding elements of Koel i.e. name, logo, and cover image.
Command to fetch missing artist and album artworks
A new artisan command, koel:fetch-artwork has been added by popular demand. This command will attempt to fetch artist and album artworks from available sources (Spotify, Wikipedia, etc.). To "play nice" with these services, the fetching will be done at the rate of maximum 1 operation per second.
Better koel:init script
A composer koel:init command has been added, which triggers php artisan koel:init under the hood. The core difference between the two commands is that composer koel:init works at the Composer level and will install the dependencies beforehands, ensuring php artisan koel:init can run.
Laravel 12
Koel is now powered by Laravel 12. That's it, that't the memo.
As usual, a bunch of bug fixes and improvements have also been added under the hood.
Upgrade
- Make a backup of your database
- Depending on your installation method, either check out the tag by running
git pull && git checkout v8.0.0or downloading and extracting the release archive - If building from source, run
composer koel:initas your webserver user - Enjoy!
Change List
- feat: support embeds by @phanan in #2105
- feat(plus): simplify Dropbox auth route by @phanan in #2108
- feat: revamp role and permission system by @phanan in #2110
- feat(build): use Node 22 by @phanan in #2111
- refactor: revamp context menus by @phanan in #2112
- feat: use proper song lists for home screen by @phanan in #2113
- feat(plus): support custom branding by @phanan in #2117
- feat: add composer script for
koel:initby @phanan in #2119 - fix: allow empty playlist description by @Doppelkeks12 in #2118
- feat: keep track of song/transcode sizes by @phanan in #2120
- fix: sidesheet background went missing by @phanan in #2122
- Fix typos and linguistic errors in documentation by @survivant in #2121
- chore: add PR template and codeowner file to aid maintenance by @phanan in #2124
- fix: make album/artist tabs scrollable on mobile by @phanan in #2125
- feat: use
v-bindinstead of injection for modal context by @phanan in #2126 - fix: stop playlist sidebar item events from bubbling by @phanan in #2127
- fix: Wikipedia connector and ImageWriter got broken by @phanan in #2130
- fix: only cache Wiki summary for 1 month by @phanan in #2131
- feat: add a command to fetch artist/album artworks by @phanan in #2132
- fix: "new albums" layout for small screens by @phanan in #2133
- chore(docs): include CodeSpect logo in README by @mattb-it in #2135
- docs: white labeling by @phanan in #2136
- fix: add cache invalidation after library prune by @Doppelkeks12 in #2114
- feat(plus): custom themes by @phanan in #2138
- refactor: simplify all those image URLs and paths by @phanan in #2141
- chore(build): upgrade to Laravel 12 by @phanan in #2143
- chore(ui): add input border by @phanan in #2145
- fix: a couple of minor mobile issues by @phanan in #2147
New Contributors
- @Doppelkeks12 made their first contribution in #2118
- @survivant made their first contribution in #2121
- @mattb-it made their first contribution in #2135
Full Changelog: v7.15.1...v8.0.0
v7.15.1
What's Changed
- refactor: turn some method args into DTO by @phanan in #2091
- chore: make dropzone fullscreen by @phanan in #2096
- fix: inconsistent state after changing album/artist name (closes #2094) by @phanan in #2097
- fix: playlist disappears when no results are found (closes #2092) by @phanan in #2100
- refactor: restrict user API routes to specific actions only (#2098) by @WangYihang in #2101
- refactor: better types for modals and their contexts by @phanan in #2102
New Contributors
- @WangYihang made their first contribution in #2101
Full Changelog: v7.15.0...v7.15.1
v7.15.0
What's Changed
- feat: upload/remove artist/album arts via form by @phanan in #2079
- feat: group fragmented commands into an Actions menu by @phanan in #2081
- fix: reapply the selection state for playable lists by @phanan in #2082
- chore: some type improvements by @phanan in #2083
- feat: add Playlist description by @phanan in #2084
- feat(plus): add Ticketmaster integration by @phanan in #2085
- feat: unify all generated/uploaded images by @phanan in #2086
- feat: upload/remove playlist cover by @phanan in #2087
- chore: move some require-dev requirements to require by @phanan in #2088
- feat: optimize release build by @AEnterprise in #2077
- fix: janks on song lists and some other improvements by @phanan in #2090
Upgrade
With #2086, Koel will now store and serve all generated and uploaded images (album covers, artist images, radio station logos, user avatars, etc.) in one unified public/img/storage directory. Thus, before upgrading:
-
Make a backup of your
public/imgdirectory. -
Create a
public/img/storagedirectory and move all (image) files underpublic/img/artists,public/img/covers,public/img/playlists,public/img/radio-stations,public/img/avatarsthere. You can do it manually or use a simple bash script like this for the task:#!/usr/bin/env bash set -euo pipefail BASE_DIR="public/img" DEST_DIR="$BASE_DIR/storage" SUBFOLDERS=("artists" "covers" "playlists" "radio-stations" "avatars") mkdir -p "$DEST_DIR" for folder in "${SUBFOLDERS[@]}"; do SRC="$BASE_DIR/$folder" [[ -d "$SRC" ]] || continue echo "Moving files from $SRC ..." mv -n "$SRC"/* "$SRC"/.* "$DEST_DIR"/ 2>/dev/null || true rmdir "$SRC" 2>/dev/null || true done echo "All done. Files are now in $DEST_DIR"
Everything else should go per usual.
New Contributors
- @AEnterprise made their first contribution in #2077
Full Changelog: v7.14.0...v7.15.0
v7.14.0
What's Changed
- refactor: use functional approach for FE tests by @phanan in #2069
- feat(ai): add Laravel Boost by @phanan in #2070
- feat(perf): use file resources instead of contents for cloud upload/download by @phanan in #2071
- feat: use hash to check if file changed by @phanan in #2072
- feat: use
useFormcomposable for forms by @phanan in #2073 - feat: add Log Viewer for easier local debugging by @phanan in #2074
- feat: add NightWatch support by @phanan in #2075
- fix: artifact path creation bug by @phanan in #2076
Full Changelog: v7.13.0...v7.14.0
v7.13.0
What's Changed
- fix: smart playlist cannot find new songs (closes #2034) (#2065)
- fix: broken no-genre summary if all songs have genres (#2064)
- fix: headers already sent in PHP streamer (closes #2054) (#2062)
- fix: downgrade sodium_compat to work with 32bit systems (#2061)
- fix: Koel Plus modal cutoff (#2060)
- fix: empty URL would sometimes be displayed (#2057) by @lewislarsen
- feat: support radio stations (#2058)
v7.12.0
v7.11.0
What's Changed
- You can now mark not just songs and episodes, but artists, albums, and podcasts as favorites. The albums, artists, and podcasts UI elements have been adapted to integrate this change — for example, clicking the "Show all / Show favorites only" button on the Album list screen will filter the list accordingly.
- A couple of bugs have been squashed
- A couple of improvements were added
Upgrade
Since the aforementioned changes unfortunately required a major modification to the database structure, BACK UP YOUR DATABASE before upgrading.
Important
Back up your database!
Once you've made the database backup, follow the upgrade guide as per usual. Then, re-import the artists and albums search indexes:
php artisan scout:flush "App\Models\Album"
php artisan scout:import "App\Models\Album"
php artisan scout:flush "App\Models\Artist"
php artisan scout:import "App\Models\Artist" Oopsie?
If there's any error during database migration, check storage/logs/laravel.log for the error details. If you can fix it yourself, great! Otherwise, restore the backup, reverse the upgrade, and file a report.
v7.10.4
- Adding Ray back as a sponsor. It's a super cool app though and you should consider using it if you're a PHP/JS developer.
Full Changelog: v7.10.3...v7.10.4
v7.10.3
What's Changed
- chore: remove "own songs only" option by @phanan in #2018
- chore: remove the "hide broken icons" directive by @phanan in #2022
- feat: auto detect ffmpeg by @phanan in #2023
- fix: validate proxy auth using proxy IP instead of client IP #2015 by @Anduin2017 in #2020
New Contributors
- @Anduin2017 made their first contribution in #2020
Full Changelog: v7.10.2...v7.10.3