Koel
Personal music streaming server that works
Alternative to: spotify, apple music, youtube music
v7.7.0
2025-06-28What’s Changed
The most important change in this version is a complete revamp of genres. Previously, genres were stored as part of the songs table (and an attribute of the Song model). This version upgrades genres to be a first-class citizen of the system, with their own table and entity.
The second important change is the switch from yarn to pnpm as the FE package manager. Koel’d been using yarn since day 1, but yarn (at least the Classic version) has become obsolete and fallen behind other package managers like pnpm. Fortunately, the switch is as simple as installing pnpm and replacing all yarn commands with their pnpm counterpart.
Other changes include:
- chore: use getRouteKeyName instead of custom model binding by @phanan in https://github.com/koel/koel/pull/1970
- chore: switch from UUID to ULID where applicable by @phanan in https://github.com/koel/koel/pull/1973
- feat: use jobs instead of direct command for scheduled tasks by @phanan in https://github.com/koel/koel/pull/1974
- chore: some improvements by Claude by @phanan in https://github.com/koel/koel/pull/1977
- fix: create foreign key for organization column only after it is fully set up by @nebulade in https://github.com/koel/koel/pull/1978
Upgrade
- Make a backup of the database.
- Obtain a copy of the latest version’s source code depending on your installation method (e.g., check out via git or extract the archive)
- If installing via source, make sure pnpm is installed on your system.
- Run
php artisan koel:init(if installing via the installation archive, add--no-assetsto skip asset compilation). Depending on the size of your database, the migration step may take some time (Koel will be migrating the genre data under the hood). - Reimport the full-text search indexes:
php artisan scout:flush "App\Models\Song" && php artisan scout:import "App\Models\Song" php artisan scout:flush "App\Models\Artist" && php artisan scout:import "App\Models\Artist" php artisan scout:flush "App\Models\Album" && php artisan scout:import "App\Models\Album" php artisan scout:flush "App\Models\Playlist" && php artisan scout:import "App\Models\Playlist" php artisan scout:flush "App\Models\Podcast" && php artisan scout:import "App\Models\Podcast"
New Contributors
- @nebulade made their first contribution in https://github.com/koel/koel/pull/1978
Full Changelog: https://github.com/koel/koel/compare/v7.6.3…v7.7.0