# kindexr A Nostr-native Torznab indexer. Bridges NIP-35 torrent events on the Nostr relay network into the Torznab API that Sonarr, Radarr, Lidarr, Readarr, and Prowlarr already speak. **Same slot as Jackett or Prowlarr** — middleware that sits between Nostr and the *arr automation stack. Not a frontend, not a relay, not a downloader. ## Implementation The active implementation is **Rust** (`src/`, `Cargo.toml`). The original Go implementation lives in `archive/go/` and is kept for reference until the Rust version reaches Phase 1 parity. It is not maintained going forward. ## Phase status - [ ] Phase 0 — bootstrap (Rust): daemon boots, config, DB migrations, `/health`, journald JSON logging - [ ] Phase 1 — reader, basic Torznab (Rust): relay subscription, kind 2003 indexing, `t=caps` + `t=search` - [ ] Phase 2 — full *arr compatibility: structured ID matching, TMDB enrichment - [ ] Phase 3 — curation: WoT filter, NIP-51 sets - [ ] Phase 4 — writer/publisher: NIP-46 bunker, qBittorrent integration - [ ] Phase 5 — Blossom binary bridge ## Quick start ### Build ```sh just build # produces target/release/kindexr and target/release/kindexr-cli ``` ### Configure ```sh sudo mkdir -p /etc/kindexr /var/lib/kindexr sudo cp deploy/kindexr.example.yaml /etc/kindexr/config.yaml sudo $EDITOR /etc/kindexr/config.yaml ``` Create the service user: ```sh sudo useradd --system --no-create-home --shell /usr/sbin/nologin kindexr sudo chown kindexr:kindexr /var/lib/kindexr ``` ### Install and start ```sh sudo just install sudo systemctl daemon-reload sudo systemctl enable --now kindexr sudo journalctl -u kindexr -f ``` ### Verify ```sh curl http://localhost:9117/health # {"status":"ok","version":"...","db_ok":true,"relays_configured":6,"uptime_seconds":0} ``` ### Add to Sonarr/Radarr Add kindexr as a Torznab indexer: - URL: `http://127.0.0.1:9117` (or your public URL behind nginx) - API key: generate with `kindexr-cli apikey create --label sonarr` ## Configuration See `deploy/kindexr.example.yaml` for a fully commented configuration reference. Config is loaded in order: **defaults → YAML file → environment variables** (`KINDEXR_` prefix). Example env override: ```sh KINDEXR_LOGGING_LEVEL=debug kindexr --config /etc/kindexr/config.yaml ``` ## Development ```sh just test # cargo test just check # cargo clippy + fmt check just build # cargo build --release ``` ## Architecture See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the full design. ## License MIT