Overview
Discover what makes Koel powerful
**Koel** is a self‑hosted, web‑based personal audio streaming platform that combines a lightweight Vue.js front end with a Laravel back end. It is engineered for developers who need a modern, extensible media server that can be deployed on a single machine or scaled across multiple nodes. From ingesting music files to delivering transcoded streams over HTTP, Koel exposes a rich set of RESTful endpoints and WebSocket channels that enable real‑time playback control, cross‑device synchronization, and advanced playlist management.
Backend
Frontend
Media Processing
Database
Overview
Koel is a self‑hosted, web‑based personal audio streaming platform that combines a lightweight Vue.js front end with a Laravel back end. It is engineered for developers who need a modern, extensible media server that can be deployed on a single machine or scaled across multiple nodes. From ingesting music files to delivering transcoded streams over HTTP, Koel exposes a rich set of RESTful endpoints and WebSocket channels that enable real‑time playback control, cross‑device synchronization, and advanced playlist management.
Architecture & Technical Stack
- Backend: Laravel 10 (PHP) provides the core business logic, authentication, and database access. Eloquent ORM maps media metadata to a relational schema (MySQL / MariaDB). Laravel’s queue system powers background tasks such as metadata extraction, album art generation, and transcoding jobs.
- Frontend: Vue 3 with Vite builds a SPA that consumes the API. The UI leverages modern CSS frameworks (Tailwind) and component libraries for a responsive, mobile‑first experience. Real‑time features are handled by Laravel Echo and Pusher/Redis for WebSocket broadcasting.
- Media Processing: FFmpeg is the backbone of transcoding, enabling on‑the‑fly conversion to AAC/MP3/FLAC streams. The server stores raw files in a configurable filesystem (local, S3‑compatible storage) and serves encoded streams via the Laravel HTTP kernel.
- Database: A relational database (MySQL, MariaDB) stores metadata, user accounts, playlists, and playback history. The schema is fully migrations‑driven, making upgrades painless.
- Caching & Queue: Redis (or Memcached) is used for session storage, caching query results, and as the queue driver for background jobs.
Core Capabilities & APIs
- RESTful API: Endpoints expose CRUD operations for artists, albums, tracks, playlists, and users. Pagination, filtering, and search are built‑in.
- WebSocket API: Real‑time events for playback state, track changes, and cross‑device sync. Ideal for building custom clients or integrating with home automation systems.
- Transcoding Service: Exposes a simple interface to request transcoded streams; supports custom bitrates and codecs.
- Metadata Management: Bulk import/export via ID3/FLAC tags, automated cover art extraction, and manual editing through the API.
- Smart Playlists: Rules‑based playlist generation (e.g., “Top 50”, “Recently Added”) that can be queried programmatically.
Deployment & Infrastructure
Koel is designed for self‑hosting on a variety of environments:
- Docker Compose: Official docker files bundle the PHP/FPM service, Nginx reverse proxy, Redis, and MySQL, making zero‑configuration deployments trivial.
- Kubernetes: The container images are OCI‑compatible; Helm charts can be crafted for production clusters, leveraging StatefulSets for persistent storage and Ingress controllers for TLS termination.
- Scalability: Stateless API servers can be horizontally scaled behind a load balancer. Media files are stored on shared storage (e.g., NFS, S3), allowing any number of worker nodes to serve streams.
- Resource Footprint: A single 2‑core VM with 4 GB RAM can comfortably host a library of ~50,000 tracks; transcoding is offloaded to a dedicated GPU/CPU node if needed.
Integration & Extensibility
- Plugin System: Custom Laravel packages can hook into events (e.g.,
TrackUploaded,UserCreated) or add new API routes. The front end can consume these via the existing Vuex store. - Webhooks: External services (e.g., Home Assistant, IFTTT) can subscribe to playback events or playlist changes.
- SDKs & Clients: The open API is documented with OpenAPI/Swagger; developers can generate client libraries in any language.
- Theme & UI Customization: Themes are modular; developers can ship their own CSS/JS bundles or override Vue components.
Developer Experience
- Documentation: Comprehensive docs cover installation, API usage, development workflow, and contribution guidelines. Code comments follow PSR‑12 standards.
- Testing: Unit tests for both Laravel and Vue components are maintained in GitHub Actions; code coverage is publicly visible.
- Community: Active issue tracker, discussion forum, and Slack channel provide rapid support. Contributions are welcomed through pull requests and feature proposals.
- Licensing: MIT‑licensed, allowing unrestricted use in commercial or personal projects.
Use Cases
- Personal Music Server – A solo developer hosting a private library with cross‑device sync and a mobile app (Koel Player).
- Enterprise Soundscape – A small business serving background music across multiple locations, leveraging the API to integrate with building automation.
- Open‑Source Projects – Integrating Koel into a larger media platform (e.g., podcast aggregator) via its REST/WebSocket APIs.
- Educational Platforms – Teaching web development by extending Koel’s plugin system or building custom front‑end clients.
Advantages Over Alternatives
- Full Stack Control: Unlike SaaS services, Koel gives developers ownership of data and the ability to customize every layer.
- Modern Tech Stack: Vue 3 + Laravel 10 ensures developers can use familiar tools and libraries.
- Extensible API: Built‑in WebSocket support and plugin hooks reduce the need for custom middleware.
- **Performance
Open SourceReady to get started?
Join the community and start self-hosting Koel today
Related Apps in other
Immich
Self‑hosted photo and video manager
Syncthing
Peer‑to‑peer file sync, no central server
Strapi
Open-source headless CMS for modern developers
reveal.js
Create stunning web‑based presentations with HTML, CSS and JavaScript
Stirling-PDF
Local web PDF editor with split, merge, convert and more
MinIO
Fast, S3-compatible object storage for AI and analytics
Weekly Views
Repository Health
Information
Explore More Apps
google-webfonts-helper
Self-hosted Google Fonts with local fallback and performance optimization
WebThings Gateway
Self‑hosted smart home hub for privacy and control
PictShare
Self‑hosted image, GIF, MP4 and text hosting with URL manipulation
QST
Secure, open‑source assessment platform for scalable quizzes and exams
Kener
Stunning self‑hosted status pages in Docker
RecipeSage
Collaborative recipe keeper, meal planner and shopping list organizer
