Changelog

Track every improvement, fix, and feature across the Schrödinger's Copy stack.

🌐v0.11.52026-09-23

schrodrive.org landing + live contributors

Added

Landing site for schrodrive.org on Cloudflare Workers via opennextjs/cloudflare with live contributors page at /contributors

Fixed

Landing env vars now mirror src/core/config.ts exactly — corrected PORT, PROVIDERS, ADD_STRATEGY, MOUNT_BASE, etc., and marked Media Manager as Coming Soon

Added

Live version badge on homepage now fetches api.github.com/repos/.../releases/latest instead of hardcoded v0.11.2

Fixed

PikPak now shows Community Tested (teal) instead of Untested to reflect community testing

Added

SEO: next-sitemap, robots.txt, llms.txt, JSON-LD SoftwareApplication + 12 FAQs, www → apex 308, sitemap now committed

Fixed

Favicon now uses README logo (assets/logo.png) via app/icon.png and proper 32×32 favicon.ico

🔒v0.11.42026-09-22

arr-bridge persistence, mount defaults, organizer review

Fixed

qBittorrent categories lost on restart — arr_categories now persisted in SQLite and restored on handleCategories (#78)

Fixed

Tracked torrents lost on restart — arr_tracked_torrents persisted as state_json and restored on startArrBridge (#79)

Fixed

Nested multi-file staging collisions — scanDirRecursive now returns path.relative and creates parent dirs (#80)

Fixed

Mount cache defaults masked — MOUNT_OPTIONS default changed to "" so individual MOUNT_* are effective (#81)

Added

Organizer identity review workflow — structured mediaParser + organizer_reviews tables and /api/organizer/review dashboard (#82)

🔒v0.11.32026-09-21

DB scrub, shared base32, CI guards

Fixed

Runtime databases (data/tokens.db) were committed — scrubbed from history via filter-branch, added to .gitignore, added guard.yml to fail PRs that add *.db

Fixed

Base32 infohash handling used Buffer.from(..., base64) — extracted single base32ToHex to core/utils

Fixed

IPv6 SSRF bypass — assertPublicHttpUrl now handles Bun vs Node hostname brackets

Fixed

*arr bridge flakiness under bun test --parallel — added Map<port,Server> and per-suite tmpDir dbPath isolation

Added

CONTRIBUTING.md and CONTRIBUTORS.md with live commit counts, plus scripts/fix-stale-history.sh

🔒v0.11.22026-08-15

Multi-arch release images, CodeQL security review

Fixed

Release Docker images (version tags) were amd64-only — every tagged release shipped only a linux/amd64 manifest despite :latest being multi-arch. Release builds now produce both linux/amd64 and linux/arm64

Fixed

SSRF protection on .torrent URL fetching — URLs sourced from Prowlarr/Jackett search results are now validated to reject internal/private addresses before the server fetches them

Fixed

Google Drive API query injection in the cloud link mount adapter — folder/file names are now correctly escaped

Fixed

Incomplete URL scheme validation in the directory-listing scraper — data: and vbscript: links are now blocked alongside javascript:

Fixed

ReDoS-prone regex in the Prowlarr/Jackett TMDB-suffix cleanup — search query length is now bounded before regex processing

Added

Regression test suite for the SSRF guard and Drive query escaping

🐛v0.11.12026-08-15

*arr bridge startup fix, dependency security bump, test infrastructure

Fixed

The *arr bridge (fake qBittorrent API) failed to start under Express 5 — a dropped wildcard-route syntax left the bridge unbound on its port, so Radarr/Sonarr got connection-refused on 8282

Changed

next.js bumped to patch several high/moderate severity security advisories (App Router DoS, middleware/proxy bypass, SSRF in rewrites and Server Actions)

Added

New unit/e2e/regression test suite (bun:test) plus a GitHub Actions CI pipeline and pre-commit hook running typecheck + tests on every change

🔄v0.11.02026-06-14

Seerr (Overseerr + Jellyseerr merger) support, codebase deduplication

Added

Seerr support — the merged successor to Overseerr + Jellyseerr, sharing the same API. New SEERR_URL/SEERR_API_KEY/SEERR_AUTH env vars take priority, with full backward compatibility for existing OVERSEERR_*/JELLYSEERR_* configs

Added

/health endpoint now reports cloud-link pre-warm status (cloudLinksPreWarm) so deploy scripts can gate Plex start on cache readiness

Changed

Removed 600+ lines of duplicated code across 34 files via shared utility modules

Changed

Plex integration simplified — dropped the Docker-socket-dependent auto-start hack in favour of a simple reachability check

🌐v0.10.02026-06-14

External WebDAV mounts, Plex auto-start safety, 429 spam fixes

Added

External WebDAV mount support — mount third-party WebDAV servers (NAS shares, media servers) as read-only FUSE filesystems via rclone, configured via webdav.json or WEBDAV_MOUNTS env var

Added

Organiser skip flag for WebDAV mounts — skipOrganiser: true (default) excludes pre-sorted content from organiser scans

Added

Post-pre-warm Plex scan trigger — triggers Plex library scan after PROPFIND cache pre-warm completes

Added

Zero-block Plex architecture — never-block PROPFIND with deferred FUSE mount, breadth-first pre-warm traversal

Fixed

Rate-limit background refresh queue to suppress 429 log spam during pre-warm

Fixed

Added rclone retry limits (--retries 1 --low-level-retries 3) to prevent D-state kernel hangs from 503 retry loops

Fixed

Disk cache OOM fix — reduced MAX_DISK_CACHE_SIZE from 3000 to 500 to prevent OOM on serialisation for large directories

Performance

Two-phase pre-warm — signal bridge ready after depth-1 scan, full crawl continues in background

🌐v0.9.02026-06-07

11-provider debrid ecosystem — the most provider support of any debrid automation tool

Added

7 new debrid providers (11 total): Debrid-Link, Deepbrid, Offcloud, Put.io, MegaDebrid, Seedr, PikPak — each with full interface implementation

Added

WebDAV bridge ports for all 7 new providers (9119–9127)

Added

Download token rotation support for all 11 providers

Changed

AllDebrid status updated from Untested to In-testing with live accounts

🎬v0.8.02026-06-07

Native *arr bridge

Added

Native Radarr/Sonarr integration via built-in fake qBittorrent Web API v2 bridge — replaces Decypharr, RDT-Client, and other bridge tools

Added

Zero external containers — full torrent lifecycle: receives magnet → submits to debrid → polls status → detects on mount → creates symlinks → reports completion

Added

Dual pipeline support: Overseerr → SchröDrive (direct) AND Overseerr → Radarr/Sonarr → SchröDrive (bridge) simultaneously

Changed

README: Added comprehensive *arr bridge documentation with architecture diagrams and comparison table

🚀v0.7.02026-06-06

.torrent file support, cloud storage mounts, STRM short-codes

Added

.torrent file support — indexer results that return .torrent URLs are no longer discarded, implemented across all 11 providers

Added

Cloud storage virtual mounts: Mega, Google Drive, Dropbox, OneDrive via rclone combine backend

Added

STRM short-code service: stable 16-char codes that 302 redirect to ephemeral CDN URLs with 7-day TTL

Added

Error video fallback: 10-second black MP4 served when download URLs are broken, preventing media player hangs

Added

Anime output category: organiser now outputs anime to Anime/ instead of lumping into TV/

Added

Cloud Link Manager: mount public shared folder links (Mega, GDrive, Dropbox) as FUSE directories

Added

HTTP directory listing adapter: mount any open directory (Nginx autoindex, Apache mod_autoindex)

Fixed

TV season packs classified as movies — added season-only pack detection patterns

🧬v0.6.02026-06-06

Mount stability, persistent deduplication, Zurg-style mounts

Added

Zurg-style organised mounts: WebDAV bridge presents virtual __all__/, anime/, shows/, movies/ directories

Added

Jellyseerr support: JELLYSEERR_URL, JELLYSEERR_API_KEY, JELLYSEERR_AUTH as drop-in Overseerr replacements

Added

Persistent Overseerr processed state and known_magnets in SQLite — survives container restarts

Fixed

Mount health monitor: removed 502/503 from fatal error patterns — they are intentional for dead torrents and were causing unnecessary remounts during Plex streams

Fixed

Repeated torrent re-adding: in-memory processed Set lost on restart now persisted to SQLite, plus infohash-based deduplication

🔑v0.5.0 – v0.5.32026-06-06

Multi-token download rotation + self-healing

Added

Multi-token download rotation: provider-agnostic token rotation inspired by Zurg, rotating on HTTP 503 bandwidth limits across all 11 providers

Added

Unified media server stream detection: pauses background loops during active Plex, Jellyfin, and Emby streams

Added

FUSE mount self-healing and port probing: auto-detects stale mounts, scans up to 20 sequential ports if WebDAV port is blocked

Added

Graceful FUSE unmounting on shutdown (SIGTERM/SIGINT) and auto-updater exits — prevents orphaned rclone processes

Fixed

RealDebrid repair robustness: propagation delays and automatic 404 retry loops when re-adding magnets

Fixed

Mount service: EEXIST crash on startup with stale FUSE mount points from previous crashes

Fixed

Rate limiter: recordSuccess() no longer clears active backoffs prematurely

🗄️v0.4.02026-06-06

SQLite persistence + Stremio addon + 11-provider repair

Added

SQLite persistence layer with WAL journalling, 5 tables, graceful degradation, and daily pruning

Added

Stremio addon server: SchröDrive exposes itself as an installable Stremio addon for searching and streaming

Added

Torrent repair on all 11 providers (TorBox, RealDebrid, AllDebrid, Premiumize, Debrid-Link, Deepbrid, Offcloud, Put.io, MegaDebrid, Seedr, PikPak) with 3-phase repair cycle

Changed

Blacklist auto-migration from /tmp to ./data with SQLite backup and recovery

🏆v0.3.02026-06-06

Feature parity — zero gaps vs competitors

Added

Trakt, Mdblist, and Listrr watchlist integrations — 6 total watchlist sources

Added

Torrentio, Comet, Zilean, and Mediafusion scrapers with shared Stremio helpers

Added

Unified search layer: searchAll() merges indexer + scraper results with deduplication and SCRAPER_MODE config

Added

3-phase torrent repair: same-provider → cross-provider → delete + blacklist + replacement search

Added

Pre-emptive repair: detects stalling torrents (stuck >30min) and repairs before they die

🚀v0.2.02026-06-06

Major release — replaces PD Zurg + TorBox Media Center

Added

Plex, Jellyfin, and Emby watchlist integration with unified poller and library refresh

Added

Dynamic per-endpoint rate limit learning with adaptive delays, persisted to JSON

Added

Infringing content blocklist with JSON-backed storage, pattern matching, and provider attribution

Added

AllDebrid and Premiumize provider implementations with full DebridProvider interface

Added

Persistent torrent blacklist and dead torrent auto-lifecycle (10 failures → delete → blacklist → replace)

Changed

Runtime migrated from Node.js to Bun — Dockerfile, lockfiles, and all scripts updated

Changed

Full code documentation overhaul with JSDoc across 6 core files

Stay in superposition

Get notified of major releases and updates.

We respect your privacy. Unsubscribe any time.