Files
wiki/Catalogue-Self-Hosted/apps/app-polaris.md
T
2026-06-09 18:40:21 +02:00

6.8 KiB

title, created, updated, type, tags, confidence, contested, sources
title created updated type tags confidence contested sources
Polaris 2026-06-07 2026-06-07 app
catalogue
music
music-streaming
polaris
typescript
svelte
discovery
rust
medium true
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é)

# 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 :

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 :

[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

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

🔗 Pages Liées