docs: update README to reflect current feature state through Phase 4 + web UI
This commit is contained in:
@@ -1,23 +1,29 @@
|
||||
# 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.
|
||||
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 that sits between Nostr and the *arr automation stack. Not a frontend, not a relay, not a downloader.
|
||||
**Same slot as Jackett or Prowlarr** — middleware between Nostr and the *arr automation stack. Not a frontend, not a relay, not a downloader.
|
||||
|
||||
## Implementation
|
||||
## What it does
|
||||
|
||||
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.
|
||||
- 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
|
||||
|
||||
## 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
|
||||
- [x] Phase 0 — bootstrap: daemon boots, config, DB migrations, `/health`, journald JSON logging
|
||||
- [x] Phase 1 — reader, basic Torznab: relay subscription, kind 2003 indexing, `t=caps` + `t=search`
|
||||
- [x] Phase 2 — full *arr compatibility: TMDB enrichment, structured ID matching (imdb/tvdb/tmdb), tvsearch/movie/music queries
|
||||
- [x] Phase 3 — curation: WoT filter (follows graph levels 0–2), NIP-51 mute lists, publisher trust scores, report tracking
|
||||
- [x] Phase 4 — writer/publisher: NIP-46 bunker signing, qBittorrent watcher, torrent file parsing, publish queue
|
||||
- [x] Web UI: dashboard, indexed browser with FTS search, publisher management with vouch/block/mute, publish queue view
|
||||
- [ ] Phase 5 — Blossom binary bridge
|
||||
- [ ] Phase 6 — FIPS deployment
|
||||
|
||||
## Quick start
|
||||
|
||||
@@ -56,7 +62,7 @@ sudo journalctl -u kindexr -f
|
||||
|
||||
```sh
|
||||
curl http://localhost:9117/health
|
||||
# {"status":"ok","version":"...","db_ok":true,"relays_configured":6,"uptime_seconds":0}
|
||||
# {"status":"ok","version":"...","db_ok":true,"relays_configured":3,"relays_connected":3,"uptime_seconds":0}
|
||||
```
|
||||
|
||||
### Add to Sonarr/Radarr
|
||||
@@ -66,6 +72,22 @@ 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 <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.
|
||||
@@ -86,6 +108,15 @@ 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.
|
||||
|
||||
Reference in New Issue
Block a user