---
title: Navidrome
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, music, music-streaming, navidrome, go, subsonic, opensaubsonic, opensubsonic, mpv]
confidence: high
contested: false
sources:
  - https://selfh.st/apps/?tag=Music
  - https://github.com/navidrome/navidrome
  - https://www.navidrome.org/
---

# 🎶 Navidrome

> Serveur moderne de streaming musical écrit en Go, ultra-léger, compatible **OpenSubsonic** et conçu pour gérer des bibliothèques massives (testé à ~900 000 pistes).

## 📋 Informations Générales

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://www.navidrome.org/ |
| **GitHub** | https://github.com/navidrome/navidrome |
| **License** | GPL-3.0 |
| **Langage** | Go |
| **Étoiles** | ⭐ 1 523 (15 900+ sur GitHub, ordre de grandeur selfh.st) |
| **Dernière MAJ** | 2026-06-06 |
| **Catégorie** | [[cat-music]] |

## 📝 Description

Navidrome (« nadia » + « drome ») est un projet né en 2017, devenu la référence des serveurs de streaming musical self-hosted modernes. Écrit en **Go**, il se distingue par sa **consommation mémoire dérisoire** (≤ 100 Mo pour 25 000 pistes), sa **vitesse de scan exceptionnelle** et sa capacité à gérer des **bibliothèques gigantesques** sans ralentissement, le tout avec un binaire unique ou une image Docker minimaliste. Le développement est très actif (releases mensuelles, plus de 100 contributeurs).

Côté fonctionnalité, Navidrome implémente intégralement l'API **Subsonic/OpenSubsonic**, ce qui rend la quasi-totalité des clients mobiles et desktop compatibles : **DSub** (Android), **Substreamer**, **Symfonium** (Android), **play:Sub** (iOS), **Sublime Music** (desktop), **Feishin** (le nouveau client multi-plateforme), **Submariner**, etc. L'UI web intégrée est sobre et fonctionnelle avec transcodage à la volée (FLAC → MP3/Opus selon le bitrate du client), gestion multi-bibliothèques, utilisateurs et permissions fines, scrobbling Last.fm, et intégration native avec les **Home Assistant Media Browser**.

Cas d'usage typique : « Je veux remplacer Spotify par ma propre bibliothèque FLAC stockée sur un NAS, accessible depuis mon iPhone en 4G, sans Latence, sans pub, sans tracking, sur un Raspberry Pi ». Navidrome coche **toutes** les cases.

## 🚀 Installation

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

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

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    restart: unless-stopped
    user: 1000:1000
    ports:
      - "4533:4533"
    environment:
      ND_BASEURL: https://navidrome.example.com
      ND_LOGLEVEL: info
      ND_SCANSCHEDULE: 1h
      ND_TRANSCODINGCACHESIZE: "100"
      ND_ENABLETRANSCODINGCONFIG: "true"
      ND_SPOTIFY_ID: ""
      ND_SPOTIFY_SECRET: ""
      ND_LASTFM_APIKEY: ""
      ND_LASTFM_SECRET: ""
      ND_JUKEBOX_ENABLED: "true"
    volumes:
      - ./data:/data
      - ./music:/music:ro
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:4533/health"]
      interval: 30s
      timeout: 5s
      retries: 3
```

Premier lancement : créer l'utilisateur admin via l'UI web, puis ajouter le dossier `/music` dans Settings → Library.

### Option 2 : Installation manuelle

Télécharger le binaire depuis la page des [releases GitHub](https://github.com/navidrome/navidrome/releases) (`navidrome_<version>_<os>_<arch>.tar.gz`), le placer dans `/usr/local/bin/`, créer un user `navidrome`, configurer `/etc/navidrome/navidrome.toml` (ou variables d'environnement), et un service systemd minimal :

```ini
[Unit]
Description=Navidrome
After=network.target

[Service]
User=navidrome
ExecStart=/usr/local/bin/navidrome --configfile /etc/navidrome/navidrome.toml
Restart=always

[Install]
WantedBy=multi-user.target
```

## ⚙️ Configuration

- **Bibliothèques** : une ou plusieurs, avec chemins distincts et ACL par utilisateur (Musique / Livres audio / K7 familiales par exemple).
- **Transcodage** : `ffmpeg` est utilisé pour le streaming, configurable par dossier (qualité par défaut, qualité mobile, format de sortie).
- **Métadonnées** : extraction automatique, scan incrémental, scan programmé (`ND_SCANSCHEDULE`).
- **Auth** : locale par défaut, header `X-Forwarded-User` pour SSO (Authelia/Authentik), LDAP possible via proxy.
- **Scrobbling Last.fm** : `ND_LASTFM_*` (clé API gratuite sur `last.fm/api`).
- **Spotify** : `ND_SPOTIFY_*` pour les liens d'artistes et les previews 30s.
- **Jukebox mode** : permet de streamer du device qui héberge Navidrome (utile sur Raspberry Pi avec sortie audio locale).
- **Backup** : ne sauvegarder que `./data` (base SQLite + cache) ; la musique elle-même est sur le NAS et se rescanne.

## 🔄 Alternatives

### Open Source
- [[app-koel]] — PHP/Vue, UI plus moderne mais plus lourd.
- [[app-ampache]] — PHP historique, Subsonic-compatible, plus riche fonctionnellement.
- [[app-funkwhale]] — Fédéré (ActivityPub), orienté podcasts.
- [[app-airsonic]] — Java, Subsonic-compatible, plus gourmand.
- [[app-gonic]] — Go, fork d'Airsonic-Advanced, minimaliste mais moins complet.
- [[app-jellyfin]] — Plus généraliste (vidéo + audio + Live TV).
- [[app-azuracast]] — Pour le côté webradio.

### Propriétaires (ce que cette app remplace)
- Spotify — Streaming freemium.
- Apple Music / iTunes Match — Synchronisation de bibliothèque.
- Tidal — HiFi/FLAC.
- Google Play Music (fermé) — Successeur YouTube Music.
- Subsonic (commercial) — Le produit original Subsonic dont Navidrome est la version libre moderne.

## 🔒 Sécurité

- **HTTPS obligatoire** : reverse proxy Traefik ou Caddy (l'API OpenSubsonic est non chiffrée nativement).
- **Mode admin** : créer un compte admin avec mot de passe fort (32+ caractères) puis créer des comptes standard.
- **Trusted proxies** : `ND_BASICAUTH_ENABLED=false` derrière Traefik, configurer `X-Forwarded-*` proprement.
- **Rate limiting** : activer CrowdSec/Fail2ban sur le reverse proxy, l'API ne l'ayant pas en natif.
- **Permissions dossiers** : monter `./music` en `:ro` (read-only) dans le conteneur, ne JAMAIS rendre le dossier musique accessible en écriture.
- **Mise à jour** : tag `latest` ou `stable`, releases fréquentes, suivre les CVE.
- **Logs** : `ND_LOGLEVEL=info` en prod, `debug` temporairement en cas de souci.

## 📚 Ressources

- Site officiel : https://www.navidrome.org/
- Documentation : https://www.navidrome.org/docs/
- Repository : https://github.com/navidrome/navidrome
- Wiki / FAQ : https://www.navidrome.org/docs/overview
- Liste clients : https://www.navidrome.org/apps
- Communauté : https://discord.gg/xh7j7yF
- Reddit : https://www.reddit.com/r/navidrome/
- Subsonic API : https://www.subsonic.org/pages/api.jsp

## 🔗 Pages Liées

- [[cat-music]] — Catégorie parente
- [[app-koel]] — Concurrent PHP/Vue, plus « joli »
- [[app-ampache]] — Concurrent PHP historique
- [[app-funkwhale]] — Alternative fédérée
- [[app-gonic]] — Subsonic-compatible Go minimaliste
- [[app-maloja]] — Scrobbler Last.fm compatible
- [[app-traefik]] — Reverse proxy HTTPS
- [[app-authelia]] — SSO optionnel
- [[recettes-docker-compose]] — Templates Docker
- [[securisation-home-lab]] — Bonnes pratiques
