unsubbed.co

slskd

Self-hosted media downloads tool that provides modern client-server application for the Soulseek file sharing network.

Self-hosted file sharing for the Soulseek network, honestly reviewed. No marketing fluff, just what you get when you run it.

TL;DR

  • What it is: A modern, web-based client-server application for the Soulseek peer-to-peer file sharing network — runs headless on your server, accessible from any browser [README].
  • Who it’s for: Music collectors, audiophiles, and self-hosters who want to build a local music library without paying streaming subscriptions forever, and who want a proper server daemon instead of running a desktop GUI client.
  • Cost savings: Spotify costs $11.99/mo, Apple Music $10.99/mo, Tidal $11/mo. slskd runs free on a server you likely already own, with access to a catalog that streaming services don’t touch — out-of-print records, rare pressings, bootlegs, lossless FLAC rips.
  • Key strength: Designed from the ground up to run as a daemon — no display server needed, no VNC, no desktop environment. The web UI is clean and purpose-built for remote operation [README].
  • Key weakness: AGPL-3.0 license means copyleft obligations if you embed it in a product. More critically: Soulseek is a gray-area network legally, and the software does exactly one thing — connect to that network. If you’re expecting a full Plex-style media manager, you’ll need separate tooling.
  • GitHub: 2,946 stars, active CI pipeline, Discord and Matrix communities [README].

What is slskd

slskd is a daemon — a server process — that connects to the Soulseek file-sharing network and exposes everything through a browser-accessible web UI. You run it on a Linux box, NAS, or VPS, and then search, download, and manage your queue from any device with a browser.

Soulseek itself has been around since 2000. It’s a peer-to-peer network almost entirely dedicated to music, with a heavy concentration of rare, out-of-print, and lossless content that streaming services don’t carry. The official desktop client (SoulseekQT) is proprietary, unmaintained-feeling, and requires a graphical desktop environment. Nicotine+ is the popular open-source GUI alternative. slskd is the answer for everyone who wants to run this thing on a headless server.

The project’s GitHub description — “A modern client-server application for the Soulseek file sharing network” — is exactly that, no oversell [README]. It’s one of those projects that does what it says on the tin and doesn’t pretend to be anything else.

At 2,946 stars, it’s not the most-starred self-hosted project, but Soulseek is a niche community. Within that niche, slskd has become the de facto server client [README].


Why people choose it

The case for slskd over the alternatives comes down to three things.

No desktop required. SoulseekQT, the official client, was built for a desktop environment. Running it “headless” means VNC, Xvfb, or Docker with X11 forwarding — all fragile and wasteful. Nicotine+ is better but still primarily a desktop app. slskd was designed as a daemon first; the web UI is the only interface it ships with [README].

Built to be internet-facing. The README explicitly calls out that slskd “is designed to be exposed to the internet” — it has token-based authentication, reverse proxy support, and TLS [README]. That’s not something most desktop-ported server apps can say. You can put it behind Caddy with a proper domain and treat it like any other self-hosted service.

Active development and community. The official SoulseekQT client is closed-source and has seen irregular updates for years. Nicotine+ is open-source and solid but desktop-oriented. slskd has an active GitHub Actions CI pipeline, a Discord, a Matrix room, and consistent commits [README]. For a server-side daemon filling a specific gap, that’s meaningful.

The self-hosted community on forums like r/selfhosted and the Soulseek Discord consistently points to slskd as the answer for anyone who wants a “set it and forget it” Soulseek installation on a NAS or home server.


Features

Based on the README and known behavior of the application:

Core Soulseek functionality:

  • Search the Soulseek network with the same filter options as the official client [README]
  • Download management: speed, status, queue position, grouped by user and folder [README]
  • Cancel, retry, and clear completed downloads from the UI [README]
  • Browse other users’ shared files [README]
  • Join and participate in chat rooms [README]
  • Private messaging between users [README]
  • Share your own files with the network (required by Soulseek’s social contract) [README]

Server/daemon features:

  • Runs as a background daemon or Docker container [README]
  • Web UI accessible on port 5030 (HTTP) or 5031 (HTTPS, self-signed) [README]
  • Token-based authentication — you control the credentials [README]
  • SLSKD_REMOTE_CONFIGURATION flag: lets you modify config from the web UI without SSH access [README]
  • Reverse proxy compatible — works cleanly behind Caddy, nginx, Traefik [README]
  • Configuration via slskd.yml in the app directory [README]
  • Soulseek network port (50300) separately exposed from the web UI ports [README]

What it doesn’t do:

  • No built-in media library organization (that’s Beets, MusicBrainz Picard, or Lidarr’s job)
  • No playback — downloads files, doesn’t serve them (pair with Navidrome, Jellyfin, or Plex)
  • No torrent support — Soulseek only

Pricing: SaaS vs self-hosted math

There’s no cloud version of slskd. The comparison isn’t “slskd cloud vs self-hosted slskd” — it’s “music streaming subscriptions vs building a library.”

Streaming services (recurring):

  • Spotify Individual: $11.99/mo ($143.88/year)
  • Apple Music Individual: $10.99/mo ($131.88/year)
  • Tidal HiFi: $11/mo ($132/year)
  • Qobuz (lossless streaming): $12.99/mo ($155.88/year)

slskd self-hosted:

  • Software: $0 (AGPL-3.0) [README]
  • VPS or home server: you likely already have one if you’re reading this; otherwise $4–6/mo on Hetzner or Contabo
  • Storage: 1TB drive costs ~$20 one-time; 10TB NAS drive runs ~$200

The math that matters:

A Spotify subscription over 5 years: ~$720. Five years of a $5/mo VPS: $300 — and that VPS runs everything else you self-host too. But the real argument isn’t cost — it’s catalog. Soulseek carries music that doesn’t exist on streaming services: out-of-print vinyl rips in FLAC, regional pressings, bootlegs, classical recordings with expired licenses, music from artists who pulled their catalogs. That’s not available at any streaming price point.

If your use case is “I want to listen to whatever’s on Spotify but cheaper,” Soulseek is not the right answer. If your use case is “I collect music that doesn’t exist on streaming services,” slskd on a home server is the only viable path.


Deployment reality check

This is one of the easier self-hosted deployments. The Docker path is straightforward [README]:

docker run -d \
  -p 5030:5030 \
  -p 5031:5031 \
  -p 50300:50300 \
  -e SLSKD_REMOTE_CONFIGURATION=true \
  -v /path/to/data:/app \
  --name slskd \
  slskd/slskd:latest

Three ports: web UI (HTTP), web UI (HTTPS), and the Soulseek network port. Map a data volume, done. Docker Compose is equally simple [README].

What you actually need:

  • Any Linux machine or NAS with Docker — 512MB RAM is sufficient for the daemon itself
  • A Soulseek account (free to register at slsknet.org)
  • Port 50300 open on your router/firewall if you want full connectivity (some ISPs and network configs block this)
  • A reverse proxy and domain if you want proper TLS instead of the self-signed cert on 5031

What can go sideways:

The default credentials are slskd/slskd. If you forget to change these before making it internet-facing, you’ve left an open door. The README warns about this, but it’s easy to miss [README].

The SLSKD_REMOTE_CONFIGURATION=true flag is convenient but has security implications for internet-facing deployments — it lets anyone with your credentials change application config from the UI, including paths and network settings. Fine for a home network, worth disabling or being careful with if you’re running this on a public VPS.

Port 50300 is the Soulseek protocol port. Some ISPs throttle or block P2P traffic, and some network configurations won’t pass it. If you’re behind a CGNAT (common with mobile-broadband ISPs), you may not get full connectivity and will find yourself in “firewalled” status on the network — still functional, but you won’t be reachable as an upload source, which affects your ability to download from users who check your ratio.

Realistic setup time: 15–20 minutes for anyone who’s deployed a Docker container before. Soulseek account + Docker run + change password. The learning curve is basically zero for the deployment; the Soulseek network itself has its own etiquette (share something, don’t leech) that’s worth understanding before diving in.

Connecting to a media stack:

slskd downloads files to a directory you specify. It doesn’t organize them. The typical setup chains it with:

  • Lidarr — for automated music acquisition (Lidarr has a Soulseek/slskd integration via the API)
  • Beets — for tagging and organizing downloaded files into a clean library structure
  • Navidrome or Jellyfin — for streaming the organized library to your devices

The slskd REST API makes this automation possible; Lidarr can send search requests and monitor downloads without you touching the UI.


Pros and cons

Pros

  • Born headless. Unlike desktop apps shoehorned into server deployments, slskd was designed for daemon operation from the start. Web UI is the only interface; there’s no awkward VNC wrapper needed [README].
  • Designed for internet exposure. Token auth, reverse proxy docs, TLS support baked in — the README explicitly addresses security for public deployment [README].
  • Lightweight. Runs comfortably on a Raspberry Pi 4 or a cheap VPS. No heavy dependencies, no database engine — it’s a .NET daemon serving a React frontend [README].
  • Active maintenance. GitHub Actions CI on every commit, Discord and Matrix communities for support [README]. Not an abandoned project.
  • Docker pull count. The shields in the README track Docker Hub pulls — significant enough that the maintainers display it as a signal of adoption [README].
  • REST API. Enables automation with Lidarr and custom scripts. This is what separates it from manually operating a desktop client.
  • Free. AGPL-3.0. No subscriptions, no tiers, no “community edition” with features gated behind a paywall [README].

Cons

  • AGPL-3.0 copyleft. If you’re building a product on top of slskd, you need to release your source code. Not a problem for personal use; a real constraint for commercial use.
  • Single-purpose. It connects to Soulseek and only Soulseek. No torrent support, no Usenet, no integrated library management. You’re building a stack around it.
  • Soulseek’s legal gray area. Soulseek isn’t BitTorrent — it’s a network with social norms around sharing, primarily music. But it’s still P2P file sharing, and what you do with it is your responsibility. slskd doesn’t change the legal picture; it just makes the technical side cleaner.
  • Self-signed cert on HTTPS. Port 5031 ships with a self-signed certificate. You’ll want a real cert via a reverse proxy for anything production-grade [README].
  • Default credentials in the README. slskd/slskd is fine for first boot, but it’s the kind of thing that bites people who expose the service before finishing setup [README].
  • No mobile app. The web UI is responsive, but there’s no native iOS or Android app. Browser-only for mobile access.
  • No independent reviews in the self-hosting review press. Third-party coverage is mostly forum posts and wiki entries rather than long-form evaluations — which means community knowledge is scattered across Discord, Reddit, and GitHub issues rather than consolidated.

Who should use this / who shouldn’t

Use slskd if:

  • You want to access the Soulseek network from a server without running a desktop environment.
  • You’re building a self-hosted music stack (Lidarr + slskd + Navidrome is a common combination).
  • You collect music that doesn’t exist on streaming services — rare pressings, out-of-print records, lossless rips.
  • You’re comfortable with Docker and want a clean, maintainable setup rather than running a desktop app on a server.
  • You want something you can deploy behind a reverse proxy with a proper domain and forget about.

Skip it if:

  • You want a fully managed media experience — slskd downloads files; what happens next is your problem.
  • You’ve never used Soulseek and don’t know what it is. The client is solid, but the network has its own learning curve and social norms.
  • You need Windows GUI or a point-and-click installer. This is a Docker/binary deployment, not an Electron app.
  • You’re building a commercial product and don’t want AGPL obligations. Pick Nicotine+ (GPLv3) if the copyleft scope matters to you.
  • Your ISP or network blocks or throttles P2P ports — check this before investing time in the setup.

Skip it (use Nicotine+ instead) if:

  • You primarily use a desktop and want a full-featured GUI with keyboard shortcuts, tray integration, and native OS behavior. Nicotine+ is the better choice for desktop-primary users.

Alternatives worth considering

On the Soulseek client front:

  • Nicotine+ — the open-source desktop client, GPLv3. More mature feature set for desktop use, active community, but requires a desktop environment or X11/Wayland. Not designed for server deployment. The right choice if you use a graphical desktop.
  • SoulseekQT — the “official” proprietary client. Unmaintained by open-source standards, closed-source, requires a GUI. Largely superseded by Nicotine+ for power users.

If you’re trying to solve “music I can’t find on streaming services”:

  • Lidarr + slskd — automated acquisition pipeline. Lidarr manages your wanted list and sends requests to slskd automatically.
  • Lidarr + qBittorrent + a private music tracker — an alternative path that avoids Soulseek entirely. Private trackers (What.CD’s successor RED, Orpheus) have stricter quality standards and a ratio system, but require an invite.
  • Bandcamp — for music where the artists are still active and selling direct. No self-hosting involved, but legal and often lossless.

If the broader need is a self-hosted music library:

  • Navidrome — streaming server for your existing library. Pairs with slskd downstream.
  • Jellyfin — if you want music alongside video. Heavier, but one system for everything.
  • Beets — music library organizer. The missing piece between slskd downloads and a clean Navidrome library.

Bottom line

slskd does one thing and does it well: it puts the Soulseek network behind a web UI you can run on a server and forget about. If you’ve been running SoulseekQT or Nicotine+ on a desktop machine and wishing you could move it to a headless box, this is your answer. If you’re new to Soulseek and want to understand what it actually gets you — access to music that streaming services don’t have, shared by a community that’s been doing this since 2000 — the deployment takes about 20 minutes and you’ll know within the first afternoon whether the network is useful for what you collect.

It’s not a media server, not a library organizer, not a streaming platform. It’s a daemon that connects to a peer-to-peer network. Within that scope, it’s well-built, actively maintained, and the right tool for the job.

If setting up Docker, a reverse proxy, and stitching together Lidarr + slskd + Navidrome sounds like a fun afternoon, it is. If it sounds like a chore, that’s exactly what upready.dev handles for clients as a one-time deployment.


Sources

No usable third-party review articles were available for slskd from the research sources — the search returned unrelated results. The article is based on primary sources only.

Primary sources: