--- title: Koito created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, music, scrobble, listenbrainz, go, typescript, docker] confidence: high contested: false sources: - https://selfh.st/apps/?tag=Music+Streaming - https://github.com/gabehf/Koito - https://koito.io/ --- # 🎌 Koito (小糸) > Scrobbler moderne compatible **ListenBrainz** écrit en Go + TypeScript : UI soignée, import massif depuis Maloja/LastFM/ListenBrainz/Spotify, et **relais** transparent vers un autre scrobbler pendant la phase beta. | Métadonnée | Valeur | | :--- | :--- | | **Site web** | [https://koito.io](https://koito.io/) | | **GitHub** | [https://github.com/gabehf/Koito](https://github.com/gabehf/Koito) | | **License** | MIT | | **Langage** | Go (67.3 %), TypeScript (31.3 %) | | **Étoiles** | ≈810 ⭐ (41 sur selfh.st/apps) | | **Dernière MAJ** | 2026-06-01 (v0.3.2) | | **Catégorie** | [[cat-music]] | ## Description **Koito** (小糸, homophone de *koi to* « avec amour ») est un scrobbler pour **ListenBrainz** conçu par `@gabehf`. Le projet est né d'une frustration avec **Maloja** (l'autre scrobbler auto-hébergé de référence) : le développeur a préféré **reconstruire** que contribuer, principalement pour des raisons d'UI et de design. Koito se positionne comme une **alternative moderne** : design themeable, statistiques élaborées, compatibilité totale avec l'écosystème ListenBrainz (et tout ce qui scrobble vers une URL ListenBrainz custom : Navidrome, [[app-multi-scrobbler]], [[app-koito]] lui-même, etc.). Koito a une particularité rare : il peut fonctionner en **mode relais** (relay). Au lieu de remplacer brutalement votre setup actuel, vous pouvez pointer votre scrobbleur existant (Last.fm, Maloja, etc.) vers Koito, qui relaie ensuite vers la destination finale. Cela permet de tester Koito **sans risque** pendant son développement. C'est d'ailleurs ce que fait le développeur en interne. Fonctionnalités clés : import depuis **Maloja**, **ListenBrainz**, **LastFM** et **Spotify** (historique complet), UI React soignée, page de stats avec visualisations, support des « love »/feedback, compatibilité native avec tout client Subsonic (Navidrome, [[app-lightweight-music-server]], Gonic, etc.) qui pousse vers une URL ListenBrainz custom, refetch automatique des pochettes manquantes au démarrage, support natif des clients MPRIS (Linux desktop), backend rapide en Go. La v0.3 a introduit un **refactor d'image cache** et un redesign UI complet (layout cards, mobile responsive). Koito embarque aussi sa propre API et supporte l'authentification utilisateur. ## Installation ### Docker (recommandé) ```yaml # docker-compose.yml services: koito: image: gabehf/koito:latest container_name: koito ports: - "4110:4110" volumes: - ./koito:/etc/koito restart: unless-stopped environment: - KOITO_LISTEN_ADDR=0.0.0.0:4110 - KOITO_IMAGE_CACHE_DIR=/etc/koito/cache - KOITO_DB_PATH=/etc/koito/koito.db ``` Lancement : `docker compose up -d`, puis `http://localhost:4110`. Créez votre premier utilisateur via la CLI du conteneur (`docker exec -it koito koito create-user ...`). ### Manuelle (Go + npm) ```bash # Backend git clone https://github.com/gabehf/Koito.git cd Koito go build -o koito ./cmd/api ./koito --config /etc/koito/config.toml # Frontend cd client npm install && npm run build ``` ## Configuration Koito utilise un fichier `config.toml` (ou variables d'environnement préfixées `KOITO_`) : - `listen_addr` : `0.0.0.0:4110` - `db_path` : chemin SQLite (par défaut `/etc/koito/koito.db`) - `image_cache_dir` : dossier cache des pochettes/albums - `scrobble_threshold`, `scrobble_interval` : comme sur les autres scrobblers - `import_sources` : `listenbrainz`, `lastfm`, `maloja`, `spotify` - `theme` : `light`, `dark`, `auto` - `enable_relay` : `true` pour fonctionner comme proxy transparent - `timezone` : pour les stats Backend de stockage : **SQLite uniquement** (depuis la v0.3, le code Postgres a été retiré pour simplifier le déploiement). Pour la prod à fort volume, restez sur Maloja ou Listens.co. ## Alternatives **Open Source :** **Maloja** (Python, le plus mature auto-hébergé), **ListenBrainz server** (officiel, MetaBrainz), [[app-multi-scrobbler]] (agrégateur qui pousse vers ListenBrainz), **lastfm-to-listenbrainz** (sync ponctuel), **listenbrainz-export** (backup), **WebScrobbler**, **Pano Scrobbler** (Android, source côté client), **ScrobbleMyLastfm** (Node), **switchify** (script de migration Last.fm → LB), **ytm-to-scrobbler** (YouTube Music → scrobble). **Propriétaire (que cette app remplace) :** Last.fm Pro (≈3 $/mois) qui fournit des stats et charts avancés, **Spotify Wrapped** (annuel seulement, fermé), **Lastify** (cloud), **Pano Scrobbler Premium** (cloud sync). Koito vous offre un dashboard moderne **gratuit, self-hosted et compatible avec l'écosystème ListenBrainz ouvert** (projet MetaBrainz/MusicBrainz). ## Sécurité - Koito n'a pas d'auth intégrée sur l'API HTTP par défaut : **obligatoire** de mettre un reverse proxy (Traefik/Caddy) avec **Authelia**, **Authentik** ou **basic auth** devant l'UI `4110`. - L'API ListenBrainz écoute sur le même port : protégez-la avec un token d'API fort ou limitez l'accès au LAN. - Volume `./koito` à sauvegarder (base SQLite = tout l'historique). Pas de réplication : prévoir un cron `sqlite3 .backup`. - Restez sur l'image taguée (`:latest` ici mais vous pouvez figer `v0.3.2`) car le projet est **explicitement « unstable »** (avertissement du README). - Le `image_cache_dir` peut devenir volumineux : prévoyez un job de nettoyage périodique. ## Ressources - [Dépôt GitHub](https://github.com/gabehf/Koito) - [Site officiel](https://koito.io/) - [Guide d'installation](https://koito.io/guides/installation/) - [Guide d'import](https://koito.io/guides/importing/) - [Démarrage public](https://koito.mnrva.dev/) - [ListenBrainz](https://listenbrainz.org/) — écosystème compatible ## Pages Liées - [[cat-music]] — Catégorie Music - [[recettes-docker-compose]] — Templates Docker Compose - [[app-multi-scrobbler]] — Agrégateur complémentaire - [[app-navidrome]] — Source Subsonic qui scrobble vers Koito - [[securisation-home-lab]] — Reverse proxy + auth