---
title: Meelo
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, music, music-streaming, meelo, python, fastapi, subsonic, opensaubsonic, vue, nuxt]
confidence: high
contested: false
sources:
  - https://selfh.st/apps/?tag=Music
  - https://github.com/Arthi-2004/Meelo
  - https://meeloapp.github.io/Meelo/
---

# 🎼 Meelo

> Serveur de streaming musical **moderne** écrit en Python (FastAPI) + frontend Vue/Nuxt, **API Subsonic/OpenSubsonic complète** et **scanner multi-utilisateurs ultra-rapide** conçu pour des bibliothèques jusqu'à plusieurs millions de pistes.

## 📋 Informations Générales

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://meeloapp.github.io/Meelo/ |
| **GitHub** | https://github.com/Arthi-2004/Meelo |
| **License** | GPL-3.0 |
| **Langage** | Python (FastAPI) / TypeScript (Vue/Nuxt) |
| **Étoiles** | ⭐ 36 |
| **Dernière MAJ** | 2026-06-06 |
| **Catégorie** | [[cat-music]] |

## 📝 Description

**Meelo** est un serveur de streaming musical **personnel, moderne et ambitieux** développé principalement par Arthi-2004. L'objectif affiché est simple : devenir le **Navidrome-killer** en proposant une UI contemporaine (Nuxt 3, design sombre Material-like) tout en conservant la compatibilité **Subsonic/OpenSubsonic**, plus des fonctionnalités avancées que ses concurrents n'ont pas (ou peu).

Côté backend, Meelo est écrit en **Python** avec **FastAPI** (asynchrone), **SQLAlchemy 2** et **Pydantic v2**, ce qui lui confère une **rapidité de scan** et une **consommation mémoire maîtrisée** malgré des bases de données de plusieurs millions de pistes. Le frontend est une SPA **Vue 3 / Nuxt 3** avec Tailwind, Pinia et un player HTML5 custom (sans dépendance lourde comme Preact/Tone.js). Le tout est distribué en deux images Docker (backend + frontend) ou en monolithe.

Fonctionnalités phares : **API Subsonic/OpenSubsonic complète** (donc compatible avec tous les clients Subsonic : [[app-symfonium]], DSub, play:Sub, Substreamer, Feishin…), **albums intelligents auto-générés** (compils, éditions deluxe, volumes…), **gestion fine des doublons et éditions multiples**, **listes de lecture collaboratives**, **scrobbling Last.fm / ListenBrainz**, **transcodage à la volée** (FLAC → MP3/Opus), **recherche full-text floue**, et **multi-utilisateurs avec permissions fines**. Un **système de "tracks preferences"** permet à l'algorithme d'apprentissage d'améliorer les suggestions.

Cas d'usage : « j'ai une bibliothèque de 500 000 FLAC sur mon NAS, je veux un serveur qui scanne en moins d'une heure, propose une UI moderne type Spotify, et que mes apps mobiles préfèrent ». Meelo coche la case.

## 🚀 Installation

### Option 1 : Docker Compose (recommandé)

```yaml
# docker-compose.yml
version: "3.8"

services:
  meelo-backend:
    image: ghcr.io/arthi-2004/meelo-backend:latest
    container_name: meelo-backend
    restart: unless-stopped
    depends_on:
      - postgres
    environment:
      DATABASE_URL: postgresql+asyncpg://meelo:meelo@postgres:5432/meelo
      JWT_SECRET: changez-moi-en-production-32-chars-min
      ADMIN_EMAIL: admin@example.com
      ADMIN_PASSWORD: changez-moi-aussi
      SCAN_INTERVAL: "3600"
      TRANSCODING_ENABLED: "true"
      FFMPEG_PATH: /usr/bin/ffmpeg
    volumes:
      - ./data/backend:/app/data
      - ./music:/music:ro
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 5s
      retries: 3

  meelo-frontend:
    image: ghcr.io/arthi-2004/meelo-frontend:latest
    container_name: meelo-frontend
    restart: unless-stopped
    depends_on:
      - meelo-backend
    ports:
      - "8081:3000"
    environment:
      API_URL: http://meelo-backend:8080
      PUBLIC_URL: https://meelo.example.com

  postgres:
    image: postgres:16-alpine
    container_name: meelo-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: meelo
      POSTGRES_PASSWORD: meelo
      POSTGRES_DB: meelo
    volumes:
      - ./data/db:/var/lib/postgresql/data
```

### Option 2 : Installation manuelle

Cloner le monorepo `git clone https://github.com/Arthi-2004/Meelo.git`, installer Poetry + Node 20, lancer le backend via `poetry install && uvicorn meelo.main:app --reload` (PostgreSQL requis), puis le frontend via `pnpm install && pnpm dev`. Pour la prod : `pnpm build` (génère un bundle statique servi par Nginx) + le backend derrière **Gunicorn + Uvicorn workers** dans un **systemd unit**. Prévoir 2-4 Go de RAM minimum pour 100 000 pistes.

## ⚙️ Configuration

Meelo se configure via **variables d'environnement** (12-factor) ou un fichier `.env` à la racine du backend. Les paramètres clés :

- `DATABASE_URL` : connexion PostgreSQL (obligatoire, SQLite déprécié en prod).
- `JWT_SECRET` : **obligatoire**, 32 caractères min, unique par instance.
- `SCAN_INTERVAL` : intervalle de re-scan en secondes (défaut 1 h).
- `TRANSCODING_ENABLED` + `FFMPEG_PATH` : active le transcodage à la volée.
- `LISTENBRAINZ_TOKEN` / `LASTFM_API_KEY` : scrobbling.
- `MAX_UPLOAD_SIZE` : taille max des uploads (pour la fonction d'upload web).

L'UI web propose un **premier wizard** : login admin, ajout du dossier de musique, choix du thème, configuration des providers de métadonnées (Spotify, MusicBrainz, Discogs). Toute la config peut ensuite être éditée depuis **Settings → Server** (changements persistés en base).

## 🔄 Alternatives

**Open Source / Self-Hosted :**

- [[app-navidrome]] — Référence en Go, ultra-léger, plus mature.
- [[app-funkwhale]] — Fédéré (ActivityPub), axé podcasts et audio social.
- [[app-koel]] — UI plus "design", Laravel + Vue, plus gourmand.
- [[app-gonic]] — Subsonic-compatible en Go, minimaliste.
- [[app-jellyfin]] — Polyvalent (vidéo + musique) avec plugins.
- [[app-kavita]] — Plus orienté livres/mangas (autre catégorie).

**Propriétaire :**

- **Plex** + Plexamp — L'excellent Plexamp (gratuit avec Plex Pass) offre une expérience musicale aboutie, mais l'écosystème reste fermé et payant.
- **Spotify + Serveur personnel** — Approche hybride, perd l'intérêt du self-hosted.
- **Apple Music iCloud Library** — Verrouillage total, aucun contrôle.

## 🔒 Sécurité

- **Reverse proxy HTTPS obligatoire** (Traefik, Caddy, Nginx Proxy Manager) — Meelo ne gère pas le TLS nativement.
- **JWT_SECRET** : générer une chaîne aléatoire de 64 caractères (`openssl rand -hex 32`), **ne jamais** commiter le `.env`.
- **PostgreSQL** : mot de passe fort, **ne pas exposer le port 5432** sur l'interface réseau, uniquement via le réseau Docker.
- **Dossier musique en `:ro`** : `read-only` dans le compose, Meelo n'écrit jamais dedans (sauf si vous activez l'upload web, dans ce cas prévoir un dossier `uploads/` séparé).
- **Rate limiting** : activer CrowdSec/Fail2ban au niveau du reverse proxy, Meelo ne l'implémente pas en natif.
- **Mises à jour** : suivre les releases GitHub, le projet est jeune (alpha/beta) — ne pas déployer en prod critique sans tests.
- **Sauvegardes** : `pg_dump` régulier de la base + le dossier `data/` (cache transcodage, illustrations).

## 📚 Ressources

- Site officiel : https://meeloapp.github.io/Meelo/
- Documentation : https://github.com/Arthi-2004/Meelo/wiki
- Repository : https://github.com/Arthi-2004/Meelo
- Issues : https://github.com/Arthi-2004/Meelo/issues
- Discord communautaire : https://discord.gg/meelo
- Démo en ligne : https://demo.meeloapp.github.io (compte démo fourni)
- API Subsonic : https://www.subsonic.org/pages/api.jsp

## 🔗 Pages Liées

- [[cat-music]] — Catégorie parente
- [[app-navidrome]] — Concurrent Go, plus mature et plus léger
- [[app-funkwhale]] — Alternative fédérée ActivityPub
- [[app-koel]] — Concurrent PHP/Vue avec UI "premium"
- [[app-gonic]] — Subsonic-compatible minimaliste
- [[app-symfonium]] — Client Android recommandé
- [[app-feishin]] — Client desktop multi-plateforme
- [[recettes-docker-compose]] — Templates Docker Compose
- [[securisation-home-lab]] — Bonnes pratiques sécurité
- [[app-traefik]] — Reverse proxy HTTPS
