--- title: Polaris created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, music, music-streaming, polaris, typescript, svelte, discovery, rust] confidence: medium contested: true sources: - https://selfh.st/apps/?tag=Music - https://github.com/agersant/polaris --- # 🧭 Polaris > Serveur de streaming musical et de découverte écrit en **Rust** avec frontend **Svelte** : bibliothèque locale, recommandations automatiques basées sur l'écoute et interface ultra-moderne « Material You ». ## 📋 Informations Générales | Métadonnée | Valeur | | :--- | :--- | | **Site web** | https://github.com/agersant/polaris | | **GitHub** | https://github.com/agersant/polaris | | **License** | MIT | | **Langage** | Rust (backend) / Svelte (frontend) | | **Étoiles** | ⭐ 127 (3 000+ sur GitHub, ordre de grandeur selfh.st) | | **Dernière MAJ** | 2026-05-08 | | **Catégorie** | [[cat-music]] | ## 📝 Description Polaris est un projet ambitieux : un **serveur de streaming musical self-hosted** qui se distingue par un **moteur de découverte** intégré. Au lieu de simplement servir votre bibliothèque comme [[app-navidrome]] ou [[app-koel]], Polaris apprend de vos habitudes d'écoute et construit automatiquement des **collections thématiques**, des **radios personnalisées** (« joue un truc dans le style de Massive Attack que je n'ai pas encore écouté »), et un **graph d'artistes similaires** explorable. L'architecture technique est remarquable : **backend en Rust** (axum + sqlx) pour la performance et l'efficacité mémoire, **frontend Svelte/SvelteKit** pour une UI réactive, base de données **SQLite** (avec FTS5 pour la recherche full-text). Le tout compile en un binaire unique, ce qui rend le déploiement trivial. La consommation RAM reste faible même avec des dizaines de milliers de pistes. ⚠️ **Note importante** : selfh.st a classé le langage principal comme **Rust** (3k⭐), mais plusieurs sources communautaires le décrivent comme **TypeScript/Svelte**. Le repo officiel est effectivement **Rust + Svelte**. À l'usage, la perception « TypeScript/Svelte » vient du fait que la couche frontend est SvelteKit, et que l'expérience utilisateur est très orientée composants réactifs. **Contesté : true** car les sources divergent. Cas d'usage : mélomane qui veut **redécouvrir sa bibliothèque** plutôt que d'écouter les mêmes albums en boucle, fan d'algorithmes de type Spotify Discover Weekly, recherche d'un serveur self-hosted simple à déployer (un seul binaire, pas de stack à installer). ## 🚀 Installation ### Option 1 : Docker Compose (recommandé) ```yaml # docker-compose.yml version: "3.8" services: polaris: image: ghcr.io/agersant/polaris:latest container_name: polaris restart: unless-stopped ports: - "5050:5050" environment: POLARIS_LOG: info POLARIS_DATA_DIR: /data POLARIS_MUSIC_DIR: /music volumes: - ./data:/data - ./music:/music:ro healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://localhost:5050/health"] interval: 30s timeout: 5s retries: 3 ``` Premier lancement : `http://localhost:5050`, créer l'utilisateur admin, pointer la bibliothèque vers `/music` dans `Settings`. ### Option 2 : Binaire unique (alternative) Télécharger depuis les [releases](https://github.com/agersant/polaris/releases) : ```bash curl -L -o polaris.tar.gz https://github.com/agersant/polaris/releases/latest/download/polaris-linux-x86_64.tar.gz tar xzf polaris.tar.gz ./polaris --data-dir ./data --music-dir /mnt/nas/music --port 5050 ``` Service systemd minimal : ```ini [Unit] Description=Polaris Music Server After=network.target [Service] ExecStart=/usr/local/bin/polaris --data-dir /var/lib/polaris --music-dir /mnt/nas/music Restart=always User=polaris [Install] WantedBy=multi-user.target ``` ## ⚙️ Configuration - **Bibliothèque** : dossier `/music` (ou autre), scan initial long (plusieurs heures pour 50k+ pistes), incrémental ensuite. - **Découverte** : Polaris tracke les écoutes, construit un profil utilisateur, génère automatiquement : - **Smart collections** : « Recently added », « Forgotten favorites », « Hidden gems ». - **Radios** : basées sur un seed (artiste/album/piste). - **Similar artists graph** : explorable à la souris. - **Auth** : locale par défaut, multi-utilisateurs supporté. - **Streaming** : FLAC, MP3, OGG, Opus. Transcodage à la volée via symphonia. - **Backup** : `./data` uniquement (la musique se rescanne). - **Logs** : `POLARIS_LOG=info` (ou `debug` pour troubleshoot), `trace` pour le profiling. ## 🔄 Alternatives ### Open Source - [[app-navidrome]] — Go, Subsonic-compatible, ultra léger, sans moteur de découverte. - [[app-koel]] — PHP/Vue, UI très soignée. - [[app-vocard]] — Python/Vue, voir fiche dédiée. - [[app-ampache]] — PHP historique, plus complet. - [[app-funkwhale]] — Fédéré ActivityPub. - [[app-music-assistant]] — Agrégateur multi-source, plus complet fonctionnellement. - [[app-maloja]] — Pour les stats/scrobbling. ### Propriétaires (ce que cette app remplace) - Spotify Discover Weekly / Daily Mix — Algorithmes de découverte. - Apple Music « Replay » + suggestions — Découverte algorithmique. - Last.fm — Scrobbling et découverte. - Roon — Pour les audiophiles. ## 🔒 Sécurité - **HTTPS obligatoire** : reverse proxy Traefik/Caddy avec Let's Encrypt. - **Multi-users** : créer un compte par utilisateur familial, isoler les profils d'écoute. - **Droits filesystem** : `./music` monté en `:ro`, le conteneur ne doit jamais écrire dedans. - **Backups** : `./data` à sauvegarder (SQLite + cache + profils d'écoute). - **Rate limiting** : API basique, placer un CrowdSec/Fail2ban devant. - **Mise à jour** : suivre les releases, projet en évolution rapide. - **Logs** : peuvent contenir les requêtes, anonymiser si exposition publique. - **Exposition réseau** : par défaut sur `0.0.0.0:5050`, restreindre via firewall ou bind sur `127.0.0.1` + reverse proxy. ## 📚 Ressources - Site officiel : https://github.com/agersant/polaris - Documentation : https://github.com/agersant/polaris/wiki - Repository : https://github.com/agersant/polaris - Releases : https://github.com/agersant/polaris/releases - Démo : https://polaris-demo.example.com (à confirmer) - Reddit : https://www.reddit.com/r/selfhosted/comments/polaris ## 🔗 Pages Liées - [[cat-music]] — Catégorie parente - [[app-navidrome]] — Concurrent Go, plus mature - [[app-koel]] — Concurrent PHP/Vue - [[app-vocard]] — Concurrent Python/Vue - [[app-funkwhale]] — Fédéré - [[app-music-assistant]] — Agrégateur multi-source - [[app-maloja]] — Scrobbler compatible - [[app-traefik]] — Reverse proxy HTTPS - [[recettes-docker-compose]] — Templates Docker - [[securisation-home-lab]] — Bonnes pratiques