Meelo is a self-hosted music server built for people who collect music rather than stream it. It indexes a folder of audio and video files, reads metadata from the files or their names, enriches it from MusicBrainz, Genius and Wikipedia, and serves the result as a browsable web app and a native mobile client. It is written in TypeScript, distributed under the GPL-3.0 licence, and shipped as a set of Docker images with an official docker-compose.yml.
Out of the box, Meelo does what any music server does: playback, browsing, search, playlists, multiple libraries, and transcoding of formats the browser cannot play directly. What sets it apart is how it models a collection. Albums are separated from their releases, songs from their tracks and versions, so a library with three pressings of the same album, a bonus-track edition and a live recording does not collapse into a wall of duplicate entries. Music videos are treated as first-class items alongside audio, and oddities the collector cares about — B-sides, rare tracks, guest features — get their own place in the interface instead of being buried in a folder.
settings.json; embedded album covers are supported..lrc lyrics, or download synced lyrics.Most music servers assume the library is a flat list of files and a tag. Meelo assumes it is a collection with history: the same album bought three times, the single that carries the B-side, the live version that is better than the studio take. Because those relationships are modelled in the database instead of being flattened into separate albums, browsing stays clean without deleting anything, and the details a collector actually wants — which version is playing, where the guest vocal came from, which video belongs to this song — are one click away instead of lost in filenames.
Meelo is deployed with Docker Compose. The official docker-compose.yml runs the server, the web front end, a scanner, a metadata matcher, a transcoder and an nginx entry point, backed by PostgreSQL, Meilisearch and RabbitMQ; download the compose file, env.example and settings.json from the release page, fill in the required passwords and paths, and start the stack. The two host paths that matter are DATA_DIR, the root of the music library, and CONFIG_DIR, which holds settings.json and generated artwork. After the first start, create the admin account in the web interface and register the library path inside the container (for example /data/music); the scanner then indexes it and the matcher fills in missing metadata. A reverse proxy is expected in front of the nginx container if the server is exposed beyond the LAN, and the GPL-3.0 licence applies.
Related: Jellyfin and Navidrome cover general music streaming, Koel is a lighter web player for a personal library, and subscription services are not needed for any of them.