▸ self-hosted / musicbrainz / slskd AGPL-3.0

Self-hosted music engine

Drop the
needle.

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

From request to library, natively.

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.

  1. SIG·01

    Request

    Ask for an album or a single track.

  2. SIG·02

    Match

    Identify the release against MusicBrainz.

  3. SIG·03

    slskd

    Drive your own slskd over its local HTTP API.

  4. SIG·04

    Fingerprint

    Verify each file with AcoustID (fpcalc).

  5. SIG·05

    Tag

    Write clean MusicBrainz tags with mutagen.

  6. SIG·06

    Library

    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

Everything it does.

A complete request-to-library workflow, plus the playback and discovery you’d expect from a real music app. All self-hosted, all yours.

Native library engine

Scan, identify, source, fingerprint, tag and organise in one pipeline. No Lidarr, no external *arr stack.

MusicBrainz search

Search the full catalogue. Request whole albums or single tracks.

Your own slskd

Orchestrates the slskd instance you run, over its local HTTP API.

Stream anywhere

Jellyfin, Navidrome, Plex and local files, plus YouTube previews for what you haven’t downloaded yet.

Scrobbling

ListenBrainz and Last.fm, per user. Now-playing on start, scrobble on finish.

Discovery

Recommendations from your history, similar artists, fresh releases and global charts.

Built-in player

Queue, shuffle, seek, and a 10-band equaliser with presets.

Multi-user & OIDC

Admin, trusted and standard roles. Log in with username, Jellyfin, Plex or any OIDC provider.

Single container

One Docker image, configured entirely from the web UI. No config files to hand-edit.

▸ The interface

A real music app.

Browse, request, play and scrobble from a fast, dense interface built for whole libraries.

HOME
DroppedNeedle home dashboard
DISCOVER
Discovery and recommendations feed
LIBRARY
Your music library
LISTENING ROOM
Listening room and player
JELLYFIN
Jellyfin integration
SETTINGS
Settings and configuration

▸ Connect

Plays where you do. Scrobbles where you live.

Point DroppedNeedle at the players and services you already run. Your listening history follows you.

Stream from

Jellyfin Navidrome Plex Local files YouTube

Scrobble to

ListenBrainz Last.fm

▸ Quick start

Up in one container.

Bring your own slskd and a music folder. DroppedNeedle does the rest, all configured from the web UI.

docker-compose.yml
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-stopped
  1. 01

    Bring your own slskd

    Run 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.

  2. 02

    Start the container

    Drop the compose into a folder and run docker compose up -d.

  3. 03

    Configure in the UI

    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 →

▸ FAQ

Questions, answered.

More detail lives in the docs.

Does DroppedNeedle download from Soulseek?

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.

Do I still need Lidarr?

No. The native engine replaces it entirely: scanning, identification, downloading, fingerprinting, tagging and organising are all built in.

What do I need to run it?

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.

Why must slskd’s downloads folder share a filesystem with my library?

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.

Where can I play and scrobble?

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.

Can more than one person use it?

Yes. Admin, trusted and standard roles, with login via username, Jellyfin, Plex or any OIDC provider.

Is it really free?

Yes. Open source under AGPL-3.0, with no paywall, lock-in or telemetry.