Miguel Palhas 29c31beceb feat(arr): one sidecar per language, in the schema
DESIGN.md §15 as amended: a language is satisfied by exactly one
sidecar, and no filename segment distinguishes forced from plain from
SDH. A unique index over sidecar rows says so; embedded rows keep their
own key, since several tracks for one language can legitimately coexist
inside a video.

Existing databases may hold a duplicate from a manual grab that beat the
API's path check, so the migration resolves them rather than failing: a
real subtitle beats a machine translation, and of two of the same kind
the newest wins. The files stay on disk for the manual delete to clean
up.

`record_file` no longer swallows every conflict — only the two that mean
"arr already knows this file".
2026-08-25 08:28:51 +01:00
2026-08-24 23:06:34 +01:00
2026-08-22 19:20:47 +01:00
2026-08-22 19:20:47 +01:00

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.
  • Transmission 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.
S
Description
No description provided
Readme
17 MiB
Languages
Rust 83.4%
TypeScript 11.5%
CSS 1.9%
Python 1.4%
HTML 1%
Other 0.8%