enki 1b7b70426c feat: Phase 0 bootstrap — kindexr boots, migrates, serves /health
- config: koanf-based loading (defaults → YAML → KINDEXR_ env vars)
- db: embedded SQLite migrations with BEGIN/END-aware statement splitter
- server: chi router, GET /health returns JSON stats
- cmd/kindexr: graceful SIGTERM shutdown
- cmd/kindexr-cli: stub
- deploy: systemd unit, example config, nginx snippet
- all packages covered by race-clean tests
2026-05-16 18:45:15 -07:00

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.

Phase status

  • Phase 0 — bootstrap: daemon boots, parses config, opens DB, applies migrations, /health returns JSON, logs to journald in JSON
  • Phase 1 — reader, basic Torznab (subscribes to relays, indexes kind 2003 events, t=caps + t=search)
  • Phase 2 — full *arr compatibility (structured ID matching, category normalization, TMDB enrichment)
  • Phase 3 — curation (WoT filter, NIP-51 sets, per-key visibility)
  • Phase 4 — writer/publisher (NIP-46 bunker, qBittorrent integration)

Quick start

Build

make build
# produces ./bin/kindexr and ./bin/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 make install
sudo systemctl daemon-reload
sudo systemctl enable --now kindexr
sudo journalctl -u kindexr -f

Verify

curl http://localhost:9117/health
# {"status":"ok","version":"...","relays_connected":0,"events_total":0,"last_event_at":null}

Add to Sonarr/Radarr

Once Phase 1 is complete, 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

make test    # run tests with -race
make vet     # go vet
make fmt     # gofmt
make check   # fmt + vet + test

Architecture

See docs/ARCHITECTURE.md for the full design.

License

MIT

S
Description
Nostr Based torrent indexer
Readme 331 KiB
Languages
Rust 99.7%
Just 0.3%