How to: Spotify Soloist on your homeserver

2026-08-16

I have setup Spotify Soloist on my small homeserver and it is working really well. Previously I've been using Raspotify, and it has worked well, although it sometimes hangs. Soloist seems to very stable though. And you'll get lossless audio too. One thing to take into consideration before installing and setting up Soloist is that (from what I understand) you have to have Pulseaudio or Pipewire installed. I only had ALSA installed on my Ubuntu server, so installing Pipewire was the first thing I did. It was a bit of a hassle, but that I won't cover here. Anyhow... Without further ado, let's start!

1. Follow the instructions here: Link to Spotify and Soloist. Create your Developer account, generate an API. There's no need to download the actual binary in at this moment.

2. Create a systemd-file which is the one that starts Soloist at boot, or whenever you want to start it, in .config/systemd/user/ with this content. Don't forget to insert the name you want to show up in Spotify-connect, or your API-string that you generated in the Spotify-Developer-Dashboard:

[Unit]
Description=Soloist Service for Prometheus
After=network.target

[Service]
Type=simple
ExecStart=%h/.local/bin/soloist --device-name YourDeviceName -k YourAPIgoesHere -d default
StateDirectory=soloist

[Install]
WantedBy=default.target

The string "-d default" is only needed if you use the default output of the Pipewire-server. If you use Pulseaudio I assume you can leave it out.

3. Now that we have the startup-systemd-file, we'll create a systemd-file that will download the binary, and then update the binary when the 90-days limit has expired. So, first make sure you have a .local/bin-directory, otherwise create it and add it to your path:

mkdir .local/bin
printf '%s\n' '[ -d "$HOME/.local/bin" ] && PATH="$HOME/.local/bin:$PATH"' >> ~/.profile

Now that we have the created the .local/bin we'll move on and create the actual script that will download the binary. You'll need to insert your user in the INSTALL_DIR-section and you'll have to change the format of the binary to be downloaded. The formats are arm64, arm32 and x86_64 and of course you'll insert the format that fit your needs.

#!/bin/bash
set -e

# Hardcoded paths and official x86_64 link
INSTALL_DIR="/home/YourUserName/.local/bin"
DOWNLOAD_URL="https://soloist-builds.spotifycdn.com/soloist_release_XXXXX.tar.gz"
TMP_DIR=$(mktemp -d)

echo "Downloading from: $DOWNLOAD_URL"

# Fetch, extract, and install binary
curl --fail --location -o "$TMP_DIR/soloist.tar.gz" "$DOWNLOAD_URL"
tar -xzf "$TMP_DIR/soloist.tar.gz" -C "$TMP_DIR"
install -m 755 "$TMP_DIR/soloist" "$INSTALL_DIR/soloist"

# Cleanup
rm -rf "$TMP_DIR"

# Restart player service
systemctl --user restart soloist.service || true

As you can see in the script it downloads the archive with the binary, extract it to your ./local/bin, makes it executable, removes the archive and restart, or start the soloist.service.

So, next step. Now we need to create a systemd-file that will execute the script on a regular schedule, since the binary cease to function after 90 days (why this is, I do not know. But so it says on the webpage). The systemd-file, called soloist-updater.service, goes into .config/systemd/user:

[Unit]
Description=Fetch latest 90-day binary for Spotify Soloist
After=network.target

[Service]
Type=oneshot
ExecStart=%h/.local/bin/update-soloist.sh

[Install]
WantedBy=default.target

But this systemd-file does not start by it's own. It needs a timer to help it keep track of when to execute the updater-script. So we'll create a systemd-timer. This one,soloist-updater.timer also goes into the .config/systemd/user-directory:

[Unit]
Description=Trigger Soloist Update every 60 days

[Timer]
# Run 5 minutes after computer boots up
OnBootSec=5min
# Run every 60 days thereafter
OnUnitActiveSec=60d

[Install]
WantedBy=timers.target

As you can see the timer runs five minutes after boot, and then every 60-days. I assume one can make a nicer solution, but this is the one I came up with. And so far it has been working alright (I'm writing this 5 days after Spotify released Soloist :D)

Now, let's just start all the services and enjoy lossless audio on our DAC's or whatever we're using to stream music from Spotify:

systemctl --user daemon-reload
systemctl --user start soloist-updater.service
systemctl --user enable --now soloist-updater.timer
systemctl --user enable soloist.service

Now, what we are doing here is that we start the soloist-updater, just to download the binary (for the first time). The soloist-updater will download the binary and start the soloist.service. Then we enable the soloist.service and the soloist-updater.timer so that they will run on each boot. The soloist-updater.service we don't need to enable, cause it will be triggered to run by the timer. We just run it now, once, so that the binary gets downloaded. Now check that the soloist.service is running OK:

systemctl --user status soloist.service

If it says "Active" all is fine and we can fire up Spotify, and connect to Soloist with the Device-name we chosed above.

email: dosaku57.kecohi60@murena.io

Back to main page