MO

Mopidy

Extensible music server that plays from many sources

Media Servers ★ 8.6k stars Medium setup Apache-2.0

Mopidy is an extensible music server written in Python that plays music from local disk, Spotify, SoundCloud, and other sources. It is controlled through MPD and web clients and is popular for DIY music players.

Key features

  • Plays from multiple backends
  • MPD protocol compatible
  • Rich plugin ecosystem
  • Web client support

Pros & cons

Strengths

  • Highly extensible
  • Great for Raspberry Pi projects

Trade-offs

  • No native UI
  • Requires plugins for most features

Mopidy replaces

Last reviewed Aug 26, 2026 · 812 words

Mopidy is not a Navidrome alternative, and treating it as one is the mistake behind most abandoned installs. Navidrome is a server: it holds your library and streams it to clients. Mopidy is a player: it sits next to a pair of speakers, pulls music from wherever you tell it, and plays it there. The right mental model is "a networked hi-fi component with a Python brain", and once you hold that model the 8,562 stars, the Raspberry Pi following and the "no native UI" complaint all make sense.

What you actually get from a bare install

A fresh Mopidy does nothing. It is a core that knows how to play audio through GStreamer and expose control over two protocols: MPD on port 6600 and HTTP on port 6680. Everything else, including the ability to find a single song, comes from extensions, and the catalogue's "requires plugins for most features" is not an exaggeration. Plan on installing at least three before you hear anything:

sudo python3 -m pip install Mopidy-Local Mopidy-MPD Mopidy-Iris

Mopidy-Local scans a directory of files, Mopidy-MPD lets any MPD client (ncmpcpp, MALP, M.A.L.P., Cantata) drive it, and Mopidy-Iris is the web interface most people settle on, served at http://host:6680/iris/. That trio is the minimum viable jukebox and it runs comfortably in 256 MB.

The source extensions are the reason to choose it

The point of Mopidy over a plain MPD is that backends are pluggable. Mopidy-Jellyfin plays from a Jellyfin library, Mopidy-Subidy from any Subsonic-API server including Navidrome, and there are extensions for SoundCloud, Tidal, YouTube, internet radio and podcasts. That is how Mopidy pairs with a music server rather than competing with it: Navidrome holds the collection and serves your phone; Mopidy on the living-room Pi plays the same collection through the amplifier.

The Spotify backend deserves a specific warning. It has broken and been repaired more than once as Spotify changed its client APIs, and it requires a Premium account when it works at all. Check the extension's current status before you build a project around it, and do not promise anyone in the household that it will keep working.

One INI file configures everything

Configuration lives in /etc/mopidy/mopidy.conf for the system service or ~/.config/mopidy/mopidy.conf when run as a user. Each extension gets a section:

[http]
hostname = 0.0.0.0
port = 6680

[mpd]
hostname = 0.0.0.0

[local]
media_dir = /srv/music

[audio]
output = alsasink

The hostname = 0.0.0.0 lines are the ones people forget; the defaults bind to localhost and the web UI is unreachable from the phone. After editing, sudo mopidyctl local scan builds the local library, and sudo mopidyctl config prints the merged configuration with secrets masked, which is the first thing to run when a backend refuses to load.

Multi-room is a one-line change with Snapcast

The trick that turns one Pi into a whole-house system is pointing Mopidy's audio output at a named pipe that Snapcast reads:

[audio]
output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! filesink location=/tmp/snapfifo

Snapserver picks up the pipe, and every Snapclient on the network plays in sync. That single configuration line is, in my experience, the most compelling reason to run Mopidy at all: no commercial multi-room system lets you feed it from Jellyfin, a Subsonic server, and a shared folder at once.

Raspberry Pi reality

Mopidy publishes an apt repository at apt.mopidy.com, which is the sane way to install on Raspberry Pi OS; it gives you the mopidy system user and service. A Pi Zero 2 W handles local playback and a web client; a Pi 3 or later is more comfortable once you add the HTTP-heavy backends. Audio quality depends entirely on the output stage: the Pi's headphone jack is poor, so budget about 20 to 40 dollars for an I2S DAC HAT and set output = alsasink device=hw:1,0 accordingly. Pi MusicBox, the old all-in-one image, is unmaintained; build from Raspberry Pi OS instead.

What I'd do

Run Navidrome as the library server, following the own-your-Spotify setup, and put Mopidy on a Pi in each room where there are speakers, each with Mopidy-Subidy pointed at Navidrome and Mopidy-Iris for control. Add Snapcast the moment there is a second room. Skip the Spotify extension entirely and treat the library server as the source of truth for your music. Used that way, Mopidy is the best value networked player you can build, and the "no native UI" is a feature: it is a component, and components should not have screens.

Compare Mopidy

21 head-to-head comparisons.

Similar media servers apps