Native library engine
Scan, identify, source, fingerprint, tag and organise in one pipeline. No Lidarr, no external *arr stack.
Self-hosted music engine
Search MusicBrainz, request an album or a single track, and a native engine drives your own slskd: it scans, fingerprints, tags and files every result. No Lidarr, one container.
docker pull ghcr.io/habirabbu/droppedneedle:latest ▸ The native engine
No Lidarr, no *arr stack. A single pipeline owns the whole signal path: search, source, verify, tag, file. Every step reports back to the UI in real time.
Ask for an album or a single track.
Identify the release against MusicBrainz.
Drive your own slskd over its local HTTP API.
Verify each file with AcoustID (fpcalc).
Write clean MusicBrainz tags with mutagen.
Organise and file it into your library.
Signal boundary DroppedNeedle has no Soulseek protocol code, only an HTTP client for slskd. You run slskd and its shared folders; DroppedNeedle just drives it. It never joins or distributes on the peer-to-peer network itself.
▸ Features
A complete request-to-library workflow, plus the playback and discovery you’d expect from a real music app. All self-hosted, all yours.
Scan, identify, source, fingerprint, tag and organise in one pipeline. No Lidarr, no external *arr stack.
Search the full catalogue. Request whole albums or single tracks.
Orchestrates the slskd instance you run, over its local HTTP API.
Jellyfin, Navidrome, Plex and local files, plus YouTube previews for what you haven’t downloaded yet.
ListenBrainz and Last.fm, per user. Now-playing on start, scrobble on finish.
Recommendations from your history, similar artists, fresh releases and global charts.
Queue, shuffle, seek, and a 10-band equaliser with presets.
Admin, trusted and standard roles. Log in with username, Jellyfin, Plex or any OIDC provider.
One Docker image, configured entirely from the web UI. No config files to hand-edit.
▸ The interface
Browse, request, play and scrobble from a fast, dense interface built for whole libraries.
▸ Connect
Point DroppedNeedle at the players and services you already run. Your listening history follows you.
Stream from
Scrobble to
▸ Quick start
Bring your own slskd and a music folder. DroppedNeedle does the rest, all configured from the web UI.
services:
droppedneedle:
image: ghcr.io/habirabbu/droppedneedle:latest
container_name: droppedneedle
environment:
- PUID=1000
- PGID=1000
- PORT=8688
- TZ=Etc/UTC
- SLSKD_DOWNLOADS_PATH=/slskd-downloads
ports:
- "8688:8688"
volumes:
- ./config:/app/config
- ./cache:/app/cache
- /path/to/music:/music:rw
- /path/to/slskd/downloads:/slskd-downloads:rw
restart: unless-stoppedRun slskd 0.25.0+ with a shared folder and an API key, and bind-mount its downloads dir on the same filesystem as your library.
Drop the compose into a folder and run docker compose up -d.
Open http://localhost:8688, create the admin account, add your library path and slskd URL + key, then run a scan.
Need slskd set up first? Read the slskd guide →
No. It talks to your own running slskd over slskd’s local HTTP API and imports the results. It has no Soulseek protocol code itself. You run, and are responsible for, slskd and its shared folders.
No. The native engine replaces it entirely: scanning, identification, downloading, fingerprinting, tagging and organising are all built in.
Docker, a music folder, and your own slskd (0.25.0 or newer) with at least one shared folder and an API key. Everything else is configured from the web UI.
Imports are atomic moves. A cross-filesystem mount can’t be renamed in place, so bind-mount slskd’s downloads directory read-write on the same filesystem as your music.
Stream from Jellyfin, Navidrome, Plex or local files, with YouTube previews for what you haven’t downloaded. Scrobble to ListenBrainz and Last.fm, per user.
Yes. Admin, trusted and standard roles, with login via username, Jellyfin, Plex or any OIDC provider.
Yes. Open source under AGPL-3.0, with no paywall, lock-in or telemetry.