---
title: Maloja
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, music, scrobble, statistics, lastfm, maloja, python, flask]
confidence: high
contested: false
sources:
  - https://selfh.st/apps/?tag=Music
  - https://github.com/krateng/maloja
  - https://maloja.krateng.ch/
---

# 📊 Maloja

> Serveur de **scrobbling** auto-hébergé compatible **Last.fm / ListenBrainz / Subsonic** :追踪 vos écoutes, génère des statistiques détaillées (top artistes, top pistes, périodes, pandoradio) et expose tout via une API ouverte.

## 📋 Informations Générales

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://maloja.krateng.ch/ |
| **GitHub** | https://github.com/krateng/maloja |
| **License** | GPL-3.0 |
| **Langage** | Python (Flask) |
| **Étoiles** | ⭐ 87 (2 000+ sur GitHub) |
| **Dernière MAJ** | 2025-05-18 |
| **Catégorie** | [[cat-music]] |

## 📝 Description

Maloja est l'équivalent self-hosted de **Last.fm** (le service de scrobbling historique), sans tracking commercial, sans pub, et avec des **statistiques bien plus poussées**. Conçu par le développeur allemand `krateng`, le projet vise les mélomanes qui veulent **conserver leur historique d'écoute de manière privée** sur leur propre serveur, tout en profitant de visualisations riches (heatmaps, top charts, timelines, découvertes temporelles).

Fonctionnalités principales :

- **Scrobbling** : Maloja accepte les scrobbles via son API propriétaire, mais aussi en mode **proxy** vers Last.fm (vous scrobblez sur votre Maloja, il forwarde à Last.fm si vous voulez garder les deux). Compatible **ListenBrainz** et **Subsonic** (donc Navidrome, Gonic, Airsonic, etc. peuvent scrobbler vers Maloja automatiquement).
- **Statistiques** : top artistes, top albums, top pistes sur différentes périodes (semaine, mois, année, all-time), heatmaps calendaires (style GitHub contributions), top par jour de la semaine, par heure, par durée, par genre.
- **Pandoradio** : génère des radios personnalisées à partir d'un seed (artiste/album/piste) — proches de Spotify Radio.
- **Import/Export** : import des scrobbles Last.fm (CSV), export des données en JSON.
- **Multi-utilisateurs** : comptes séparés, chacun a ses stats (idéal pour une famille).
- **API ouverte** : endpoints REST pour tout (scrobble, query, charts), exploitable par des scripts externes.
- **Charts générés** : certificats « top X de l'année » à partager sur les réseaux, façon Spotify Wrapped mais à la demande.

Cas d'usage : « Je veux arrêter de filer mes données d'écoute à Last.fm mais je veux garder les stats et les scrobbles » → Maloja est **LE** choix naturel.

## 🚀 Installation

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

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

services:
  maloja:
    image: ghcr.io/krateng/maloja:latest
    container_name: maloja
    restart: unless-stopped
    ports:
      - "42010:42010"
    environment:
      MALOJA_DATA_DIR: /data
      MALOJA_LISTEN_PORT: 42010
      MALOJA_HOSTNAME: maloja.example.com
      MALOJA_FORCE_PASSWORD: ChangeM3_MALOJA
      MALOJA_TIMEBETWEEN_SCANS: 30
    volumes:
      - ./data:/data
    healthcheck:
      test: ["CMD", "wget", "-q", "--spider", "http://localhost:42010/health"]
      interval: 60s
      timeout: 5s
      retries: 3
```

Premier lancement : visiter `http://localhost:42010`, créer le compte admin (mot de passe par défaut `ChangeM3_MALOJA` à changer immédiatement).

### Option 2 : Installation manuelle (simple)

Maloja a un **installateur dédié** :

```bash
curl -L https://raw.githubusercontent.com/krateng/maloja/master/install.sh | sh
```

Le script crée un user `maloja`, installe dans `/var/lib/maloja`, configure un service systemd, ouvre le port 42010. Marche sur Debian/Ubuntu.

### Option 3 : pip (développement)

```bash
pip install malojaserver
maloja run
```

## ⚙️ Configuration

- **Auth admin** : premier compte créé devient admin, mot de passe à changer via `Settings`.
- **Multi-users** : `Settings → Users`, créer des comptes, chacun a son namespace de scrobbles.
- **Scrobbling API** : URL `https://maloja.example.com/apis/native/<scrobble>` (méthode POST) ou `…/apis/listenbrainz` (compatible LB).
- **Proxies** :
  - **Last.fm** : `Settings → Proxies → Last.fm`, votre Maloja forwarde les scrobbles à Last.fm.
  - **ListenBrainz** : idem.
  - **Subsonic** : tous les serveurs compatibles (Navidrome, Gonic, etc.) supportent un endpoint scrobble Subsonic, à pointer vers Maloja.
- **Pandoradio rules** : `Settings → Rules`, règles de recommandation (tags, dates d'ajout, co-écoutes).
- **Certificats** : Maloja peut générer un « Wrapped » annuel en PNG/PDF via `Settings → Top Artists/Tracks`.
- **Backup** : `./data` (SQLite + fichiers JSON), tout y est, backup incrémental simple.

## 🔄 Alternatives

### Open Source
- [[app-navidrome]] — Intègre le scrobbling Last.fm nativement, stats basiques.
- [[app-koel]] — Scrobbling Last.fm, stats simples.
- [[app-funkwhale]] — Historique d'écoute intégré.
- [[app-music-assistant]] — Historique mais stats limitées.
- [[app-multi-scrobbler]] — Multi-source → multi-destination (peut compléter Maloja).
- [[app-koito]] — Scrobbler moderne écrit en Go.
- [[app-listenbrainz]] — Le service public LB (non self-hosted, mais compatible).

### Propriétaires (ce que cette app remplace)
- Last.fm — Le service de scrobbling de référence (depuis 2002, racheté par CBS/Audacy).
- Spotify Wrapped — Stats de fin d'année.
- Apple Music Replay — Stats annuelles.
- YouTube Music Recap — Stats.
- Deezer Stats — Historique.

## 🔒 Sécurité

- **HTTPS obligatoire** : reverse proxy Traefik/Caddy, le scrobbling passe par POST et contient vos écoutes (métadonnée personnelle).
- **Auth forte** : mot de passe admin 16+ caractères, 2FA non supporté nativement (limitation connue) → compenser avec Authelia/Authentik devant en mode SSO.
- **API keys Last.fm** : si proxy activé, stocker dans Maloja (chiffré en base).
- **Rate limiting** : pas natif, placer CrowdSec devant, surtout si proxy Last.fm activé (peut se faire bannir par Last.fm en cas de pic).
- **Backups** : `./data` (SQLite + cache) à sauvegarder, c'est votre seule source d'historique.
- **Pas d'auth pour l'écriture API** : l'endpoint scrobble accepte n'importe qui par défaut → activer `MALOJA_FORCE_PASSWORD` (admin) et créer des tokens par utilisateur.
- **Mise à jour** : rythme lent, vérifier la compat avec le client Subsonic/Navidrome après upgrade.

## 📚 Ressources

- Site officiel : https://maloja.krateng.ch/
- Documentation : https://github.com/krateng/maloja/wiki
- Repository : https://github.com/krateng/maloja
- Démo : https://maloja.krateng.ch/demo
- API doc : https://github.com/krateng/maloja/blob/master/API.md
- Reddit : https://www.reddit.com/r/selfhosted/search/?q=maloja
- Comparatif Last.fm : https://github.com/krateng/maloja/wiki/Comparison

## 🔗 Pages Liées

- [[cat-music]] — Catégorie parente
- [[app-navidrome]] — Subsonic-compatible, peut scrobbler vers Maloja
- [[app-gonic]] — Subsonic-compatible Go
- [[app-koito]] — Alternative scrobbler moderne
- [[app-multi-scrobbler]] — Multi-scrobbler complémentaire
- [[app-listenbrainz]] — Service public compatible
- [[app-traefik]] — Reverse proxy HTTPS
- [[app-authelia]] — SSO 2FA recommandé devant Maloja
- [[recettes-docker-compose]] — Templates Docker
- [[securisation-home-lab]] — Bonnes pratiques
