enki c6b9b676a4 add Deluge Web UI integration for publisher
Deluge uses a JSON-RPC HTTP API exposed by the Web UI plugin (port 8112),
not the daemon binary protocol (port 58846). The integration logs in,
fetches completed torrents, filters by configured labels, and enqueues
them the same way as the qBittorrent poller.

- DelugeConfig in config.rs (enabled, url, password, poll_interval_secs, labels)
- src/publisher/deluge.rs: DelugeClient with login/_session_id cookie
  handling, core.get_torrents_status, label + is_finished filtering
- Watcher: deluge_poll_loop alongside qb_poll_loop; each only starts
  if its respective client is configured/enabled
- Example config updated with deluge section and Web UI port note
2026-05-19 20:13:14 -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%