Skip to content

About

Spotify on Linux in ~60 MB: Spotify's official Soloist player as an MPRIS player, so bars, media keys and playerctl just work.

Topics

Resources

Contributing

Stars

62 stars

Watchers

0 watching

Forks

Repository files navigation

soloist-mpris

CI Release License: MIT

Spotify on Linux in about 60 MB of RAM, with your bar, media keys and playerctl working.

Spotify's desktop app is a whole Chromium browser running one web page. In 2026 Spotify released Soloist, its official headless player for Linux: a tiny Spotify Connect speaker with no window and no browser. It sounds great and costs almost nothing, but the rest of your desktop cannot see it. Your bar shows nothing, play/pause does nothing, and playerctl finds no player.

This kit fixes that. It installs Soloist, keeps it updated, and adds soloist-mpris, a small Rust bridge that publishes Soloist as a standard MPRIS player.

What you get

  • Spotify as a background service. It starts with your session and shows up in Spotify Connect as this computer.
  • Your desktop knows what is playing. Waybar, Quickshell, GNOME, KDE and any other MPRIS client get the title, artist, album, cover art and progress.
  • Media keys and playerctl work: play/pause, next, previous, seek, volume, shuffle and repeat.
  • 15x lighter than the desktop app. About 60 MB of RAM and 3% of one core while playing, against more than 900 MB for Spotify's app (benchmark).
  • Official playback. Soloist is Spotify's own player, so it is not affected by the audio key refusals that stop librespot-based clients on many accounts.
  • Restarts do not stop the music. When Soloist restarts while it is playing (a weekly update, a reinstall), the bridge takes playback back within seconds. After a reboot, or when another device had the music, it leaves things as they are.
  • No expiry surprises. Soloist builds stop working after 90 days, so a weekly timer fetches the current one from Spotify.

How light is it?

Same laptop (ThinkPad T480, i5-8350U, Arch Linux), same song, 60 seconds of playback each, measured with bench/measure.sh:

RAM (PSS) CPU (one core) Installed size
Soloist + soloist-mpris 61 MB 3% 40 MB
Spotify desktop app, window hidden 922 MB 10% 387 MB
Spotify desktop app, window open 943 MB 27% 387 MB

Installed size is the program files on disk (soloist and soloist-mpris against Spotify's install directory), caches excluded.

That is 15 times less memory and less than a third of the CPU, even when the official app sits hidden in the background. The desktop app is a Chromium browser showing Spotify's web page, spread over 9 processes. Here, three small processes play the music and nothing renders at all.

Run the same measurement on your machine while music plays:

bench/measure.sh '^(soloist|soloist-mpris)$' 60   # this kit
bench/measure.sh '^spotify$' 60                   # the desktop app

Choosing what to play

Soloist is a speaker: it has no library or search of its own. You pick music with any Spotify Connect controller and play it here:

  • the Spotify app on your phone (devices icon, then this computer);
  • open.spotify.com in any browser, closed again when the music is going;
  • a native client such as Spotifast, used as a remote control;
  • the terminal: soloist ctl play spotify:playlist:...

Once music plays, everything else comes from your desktop: keys, bar, playerctl.

Requirements

  • Linux on x86_64 or arm64 (arm32 works from a clone with Rust), with a systemd user session and PipeWire or PulseAudio. Soloist is Linux-only: Spotify publishes no Windows or macOS build.
  • A Spotify Premium account to create the Soloist API key. Once it runs, anyone in the house can play on it, Free accounts included.

Install

curl -fsSL https://github.com/TobiasVeiga00/soloist-mpris/releases/latest/download/install.sh | bash

That is the whole setup. The installer:

  1. downloads the bridge for your machine and checks its checksum;
  2. downloads Soloist from Spotify;
  3. opens the Spotify for Developers dashboard and asks for your key: on the Spotify Soloist API Key page, accept the terms and generate one. It is stored in ~/.config/soloist/env, readable only by you;
  4. starts the services and waits while you pair: open Spotify on your phone, on the same network, tap the devices icon and pick your computer. It stays paired from then on.

If a firewall (ufw or firewalld) would hide the computer from your phone, the installer offers to open it for your local network only while you pair, and closes it again; if the install is cut short, the next run or the uninstall closes it. That is the only step that asks for sudo; everything else stays in your home directory.

Prefer to read it first? curl -fsSLO https://github.com/TobiasVeiga00/soloist-mpris/releases/latest/download/install.sh, read it, then bash install.sh. From a clone, ./install.sh does the same and builds the bridge from source when Rust is installed.

Unattended setup: SOLOIST_API_KEY=... SOLOIST_DEVICE_NAME="Living room" before bash skips the questions; pair later from any Spotify app.

Everyday use

playerctl -p soloist play-pause           # or your media keys
playerctl -p soloist metadata
systemctl --user restart soloist          # restart the player
journalctl --user -u soloist -u soloist-mpris -f

To change the name phones see, add SOLOIST_DEVICE_NAME=Living room to ~/.config/soloist/env and restart soloist.

Troubleshooting

  • Your phone does not see the computer. Put both on the same network and run the installer again: it walks you through pairing.
  • Spotifast says "Spotify refused the audio key". Spotifast tried to play by itself. Pick this computer in its devices menu instead, and do not use Set up playback here. If you already did: sign out of Spotifast, quit it, set "playback_authorized": false in ~/.config/spotifast/settings.json and sign in again.
  • Spotifast shows "Nothing playing" while music plays. In Spotifast's Settings, under Account, choose Authorize your personal app again.

Sharing output to get help? Remove your key first: Soloist only takes it on its command line, so systemctl --user status soloist and ps show it.

Uninstall

curl -fsSL https://github.com/TobiasVeiga00/soloist-mpris/releases/latest/download/install.sh | bash -s -- --uninstall

It keeps your key and pairing; delete ~/.config/soloist and ~/.local/share/soloist to forget them too.

How it works

Spotify app / web / Spotifast  ->  Spotify Connect  ->  soloist (plays the audio)
                                                          |  local WebSocket (127.0.0.1)
              bar, media keys, playerctl  <-  D-Bus MPRIS  <-  soloist-mpris

Soloist runs with its WebSocket API bound to loopback. soloist-mpris follows its events, keeps the playback state and answers MPRIS calls by sending Soloist the matching commands. It reconnects whenever Soloist restarts.

Notes

  • Not affiliated with Spotify. Soloist is Spotify's software under Spotify's terms; it is never redistributed here, only downloaded from Spotify on your machine.
  • Your API key belongs to your account; Spotify's terms ask you not to share it.

MIT licensed. See LICENSE.

About

Spotify on Linux in ~60 MB: Spotify's official Soloist player as an MPRIS player, so bars, media keys and playerctl just work.

Topics

Resources

Contributing

Stars

62 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages