Maloja
Self-hosted music scrobbling and listening statistics server
Maloja is a self-hosted music scrobble database and statistics server, an alternative to Last.fm. It records what you listen to and generates charts, pulses, and listening insights over time.
Key features
- Self-hosted scrobbling
- Listening charts and pulses
- Last.fm import
- REST API
Pros & cons
Strengths
- Owns your listening data
- Lightweight
Trade-offs
- No music playback
- Companion tool only
Maloja replaces
Last reviewed Sep 13, 2026 · 783 words
Maloja does one job. Every time a track finishes playing somewhere, a client sends Maloja the artist, title and timestamp, it stores that row forever, and it draws charts from the rows: top artists this month, tracks by year, a "pulse" of how much you listened each week. It does not play music, store files or recommend anything. Understand that and the rest of the setup is 15 minutes; expect a music server and you will be confused about why there is no library.
It replaces Last.fm's database, not Last.fm's network
Maloja is GPL-3.0, written in Python, first released in 2018, with 1,807 GitHub stars at the time of writing and an Easy difficulty rating that is earned. The thing you give up versus Last.fm is the social layer: no friends, no "similar listeners", no recommendations built from a million other accounts. The thing you get is a listening history that is yours, with no ads, no account to be terminated and no data policy to read. Whether that trade is worth it comes down to whether you actually look at other people's profiles. In my experience almost nobody does, and the charts are what people keep Last.fm for.
Three API dialects, so almost every player already speaks it
The reason Maloja is easy to feed is that it accepts scrobbles in three formats: its own native API, the Last.fm-compatible submission protocol, and the ListenBrainz-compatible one. Any player with a "custom scrobble URL" field works. Practically:
Navidrome scrobbles to Maloja through its ListenBrainz-style endpoint, so a server built along the lines of your own Spotify with Navidrome gets a history with one config change. Plex, Jellyfin, Spotify and a dozen other sources go through multi-scrobbler, which watches those services and forwards plays; running both containers side by side is the standard pattern. Mobile players that support Last.fm with a custom server URL, and desktop players with a ListenBrainz option, point straight at Maloja.
The container is small and the config is an env file
Docker is the sane deployment:
services:
maloja:
image: krateng/maloja:latest
ports:
- "42010:42010"
environment:
- MALOJA_DATA_DIRECTORY=/mljdata
- MALOJA_FORCE_PASSWORD=change-this-once
volumes:
- ./maloja-data:/mljdata
restart: unless-stopped
Port 42010 is the default. The MALOJA_FORCE_PASSWORD value becomes the admin password on first start; after that, log in, generate an API key in the admin area, and put that key into each client. The data directory holds a SQLite database and a small set of rule files, so the whole state is a folder you can rsync. 256 MB of RAM covers it with room to spare, and it idles well under 100 MB, which makes it one of the cheapest services on any box.
Import your history first, then fix the names
Maloja imports from a Last.fm CSV export, a ListenBrainz export and Spotify's extended streaming history, so a decade of plays arrives in one command. Do this before wiring up live clients, because the second thing you will spend time on is normalisation. Scrobblers disagree about whether "feat." goes in the artist or the title, and a decade of exports contains every variant. Maloja's rules files let you merge artists, fix titles and set associations once, and the rules apply to past and future scrobbles alike. Budget an evening for it if your history is large; the charts are only as clean as your artist names.
What it is not, plainly
It has no playback, so it is not a media server and lives beside one. It has no multi-user support in the Last.fm sense; one instance is one person's history, and a household runs one container per person. It has no mobile app, though the web interface is fine on a phone. And it is a one-maintainer project: releases are irregular, and the correct response to that risk is the same folder backup you should be taking anyway, because the data format is plain SQLite and nothing about it locks you in.
What I'd do
Run Maloja next to Navidrome, wire Navidrome's scrobbling to it, add multi-scrobbler only if Spotify or Plex plays need to count too, import the Last.fm history on day one, and spend the first evening on artist rules. Then leave it alone. It is the rare self-hosted service that needs nothing from you after setup except a folder in the nightly backup, and for a listening history you expect to keep for 20 years, that is exactly the property you want.
Similar media servers apps
Jellyfin
Media ServersFree software media system for streaming your library
Replaces Plex, Emby
qBittorrent
Media ServersBittorrent client that aims to be a good alternative to all other
Replaces µTorrent
SRS
Media ServersA simple, high efficiency and real-time video server, supports RTMP,
Navidrome
Media ServersModern music streaming server for your collection
Replaces Spotify
Kodi
Media ServersOpen-source home theater and media center
Replaces Plex
Koel
Media ServersPersonal music streaming server with an elegant interface
Replaces Spotify