zurg
zurg is a Go daemon that presents a debrid account or a directory of NZBs as a virtual filesystem. Six debrid services are supported and so is Usenet. It stores no media and it accepts no uploads. Nothing is fetched before a player asks for it. A read on a debrid account becomes a ranged HTTP GET against that service's CDN. A read on the Usenet backend becomes the articles that cover those bytes. A 60 GB remux costs 60 GB of disk nowhere.
Four views onto the same library:
Setup
Getting zurg running on your machine.
- Linux — FUSE 3 and a systemd service created by the binary
- Docker — containers, FUSE propagation, and what breaks a host-visible mount
- macOS — macFUSE and launchd auto-start created by the binary
- Windows — WinFsp and an interactive drive-letter task created by the binary
Providers
Pointing zurg at an account. Each page covers the credential and the
config.yml entry and what that service does differently. All of them assume
the Docker install.
The shared page has the three ways to add an account in Docker and the rules the config loader enforces.
Guides
Working with the library.
- Usenet — the
nzbbackend end to end: news accounts, NZBs, the mount, Plex - Sonarr & Radarr for Usenet — the *arrs search and zurg answers as a SABnzbd, so imports are a rename not a download
- Sonarr & Radarr for torrents — the same, with zurg answering as a qBittorrent; Prowlarr too
- zurg searches for Sonarr & Radarr. Radarr and Sonarr keep the list and zurg finds and places the release. No indexers or download client in either.
__magic__— the one directory whose layout is stored, and therefore yours to arrange- Renaming — rename a release or a file anywhere in the library. A move is refused and the page says why
- Plex — what zurg does with a Plex token, and what it deliberately does not
- Jellyfin — the same, for Jellyfin
- rex — a Plex server that zurg fills, set up from scratch
- rex with your own app — the same server filled by any app that serves files over HTTP and speaks rex's feed API
- The Stremio addon — Stremio searching your own indexers, playing straight out of the Usenet backend
- Watchlist and Seerr fetches what you ask for through your own indexers
- Plex watchlist is the Plex side of that
- Local libraries plays a shared list of releases through your own account
- Android and Google TV runs the whole library on a phone or a TV box
Migrating
Moving an existing library onto zurg without a re-download or a re-scan.
Reference
- Configuration — every option in
config.yml - Command line lists every command and flag the binary takes
- Outbound identity says what zurg tells the services it calls about itself
- MCP server lets an AI agent drive zurg over the Model Context Protocol
- Tags — what gets applied to a torrent, and why
- Changelog — what changed when
Internals
How zurg is built, what it was measured at, and the design notes behind the awkward parts.
- Architecture — the shape of the whole, and the invariants that are easy to break
- Debrid baseline — what zurg costs and how fast it feels across RD, AD and TorBox
- Torrent lifecycle — what each account actually reports while a grab runs, measured live
- SABnzbd client contract — the exact shapes Sonarr and Radarr expect
- Plex trash sweep · Stream timeout regression · Directory config UI/UX
- E2E testing · Real-Debrid API notes
- qBittorrent client contract · Persistent caches
- Naming · rclone move refusal
zurg is distributed to sponsors: GitHub Releases · Patreon · Discord