▸ 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 or Usenet: 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

    Source

    Drive your own slskd or Usenet client over its local 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.

slskd or Usenet

Drive your own slskd, pull from Usenet via SABnzbd and Newznab indexers, or run both. One priority setting picks which is tried first.

Wanted watcher

Requests that fail or come back incomplete get re-searched in the background. A verified match imports itself, no babysitting.

Quality & storage

Set a minimum quality per format and reject the rest. A better copy replaces the one you own and drops the old files into a recycle bin, while storage caps and per-user quotas keep the disk in check.

Stream anywhere

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

Connect your apps

Any OpenSubsonic or Jellyfin client (Symfonium, Finamp, Feishin) can play your library directly.

Built-in player

Queue, shuffle, seek, and a 10-band equaliser with presets. What you’re playing shows live to everyone signed in.

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, with Deezer and iTunes clips to preview before you request.

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.

▸ Beyond the download

Your library keeps up with you.

The engine is only half of it. DroppedNeedle follows the artists you care about, watches for their new releases and nearby gigs, and turns your listening history into playlists and a fresh weekly mix.

Follow artists

Follow an artist to watch for new releases, with a sidebar badge for anything you haven’t seen yet. Opt in and new drops download the moment they land.

Gigs near you

Connect Ticketmaster and Skiddle, pick the cities you care about, and a daily sweep pulls upcoming shows for the artists you follow.

Cross-source playlists

Mix Jellyfin, Navidrome, Plex, local and YouTube tracks in one list. Import from Spotify and it stays in sync. Share read-only or keep it to yourself.

Weekly mix

A personal mix built from what you’ve been playing, rebuilt each week. Switch on auto-request and it fetches up to five albums you’re missing.

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

Pull from the download clients you run, point DroppedNeedle at the players you already use, or connect your favourite Subsonic or Jellyfin app straight to it. Your listening history follows you everywhere.

Download from

slskd SABnzbd (Usenet)

Stream from

Jellyfin Navidrome Plex Local files YouTube

Connect your apps

Any OpenSubsonic or Jellyfin client

Symfonium Finamp Feishin Amperfy Jellify

Discover & import

Spotify Deezer iTunes Ticketmaster Skiddle

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.

Can I use Usenet instead of slskd?

Yes. DroppedNeedle downloads from Usenet through SABnzbd with Newznab indexers, from your own slskd, or from both at once. A source-priority setting decides which is tried first, and every download runs through the same scoring, verification and import.

What do I need to run it?

Docker, a music folder, and at least one download client you run: slskd (0.25.0 or newer) with a shared folder and an API key, or SABnzbd with Newznab indexers. 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.

Does it manage quality and disk space?

Yes. Set a minimum quality per format and anything below it is rejected. When a better copy of an album you own turns up, the engine swaps it in and keeps the originals in a recycle bin. A global storage cap and per-user quotas stop the library filling the disk.

Can it follow artists and find gigs?

Follow an artist and DroppedNeedle watches for new releases, with the option to auto-download them as they land. Connect Ticketmaster and Skiddle, pick your cities, and it lists upcoming concerts for the artists you follow.

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 I point my own music app at it?

Yes. DroppedNeedle speaks the OpenSubsonic and Jellyfin APIs, so clients like Symfonium, Finamp or Feishin can play your library directly. Turn it on in Settings > Connect Apps and create a revocable app-password.

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.