enki 18326cbbfd fix: track last_event per relay on the dashboard
relay_url was being destructured as .. and thrown away, so
update_relay_last_event was called with an empty string and
matched no rows. Capture relay_url from the notification and
pass it through so each relay row gets its last_event updated.
2026-05-17 23:02:21 -07:00
2026-05-17 20:25:52 -07:00
2026-05-17 20:25:52 -07:00

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

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":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

# 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 <nsec1...>  # 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:

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

For a local dev run without installing:

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 for the full design.

License

MIT

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