- Migration 003: add wot_level/muted/report_count to publishers; create curation_items and reports tables - WoT builder (wot/follows.rs): fetches operator kind-3 contact list to build depth-1 and depth-2 trust graph; ingests kind-10000 mute list; runs at startup and refreshes every 24h - Trust scoring (wot/trust.rs): recomputes trust from wot_level and report_count after each WoT build - Reader: subscribes to kind-30004 (curation sets) from configured pubkeys; subscribes to kind-1984 (reports) from anyone; WoT/block/ mute check gates kind-2003 ingest when wot_only=true; auto-block publishers that hit report threshold - Search: curated events (referenced by kind-30004) sort first in both FTS and full-scan paths - Publisher CLI: list, info, block, unblock, trust, mute subcommands - Fix .gitignore: /bin/ not bin/ (was shadowing src/bin/)
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
just build
# produces target/release/kindexr and target/release/kindexr-cli
Configure
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:
sudo useradd --system --no-create-home --shell /usr/sbin/nologin kindexr
sudo chown kindexr:kindexr /var/lib/kindexr
Install and start
sudo just install
sudo systemctl daemon-reload
sudo systemctl enable --now kindexr
sudo journalctl -u kindexr -f
Verify
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:
KINDEXR_LOGGING_LEVEL=debug kindexr --config /etc/kindexr/config.yaml
Development
just test # cargo test
just check # cargo clippy + fmt check
just build # cargo build --release
Architecture
See docs/ARCHITECTURE.md for the full design.
License
MIT