Files
arr/README.md
Miguel PalhasandClaude Opus 5 ab4f95b166
ci / web (push) Successful in 32s
ci / rust (push) Successful in 3m26s
e2e / e2e (push) Failing after 5m2s
ci / image (push) Successful in 4m1s
feat(dl): replace Transmission with qBittorrent
qBittorrent's add call answers `Ok.` and nothing else — no hash, no name,
no duplicate signal — so arr derives the v1 infohash from the magnet or the
`.torrent` bytes before the call and looks the torrent up by it. That also
drops Transmission's numeric torrent id: the hash is the only identity now.

The reaper needs "stopped because a share limit was reached", and
qBittorrent's state field cannot tell that apart from a hand-paused torrent.
So the ratio and idle counters are checked against the limits arr set, and a
torrent stopped by a global limit reads as still seeding rather than being
deleted.

The WebUI needs a login, so `ARR_QBITTORRENT_USERNAME` and
`ARR_QBITTORRENT_PASSWORD` join the env-only secrets; leaving both unset is
valid for an instance that whitelists arr's subnet.

Verified against qBittorrent 5 (WebAPI 2.15.1) in a container: it rejects
`setShareLimits` without `shareLimitAction`, which 4.x ignores, so it is
always sent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-29 18:13:50 +01:00

29 lines
995 B
Markdown

# arr
One service that replaces Radarr and Sonarr, and later Bazarr, for a single
household.
Five .NET services idle at 600-900 MB to run a loop with four steps in it:
decide what you want, find it, fetch it, put it where Jellyfin can read it.
Each has a configuration surface an order of magnitude larger than the subset
anyone uses, and none of them share a model.
This is that loop, once, in Rust.
- **Prowlarr** stays — it owns tracker auth, Cloudflare bypass and the indexer
definitions, and replacing it buys nothing.
- **qBittorrent** stays.
- **Jellyseerr** stays, talking to a thin Radarr-compatible shim.
## Status
Design complete, implementation not started. See `DESIGN.md` for the contract
and the issue tracker for the work.
## Documents
- `DESIGN.md` — the contract. Domain model, policy engine, sourcing, import,
crate layout, build order.
- `CLAUDE.md` — repository conventions, label taxonomy, and how an autonomous
driver session should sequence the work.