🐦 A personal music streaming server that works.

Overview

koel e2e unit Code Quality codecov OpenCollective OpenCollective

Showcase

Intro

Koel (also stylized as koel, with a lowercase k) is a simple web-based personal audio streaming service written in Vue on the client side and Laravel on the server side. Targeting web developers, Koel embraces some of the more modern web technologies – CSS grid, audio, and drag-and-drop API to name a few – to do its job.

Install and Upgrade Guide

For system requirements, installation/upgrade guides, troubleshooting etc., head over to the Official Documentation.

Development

Since Koel makes use of git submodules, you'll want to make sure the submodule is up-to-date:

git pull
git submodule update --init --recursive --remote

# install the submodule dependencies
cd resources/assets
yarn install

To start the PHP dev server, which serves as the API of the application, run the following command from the root directory. By default, the server will listen at port 8000.

php artisan serve

For the client application itself, run this command:

yarn hot

A development version of Koel should now be available at http://localhost:8080 with full support for hot module reloading.

Alternatively, you can start both the PHP server and the client application in one go with yarn dev, which uses start-server-and-test under the hood.

Testing, Linting, Static Analysis and Stuff

# PHP-related code quality tasks
# Basically, take a look at the "scripts" section in composer.json
composer test        # Run the PHP test suite
composer cs          # Run code style checker
composer cs:fix      # Run code style fixer 
composer analyze     # Run PHP static analysis

yarn build # Build a production version of the client application

# Client/E2E code quality tasks
# You may want to run `yarn build` first.
yarn test:e2e        # Run the Cypress test suite interactively
yarn test:e2e:ci     # Run the Cypress test suite non-interactively (CI mode)
# These commands need to be run from within the submodule (resources/assets)
yarn lint            # Lint
yarn type-check      # TypeScript type checking
yarn test            # Unit testing

Note: If you're already running yarn test:e2e, there's no need to start a dev server. yarn test:e2e calls yarn dev internally and will eliminate the existing yarn dev process, if any.

A quick and easy way to start hacking on koel is to open and run this repo in Gitpod, an online IDE with full Laravel support.

Open in Gitpod

Koel Player

Koel Player screenshots

Koel Player is the official mobile app for Koel, which supports both iOS and Android without the limitations of the mobile web version. For more information on the project, visit its repository.

Backers

Support me on OpenCollective with a monthly donation and help me continue building Koel.

Sponsors

GitHub Sponsors

OpenCollective

Become a sponsor on OpenCollective and get your logo on our README on Github with a link to your site.

You might also like...
This is a laravel 4 package for the server and client side of datatables at http://datatables.net/

Datatable Important This package will not receive any new updates! You can still use this package, but be preparared that there is no active developme

Laravel package to periodically monitor the health of your server and application.
Laravel package to periodically monitor the health of your server and application.

Laravel package to periodically monitor the health of your server and application. It ships with common checks out of the box and allows you to add your own custom checks too. The packages comes with both console and web interfaces.

Easy Laravel Server-Side implementation of PrimeVue Datatables

Laravel + PrimeVue Datatables This is a simple, clean and fluent serve-side implementation of PrimeVue Datatables in Laravel. Features Global Search i

UnifiedPush provider for Nextcloud - server application

NextPush - Server App UnifiedPush provider for Nextcloud - server application This is still a WIP version Requirement It require the nextcloud server

Asynchronous WebSocket server

Ratchet A PHP library for asynchronously serving WebSockets. Build up your application through simple interfaces and re-use your application without c

A plugin for Blessing Skin Server that can let you display Google Ads with Google AdSense in the website.

A plugin for Blessing Skin Server that can let you display Google Ads with Google AdSense in the website.

Hashtopolis is a multi-platform client-server tool for distributing hashcat tasks to multiple computers.
Hashtopolis is a multi-platform client-server tool for distributing hashcat tasks to multiple computers.

Hashtopolis is a multi-platform client-server tool for distributing hashcat tasks to multiple computers. The main goals for Hashtopolis's development are portability, robustness, multi-user support, and multiple groups management.

Data Table package with server-side processing, unlimited exporting and VueJS components
Data Table package with server-side processing, unlimited exporting and VueJS components

Data Table package with server-side processing, unlimited exporting and VueJS components. Quickly build any complex table based on a JSON template.

Laravel Custom Response Messages from Passport Oauth2 Server

This is a sample repository showing how to install Oauth2 server using Laravel's passport package and customize its responses.

Releases(v6.11.0)
  • v6.11.0(Dec 30, 2022)

    What's Changed

    • feat: add fullscreen mode by @phanan in https://github.com/koel/koel/pull/1637
    • fix: cursor blocking ghost text content during dragging by @phanan in c24cc1c3ed096312d95b3c30cf58effbbd6522b2
    • fix: menu diagonal problem by @phanan in 3a9f6989e92c247b7181c8887ddec3c9bbdfd8c2

    Full Changelog: https://github.com/koel/koel/compare/v6.10.0...v6.11.0

    Source code(tar.gz)
    Source code(zip)
    koel-v6.11.0.tar.gz(19.19 MB)
    koel-v6.11.0.zip(24.08 MB)
  • v6.10.0(Dec 19, 2022)

    What's Changed

    • feat: use feather as the lyrics icon by @phanan in https://github.com/koel/koel/pull/1633
    • fix: bottom- and top-fade out problem on Artist/Album screen by @phanan in https://github.com/koel/koel/pull/1634
    • feat: allow filtering (applicable) song lists by @phanan in https://github.com/koel/koel/pull/1635
    • feat: skip/stop if current song is removed from queue by @phanan in https://github.com/koel/koel/pull/1636
    • fix: "play selected" not working on All Songs screen by @phanan in 182033b5ec9c5a6fd4f4304731590ca2e8020f1f

    Full Changelog: https://github.com/koel/koel/compare/v6.9.0...v6.10.0

    Source code(tar.gz)
    Source code(zip)
    koel-v6.10.0.tar.gz(19.19 MB)
    koel-v6.10.0.zip(24.08 MB)
  • v6.9.0(Dec 15, 2022)

    What's Changed

    • feat: only show YouTube sidebar item on demand by @phanan in https://github.com/koel/koel/pull/1621
    • feat: allow playing/shuffling playlist from the context menu by @phanan in https://github.com/koel/koel/pull/1623
    • feat: allow dragging and dropping playlist folders to queue by @phanan in https://github.com/koel/koel/pull/1624
    • fix: only set initialized to true if artist/album list load is successful by @phanan in https://github.com/koel/koel/pull/1629
    • fix: direct streaming with PHP not working for Safari by @phanan in https://github.com/koel/koel/pull/1630
    • feat: allow sorting by date added by @phanan in https://github.com/koel/koel/pull/1631
    • fix: Added CreatesApplication strict typing by @JanMikes in https://github.com/koel/koel/pull/1626
    • chore: remove Exoscale as a sponsor by @phanan in https://github.com/koel/koel/pull/1632

    New Contributors

    • @JanMikes made their first contribution in https://github.com/koel/koel/pull/1626

    Full Changelog: https://github.com/koel/koel/compare/v6.8.5...v6.9.0

    Source code(tar.gz)
    Source code(zip)
    koel-v6.9.0.tar.gz(19.19 MB)
    koel-v6.9.0.zip(24.08 MB)
  • v6.8.5(Dec 7, 2022)

    What's Changed

    • feat(build): add CI for MySQL by @phanan in https://github.com/koel/koel/pull/1614
    • feat(test): add SmartPlaylistService tests by @phanan in https://github.com/koel/koel/pull/1616
    • feat: better support for creating playlists directly from songs by @phanan in https://github.com/koel/koel/pull/1617
    • feat: add fade effect to overflown lists by @phanan in https://github.com/koel/koel/pull/1618
    • fix: album/artist song lists are not sortable by @phanan in https://github.com/koel/koel/pull/1619

    Full Changelog: https://github.com/koel/koel/compare/v6.8.4...v6.8.5

    Source code(tar.gz)
    Source code(zip)
    koel-v6.8.5.tar.gz(19.19 MB)
    koel-v6.8.5.zip(24.07 MB)
  • v6.8.4(Dec 4, 2022)

  • v6.8.3(Dec 3, 2022)

  • v6.8.2(Dec 2, 2022)

    What's Changed

    • fix: explicit group by columns by @phanan in https://github.com/koel/koel/pull/1610
    • chore: code style and some minor fixes by @phanan in 4b8ae1a78e2cf00ee7224e2b5d2e49f3176b5abe
    • feat: change the icons for Playlist sidebar items by @phanan in e3c7d51ad5a3a78aa6176123370e2deb6e79511e
    • feat: update database config and .env.example by @phanan in 6e860816380b6cb1d0ba07bc8f315a97af017223

    Full Changelog: https://github.com/koel/koel/compare/v6.8.1...v6.8.2

    Source code(tar.gz)
    Source code(zip)
    koel-v6.8.2.tar.gz(19.20 MB)
    koel-v6.8.2.zip(24.07 MB)
  • v6.8.1(Nov 29, 2022)

  • v6.8.0(Nov 29, 2022)

    What's Changed

    • feat: use dialog element for overlay component by @phanan in https://github.com/koel/koel/pull/1594
    • feat: use composables for DialogBox, MessageToast, and Router by @phanan in https://github.com/koel/koel/pull/1595
    • feat: turn overlay functionalities into composable by @phanan in https://github.com/koel/koel/pull/1597
    • feat: use overlay instead of soundbars for form submission by @phanan in https://github.com/koel/koel/pull/1598
    • feat: persist active extra panel's tab by @phanan in https://github.com/koel/koel/pull/1599
    • feat: allow specifying folder when create/edit playlists by @phanan in https://github.com/koel/koel/pull/1603
    • fix: file path inconsistency on Windows (closes #1507) by @phanan in https://github.com/koel/koel/pull/1605

    Full Changelog: https://github.com/koel/koel/compare/v6.7.5...v6.8.0

    Source code(tar.gz)
    Source code(zip)
    koel-v6.8.0.tar.gz(19.20 MB)
    koel-v6.8.0.zip(24.07 MB)
  • v6.7.5(Nov 17, 2022)

  • v6.7.3(Nov 17, 2022)

    What's Changed

    • fix: carriage returns not rendered as new lines by @phanan in https://github.com/koel/koel/pull/1585
    • feat: make event bus (emitter) type-safe by @phanan in https://github.com/koel/koel/pull/1591
    • feat: use a composition token by @phanan in https://github.com/koel/koel/pull/1592 (users need to re-log in for this to take effects)

    Full Changelog: https://github.com/koel/koel/compare/v6.7.2...v6.7.3

    Source code(tar.gz)
    Source code(zip)
    koel-v6.7.3.tar.gz(19.18 MB)
    koel-v6.7.3.zip(24.06 MB)
  • v6.7.2(Nov 13, 2022)

  • v6.7.1(Nov 8, 2022)

    What's Changed

    • feat: add Asteroid visualizer by @phanan in https://github.com/koel/koel/pull/1577
    • feat: add and use "last played" timestamp for songs and fix some smart playlist bugs by @phanan in https://github.com/koel/koel/pull/1578
    • feat: allow refreshing playlists by @phanan in https://github.com/koel/koel/pull/1579

    Full Changelog: https://github.com/koel/koel/compare/v6.7.0...v6.7.1

    Source code(tar.gz)
    Source code(zip)
    koel-v6.7.1.tar.gz(19.17 MB)
    koel-v6.7.1.zip(24.06 MB)
  • v6.7.0(Nov 6, 2022)

  • v6.6.0(Nov 2, 2022)

  • v6.5.3(Oct 28, 2022)

    What's Changed

    • feat: use Dialog element for modals by @phanan in https://github.com/koel/koel/pull/1563
    • feat: use human-readable format e.g. "5 hr 4 min" for song list durations by @phanan in https://github.com/koel/koel/pull/1564
    • fix: volume increased when visualizer is activated by @phanan in https://github.com/koel/koel/pull/1567

    Full Changelog: https://github.com/koel/koel/compare/v6.5.2...v6.5.3

    Source code(tar.gz)
    Source code(zip)
    koel-v6.5.3.tar.gz(17.97 MB)
    koel-v6.5.3.zip(22.86 MB)
  • v6.5.2(Oct 27, 2022)

    What's Changed

    • chore: make GlobalEventListener renderless by @phanan in https://github.com/koel/koel/pull/1560
    • feat: notify when app comes offline by @phanan in https://github.com/koel/koel/pull/1561
    • fix: broken layout on mobile due to tooltips (closes #1559) by @phanan in https://github.com/koel/koel/pull/1562

    Full Changelog: https://github.com/koel/koel/compare/v6.5.1...v6.5.2

    Source code(tar.gz)
    Source code(zip)
    koel-v6.5.2.tar.gz(17.98 MB)
    koel-v6.5.2.zip(22.85 MB)
  • v6.5.1(Oct 27, 2022)

    What's Changed

    • feat: persist lyrics zoom level by @phanan in https://github.com/koel/koel/pull/1556
    • feat: add new version notification to About icon by @phanan in https://github.com/koel/koel/pull/1557
    • feat: add sponsor list to About modal by @phanan in https://github.com/koel/koel/pull/1558

    Full Changelog: https://github.com/koel/koel/compare/v6.5.0...v6.5.1

    Source code(tar.gz)
    Source code(zip)
    koel-v6.5.1.tar.gz(17.98 MB)
    koel-v6.5.1.zip(22.86 MB)
  • v6.5.0(Oct 26, 2022)

    What's Changed

    • feat: index songs.album_id for PostgreSQL by @ibonkonesa in https://github.com/koel/koel/pull/1547
    • fix: pressing Space causes lists to scroll by @phanan in https://github.com/koel/koel/pull/1551
    • feat(design): add a search icon to Search form by @phanan in https://github.com/koel/koel/pull/1552
    • feat: add tooltips for better UX by @phanan in https://github.com/koel/koel/pull/1554
    • fix: right-clicking song list sometimes does not select songs by @phanan in 4060f79e8e0d58745143da85c8255a89fc9b9511
    • fix: Genre screen trying to refresh without a genre by @phanan in 0de19d09cff7c82ecf7576443bbf267d6168e3b8
    • feat(design): add thumbnails to song list by @phanan in https://github.com/koel/koel/pull/1555

    New Contributors

    • @ibonkonesa made their first contribution in https://github.com/koel/koel/pull/1547

    Full Changelog: https://github.com/koel/koel/compare/v6.4.3...v6.5.0

    Source code(tar.gz)
    Source code(zip)
    koel-v6.5.0.tar.gz(17.96 MB)
    koel-v6.5.0.zip(22.84 MB)
  • v6.4.3(Oct 24, 2022)

  • v6.4.2(Oct 24, 2022)

    What's Changed

    • feat(build): add unit tests with PostgreSQL for CI by @phanan in https://github.com/koel/koel/pull/1544
    • chore: slotify album/artist cards by @phanan in https://github.com/koel/koel/pull/1545
    • fix(search): broken redirection on mobile by @phanan in https://github.com/koel/koel/pull/1548

    Full Changelog: https://github.com/koel/koel/compare/v6.4.1...v6.4.2

    Source code(tar.gz)
    Source code(zip)
    koel-v6.4.2.tar.gz(17.95 MB)
    koel-v6.4.2.zip(22.83 MB)
  • v6.4.1(Oct 23, 2022)

    What's Changed

    • fix: prevent real requests in unit tests by @phanan in https://github.com/koel/koel/pull/1542
    • fix: 500 error on Home screen by @tomdoo in https://github.com/koel/koel/pull/1538
    • feat(build): add no-dev option by @JBlond in https://github.com/koel/koel/pull/1543
    • fix: intermittent initialization on Home screen by @phanan 98a6d9b4c47ccd7fb2049499e7b4225d61feed5d

    New Contributors

    • @tomdoo made their first contribution in https://github.com/koel/koel/pull/1538
    • @JBlond made their first contribution in https://github.com/koel/koel/pull/1543

    Full Changelog: https://github.com/koel/koel/compare/v6.4.0...v6.4.1

    Source code(tar.gz)
    Source code(zip)
    koel-v6.4.1.tar.gz(17.96 MB)
    koel-v6.4.1.zip(22.83 MB)
  • v6.4.0(Oct 22, 2022)

  • v6.3.0(Oct 18, 2022)

    What's Changed

    • fix(compilation): some bugs with album artists by @phanan in https://github.com/koel/koel/pull/1526
    • feat(design): greatly revamp the layout by @phanan in https://github.com/koel/koel/pull/1529
    • fix: removed extra space between links by @Archetipo95 in https://github.com/koel/koel/pull/1528
    • feat: tabs for Artist/Album screens by @phanan in https://github.com/koel/koel/pull/1532

    New Contributors

    • @Archetipo95 made their first contribution in https://github.com/koel/koel/pull/1528

    Full Changelog: https://github.com/koel/koel/compare/v6.2.2...v6.3.0

    Source code(tar.gz)
    Source code(zip)
    koel-v6.3.0.tar.gz(27.27 MB)
    koel-v6.3.0.zip(35.45 MB)
  • v6.2.2(Oct 10, 2022)

    What's Changed

    • feat: Add env variable TRANSCODE_FLAC (defaults to true) to toggle transcoding on/off for FLAC files by @MaciejGorczyca in https://github.com/koel/koel/pull/1458
    • feat: revamp the router and routing logic by @phanan in https://github.com/koel/koel/pull/1519
    • fix: route redirection not fully working by @phanan in https://github.com/koel/koel/pull/1520
    • feat: cache routes and deprecate hashbang support by @phanan in https://github.com/koel/koel/pull/1521
    • fix: actual HTTP requests in tests by @phanan in https://github.com/koel/koel/pull/1522
    • fix: dropzone stays after dropping by @phanan in https://github.com/koel/koel/pull/1523
    • fix: broken song reordering by @phanan in https://github.com/koel/koel/pull/1524

    New Contributors

    • @MaciejGorczyca made their first contribution in https://github.com/koel/koel/pull/1458

    Full Changelog: https://github.com/koel/koel/compare/v6.2.1...v6.2.2

    Source code(tar.gz)
    Source code(zip)
    koel-v6.2.2.tar.gz(27.26 MB)
    koel-v6.2.2.zip(35.44 MB)
  • v6.2.1(Oct 7, 2022)

    What's Changed

    • Typofixes in api.yaml descriptions by @nexxai in https://github.com/koel/koel/pull/1513
    • chore: improve assertEquals by @peter279k in https://github.com/koel/koel/pull/1512
    • fix: do not lazy-load GlobalEventListeners by @phanan in https://github.com/koel/koel/pull/1515
    • chore: add port 8000 into .env's APP_URL by @phanan in https://github.com/koel/koel/pull/1516
    • fix: album tracklist item test by @phanan in https://github.com/koel/koel/pull/1517

    New Contributors

    • @nexxai made their first contribution in https://github.com/koel/koel/pull/1513
    • @peter279k made their first contribution in https://github.com/koel/koel/pull/1512

    Full Changelog: https://github.com/koel/koel/compare/v6.2.0...v6.2.1

    Source code(tar.gz)
    Source code(zip)
    koel-v6.2.1.tar.gz(27.29 MB)
    koel-v6.2.1.zip(35.47 MB)
  • v6.2.0(Sep 23, 2022)

    What's Changed

    • feat: read LRC files if applicable (closes #1447) by @phanan in https://github.com/koel/koel/pull/1502
    • feat: allow deleting songs from filesystem (closes #1478) by @phanan in https://github.com/koel/koel/pull/1504
    • feat: support genre and year (closes #1503) by @phanan in https://github.com/koel/koel/pull/1509. See Migration for more details.
    • fix: properly sort album/artist songs (closes #1486) 25c9da4c
    • fix: screen not activated on app load 4eab978b
    • fix: add support for vorbis tags/comments by @jojoxd 4c7e2644a3551fc7e37d0ef544991c06066bf782

    Migration

    To read genre and year tags from existing songs and populate them into the database, execute these commands:

    php artisan migrate
    php artisan koel:tags:collect year genre
    

    Full Changelog: https://github.com/koel/koel/compare/v6.1.0...v6.2.0

    Source code(tar.gz)
    Source code(zip)
    koel-v6.2.0.tar.gz(27.31 MB)
    koel-v6.2.0.zip(35.47 MB)
  • v6.1.0(Sep 13, 2022)

  • v6.0.6(Sep 2, 2022)

  • v6.0.5(Aug 11, 2022)

Owner
Koel
Open-source music streaming software
Koel
MediaDB is a web-based media streaming service written in Laravel and Vue.

MediaDB (API) MediaDB is a web-based media streaming service written in Laravel and Vue. The nginx-vod-module is used for on-the-fly repackaging of MP

François M. 53 Sep 3, 2022
Personal CRM. Remember everything about your friends, family and business relationships.

Personal Relationship Manager Monica is a great open source personal relationship management system. Introduction Purpose Features Who is it for? What

Monica 18.5k Jan 5, 2023
Boilerplate code for protecting a form with proof of work. Uses javascript in the browser to generate the hashcash and PHP on the server to generate the puzzle and validate the proof of work.

Boilerplate code for protecting a form with proof of work. Uses javascript in the browser to generate the hashcash and PHP on the server to generate the puzzle and validate the proof of work.

Jameson Lopp 28 Dec 19, 2022
Laravel API wrapper to interact fluently with your Janus Media Server

Laravel API wrapper to interact fluently with your Janus Media Server. Core server interactions, as well as the video room plugin included.

Richard  Tippin 11 Aug 21, 2022
Learning Websocket by creating Custom Websocket-server package provided by Laravel

Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling.

Chisty Md.Muzammel Hossain 3 Oct 25, 2022
JSON-RPC 2.0 API server for @Laravel framework

Sajya is an open-source project aiming to implement the JSON-RPC 2.0 server specification for the Laravel quickly.

Sajya 179 Dec 29, 2022
Add Server-Timing header information from within your Laravel apps.

Laravel Server Timings Add Server-Timing header information from within your Laravel apps. Installation You can install the package via composer: comp

Beyond Code 498 Dec 15, 2022
BigBlueButton Server API Library for Laravel

BigBlueButton Server API Library for Laravel Package that provides easily communicate between BigBlueButton server and laravel framework Requirements

Jignesh 124 Jan 6, 2023
This package enables you to create and run a fully functioning WebSocket server in your Laravel app.

This package enables you to create and run a fully functioning WebSocket server in your Laravel app. It can optionally receive messages broadcast over ZeroMQ.

Asked.io 181 Oct 6, 2022
Server-side handler of DataTables Jquery Plugin for Laravel 4

Project is not being maintained actively. You will most likely find a better more actively maintained fork here https://github.com/yajra/laravel-datat

Bilal Gultekin 264 Jul 2, 2022