v2.13.0 (2026-09-09)
New Features
- Plugin API v1 has landed. You can now extend DroppedNeedle with your own download clients, indexers, metadata providers, event hooks, routes, scheduled jobs, streaming sources, and settings UI, with example plugins and a creation guide in the repo.
- Usenet search can now run through Prowlarr as well as Newznab, with a setting that selects which backend to use.
- Album pages grew download buttons: grab the whole album as a ZIP or pull individual tracks, with file sizes shown up front, toast progress, and an admin setting that controls who may download.
- Acquisition scoring now checks grabs against the pinned tracklist and folds wrong-product holds into a single verdict, so a mismatched release is held once with a clear reason instead of scattering holds.
- The Lidarr import moved out of Following into Settings as an admin-only sync card.
- Stuck file-recovery bundles can now be marked as handled after verification, so acknowledged leftovers stop clogging the needs-attention list. (#398)
- Library scanning and organizing run through a reworked pipeline that recovers from stale or interrupted runs and carries on when optional enrichment is unavailable.
- Subsonic clients now see tagged release types on albums.
Fixes
- A brief slskd outage (restart, share rescan) no longer fails every polling task. Polling pauses through the outage and resumes after. (#399)
- Soulseek failover no longer verifies a previous peer's same-named files, which used to cascade size mismatches, quarantine innocent peers, and throw away complete deliveries. (#397)
- /health is served without a worker thread, and autoplay is no longer blamed for server stalls. (#396)
- Stored AcoustID recording IDs no longer veto an otherwise complete track map during exact-edition identification. (#392)
- Failed identifications now show up in the review queue instead of going stale silently. (#391)
- Stuck import cleanups no longer block startup. The server boots and escalates them to needs-attention. (#387)
- Per-album maintenance cards are grouped into one summed task instead of lingering as endless "Waiting to start" entries. (#345)
- Soulseek album preflight no longer auto-accepts severely incomplete candidates, and failover skips enqueues with zero files. (#388)
- The app now serves over IPv6 as well as IPv4, falling back to IPv4 where IPv6 cannot bind. (#393) (@PaarthShah)
- SQLite work runs on a dedicated thread pool instead of the shared executor, which clears up the random multi-second slow-request warnings under background load. (#404) (@andysom25)
- Long management filenames keep their audio extensions when truncated instead of failing format checks. (#394) (@alceasan)
- Releases with 130+ performer credits now project instead of failing, with the performer value cap raised to 256. (#402) (@alceasan)
- Jellyfin honors sort orders and the contributor filter again, the Latest route works, and album runtimes are correct.
- Usenet now reports NZB fetch failures plainly and blocklists releases that return error pages.
- A Newznab transport error with an empty message now shows the error name instead of a blank.
- Logins no longer trip over the startup migration on every boot.
- The slskd settings show where DroppedNeedle looks for files and warn when the subfolder box holds a full path, and the source-cleanup warning is rewritten in plain words.
- The Next button on Discover tiles no longer jumps around as recommendations change. It sits on its own fixed row now. (#405) (@andysom25)
Performance
- Provider traffic is down: fenced caches, on-demand scheduling, and local scaling mean Home and Discover hit MusicBrainz and friends far less.
Security
- Last.fm account linking and precache cancel are now permission-gated, a dropped cancel signal is fixed, and background sweeps are hardened.