# kindexr A Nostr-native Torznab indexer. Subscribes to NIP-35 torrent events on the Nostr relay network and serves them through the Torznab API that Sonarr, Radarr, Lidarr, Readarr, and Prowlarr already speak. **Same slot as Jackett or Prowlarr** — middleware between Nostr and the *arr automation stack. Not a frontend, not a relay, not a downloader. ## What it does - Connects to Nostr relays and indexes kind 2003 (NIP-35) torrent events into a local SQLite database - Serves indexed content as a Torznab API endpoint for *arr apps - Enriches metadata via TMDB (movies and TV shows get proper IDs for *arr matching) - Filters publishers using Web of Trust (WoT) — trust scores derived from your Nostr follow graph, with manual vouch/block/mute controls - Optionally publishes torrents back to Nostr from a connected qBittorrent instance - Fetches publisher profiles (kind 0) so you see names and avatars instead of raw pubkeys - Web UI at `/ui` — dashboard, indexed content browser, publisher management, publish queue ## 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":3,"relays_connected":3,"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` ## CLI ```sh # API key management kindexr-cli apikey create --label sonarr kindexr-cli apikey list # Publisher identity (for publishing back to Nostr) kindexr-cli identity init # generate a fresh keypair kindexr-cli identity init --nsec # import existing key kindexr-cli identity info # Enqueue torrent files for publishing kindexr-cli publish --from /path/to/torrents/ ``` ## 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 ``` For a local dev run without installing: ```sh cp deploy/kindexr.example.yaml kindexr.dev.yaml # edit kindexr.dev.yaml — set database.path to /tmp/kindexr-dev.db, disable publisher ./target/release/kindexr --config kindexr.dev.yaml # UI at http://localhost:9117/ui ``` ## Architecture See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the full design. ## License MIT