A fast, lightweight Rust daemon and web UI for Soulseek file sharing
Releases · Issues · Documentation · Community
slskR is a self-hosted Soulseek client written in Rust. It ships a daemon, a REST API, and a bundled web UI together. It is an independent implementation with its own configuration and release contracts, not a fork or wrapper.
For local MCP access, see the SnapeTech MCP integration guide.
- Substantially lighter than the upstream client. In a matched idle benchmark, slskR used about 16x less CPU time and 85–89% less memory. A separate connected-idle run measured about 30x less CPU time and 85–95% less memory. See the performance analysis and the connected-idle report.
- One process for the daemon, API, and UI. No sidecar or external web host.
- API-first. Versioned
/api/v0/*routes, OpenAPI, WebSocket events, webhooks, and TypeScript, Python, and Go clients. - Safe defaults. Loopback-only HTTP, authentication on by default, CSRF checks, virtual share paths, and scoped API tokens.
- Runs anywhere. Linux, macOS, Windows, Docker, Kubernetes, Unraid, TrueNAS, Synology, and the major package managers.
Each area has a focused guide with workflows, API examples, limits, and the configuration that applies.
| Feature area | What you get | Guide |
|---|---|---|
| Search and discovery | Global, user, room, and wishlist searches; result filters; discovery helpers. | Search guide |
| Transfers | Download/upload queue, resume, retry, rescue, path templates, multisource swarm, previews. | Transfers guide |
| Shares and browse | Bounded share index, regex filters, virtual paths, catalog, peer browse. | Shares guide |
| Messaging, rooms, and users | Private messages, rooms, watched users, contacts, notes, interests, bans. | Messaging guide |
| Web UI and media | Shipped React UI, player, previews, collections, share groups, listening parties. | Web UI guide |
| Integrations | Spotify, Lidarr, and the optional visualizer. | Integrations guide |
| Mesh, DHT, and pods | DHT rendezvous, TLS/QUIC mesh, pods, channels, room bindings, Gold Star Club. | Mesh guide |
| API and automation | Versioned routes, auth, events, webhooks, batch, metrics, typed clients. | API guide |
| Data and operations | SQLite persistence, database maintenance, logs, metrics, telemetry. | Operations guide |
| Security and access | Bind defaults, tokens, CSRF, rate limits, webhook policy, reverse proxies. | Security guide |
| Localization | Twelve UI locales, English fallback, locale-aware formatting. | Localization guide |
| Performance | Measured CPU and memory evidence, methods, and limits. | Performance analysis |
Also included:
- Global, user, room, and scheduled wishlist searches with result filters, duplicate folding, hidden/blocked-user handling, and metadata-assisted follow-ups.
- Auto-retry and rescue workers for failed, queued, slow, or stalled audio downloads, with bounded alternate-source searches.
- Offset/resume, type-1 obfuscated and indirect peer fallback, completed-path templates, and hash-verified multisource swarms.
- Share catalog, per-root file listing, peer browse, folder browse, and partial browse state.
- Private-message acknowledgements, room join/leave, watched-user stats, contacts, notes, liked/hated interests, and username/IP bans.
- Collections, share groups, playlist intake, player controls, local and peer previews, and listening parties.
- Spotify OAuth, Lidarr status/wanted/import, and a local visualizer hook.
- Mainline DHT, TLS mesh transport, QUIC control/data, pods, member-only channels, Soulseek-room bindings, hash metadata, and shadow-index discovery.
- Versioned
/api/v0/*routes, OpenAPI, bearer andX-API-Keyauth, scoped tokens, WebSocket events, webhooks, batch operations, and metrics/telemetry. - TypeScript, Python, Go, and Rust clients.
- Optional SQLite persistence, database cleanup/vacuum, runtime log levels, and health checks.
- Loopback-first defaults, CSRF checks, rate limits, SSRF-resistant webhook targets, and OS keyring, systemd, file, memory, or env credential stores.
- Twelve interface locales with English fallback and locale-aware date, number, and byte formatting.
- Install and configure slskR
- Configuration reference
- Container deployment
- Troubleshooting
- Build from source
SLSKR_API_TOKEN="$(openssl rand -hex 32)"
SLSKD_PASSWORD="$(openssl rand -hex 16)"
docker run -d --name slskr --restart unless-stopped \
-p 5030:5030 -p 2234:2234/tcp -p 2234:2234/udp \
-e SLSKR_API_TOKEN="$SLSKR_API_TOKEN" \
-e SLSKD_PASSWORD="$SLSKD_PASSWORD" \
-v slskr-state:/var/lib/slskr \
ghcr.io/snapetech/slskr:latestOpen http://localhost:5030/, sign in as slskr with the generated password,
then enter your Soulseek credentials.
Download the archive for your platform from
Releases, verify it against
SHA256SUMS.txt, extract it, and put slskr on your PATH:
tar -xzf slskr-<version>-<target>.tar.gz
sudo install -Dm755 slskr /usr/local/bin/slskr
slskr serveThe stable baseline is the Soulseek client, Web UI, REST API, and ordinary single-source transfers. Optional features such as persistence, integrations, mesh, DHT, pods, and multisource downloads need configuration or suitable peers. See Status and support boundaries, the feature map, and the feature guides.
- Documentation index
- Feature guides
- Architecture
- Testing and live interop
- Release channels
- API reference
- OIDC sign-in runbook · shared provider catalog
slskR is an independent Rust implementation. It pursues compatibility with useful Soulseek workflows but is not a fork of any other client.
GNU Affero General Public License v3.0. See LICENSE and NOTICE.
Run ./scripts/security-scan-local.sh for local Semgrep CE and the Trivy scanners that fit this repository. The installed pre-commit hook runs Semgrep on staged source/config files only; Trivy runs on demand or in CI. See security-scanning.md. Use ./scripts/update-security-tools.sh to refresh local scanner data and the Trivy database.