Koel
A self-hosted music streaming application with library scanning, browser playback, playlists, favorites, and user accounts.
Why consider Koel?
Koel is a self-hosted audio streaming server that turns personal media libraries into a web-based listening platform. It pairs a Laravel backend API with a Vue frontend and supports Subsonic client applications.
Learn Koel by building
Practical setup notes, real use cases, and copy-ready examples in one focused guide.
In this guide5 sections
Deploying and Operating Koel Personal Audio Streaming Server
Overview and Core Architecture
Koel (also stylized as koel, with a lowercase k) is a free, open-source music streaming solution that turns your personal collection into a sleek, web-based listening experience. Designed for media enthusiasts and self-hosters who want full control over their audio files, the system indexes local audio tracks and streams them on demand to desktop and mobile browsers. Full details on feature scope and repository status can be reviewed in the Koel README.
The server is a Laravel application acting as the API, and the client is a Vue.js application responsible for the user interface. This decoupling enables clear separation between data storage, media streaming mechanics, background scanning jobs, and real-time playback controls. Technical requirements and platform architecture are documented in the Getting Started Guide.
Beyond playback, Koel handles playlists, smart playlists, scrobbling, podcasts, radio, Last.fm/Spotify/MusicBrainz integrations, and an AI assistant that responds to natural-language commands. Users can organize custom collections, manage podcast subscriptions, and stream live internet radio stations directly from the web interface. Additional integration details are described in the Koel README.
Koel speaks the Subsonic / OpenSubsonic API, so you’re not stuck inside the web interface. This compatibility allows administrators and listeners to connect standalone mobile apps, desktop players, and network streamers directly to their music server instance. The official overview is published on the Koel Documentation Hub.
As an open-source project hosted on GitHub, Koel describes itself as a Music streaming solution that works. Contribute to koel/koel development by creating an account on GitHub. Community members can inspect the source code, file bug reports, and follow version updates directly on the Koel GitHub Repository.
Database Requirements and Deployment Options
One of the databases supported by Laravel. Koel has been tested with MySQL, MariaDB, PostgreSQL, and SQLite. For straightforward single-user installations or quick local testing, SQLite offers zero-configuration storage, whereas MySQL, MariaDB, or PostgreSQL provide robust concurrency for large multi-gigabyte collections. Database compatibility instructions are provided in the Getting Started Guide.
Koel works well with FrankenPHP, a modern PHP application server that bundles a webserver (Caddy) and the PHP runtime into a single binary, with automatic HTTPS out of the box. Administrators can choose between standalone binary deployments, containerized Docker setups, or standard web server stacks such as Nginx paired with PHP-FPM, as detailed in the Getting Started Guide.
Setup and Initialization Workflow
Koel supports installing from a pre-compiled archive, which eliminates the need of manually compiling the front-end assets. To set up this deployment method, download the release archive, extract the files into the target web root directory, and execute the installation wizard as outlined in the Getting Started Guide:
composer koel:init -- --no-assets# Follow the wizard to populate necessary configurationsphp artisan serveFor production, point a proper server (Apache, nginx, Caddy, etc.) at Koel's public/ directory — the process is no different from any standard PHP application. Running behind a reverse proxy ensures stable SSL termination, static asset offloading, and reliable background audio delivery, as documented in the Getting Started Guide.
System Diagnostics and CLI Management
Koel comes with a set of handy CLI commands to help you manage your installation. These Artisan commands allow administrators to manage user accounts, trigger library rescans, clean up temporary media files, and diagnose environmental issues from the terminal, as documented in the CLI Commands Reference.
Always run commands as your web server user (e.g. www-data or nginx), never as root. To verify that all required PHP extensions, directory permissions, database connectivity, and media streaming components are operating correctly, administrators can run the doctor diagnostic command detailed in the CLI Commands Reference:
php artisan koel:doctorMaintenance, Search Indexing, and License Terms
If you use the default search driver, run this once after upgrading to rebuild your search indexes: running the search import artisan task ensures that newly added artists, albums, and song titles remain instantly searchable across the web interface and connected client applications, as explained in the v9.11.1 Release Notes.
php artisan koel:search:importPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction. The permissive licensing enables self-hosters and organizations to adapt the platform freely for their internal audio streaming requirements, as stated in the Koel License.
Related tools
More options with a similar category or technology profile.
MyPaint
Nimble, distraction-free, and easy graphic application for digital painters.
Pencil2D
Easy, intuitive traditional hand-drawn 2D animation software across raster and vector.
Hydrogen
Advanced open-source drum machine and pattern-based step sequencer for audio production.
Pure Data
Open source visual programming language for multimedia, audio, and physical computing.