57cda1281b
Move entire Go tree to archive/go/ preserving history. Add Rust implementation: axum HTTP server, nostr-sdk relay reader, sqlx/SQLite storage, Torznab caps+search endpoints, figment config, clap CLI. Update spec.md tech stack and repo layout to reflect Rust. Add docs/FIPS.md with Mode A/B/C deployment walkthrough. Add Phase 6 (FIPS deployment) to phase plan.
96 lines
2.5 KiB
Markdown
96 lines
2.5 KiB
Markdown
# 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
|
|
|
|
```sh
|
|
just build
|
|
# produces target/release/kindexr and target/release/kindexr-cli
|
|
```
|
|
|
|
### Configure
|
|
|
|
```sh
|
|
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:
|
|
|
|
```sh
|
|
sudo useradd --system --no-create-home --shell /usr/sbin/nologin kindexr
|
|
sudo chown kindexr:kindexr /var/lib/kindexr
|
|
```
|
|
|
|
### Install and start
|
|
|
|
```sh
|
|
sudo just install
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable --now kindexr
|
|
sudo journalctl -u kindexr -f
|
|
```
|
|
|
|
### Verify
|
|
|
|
```sh
|
|
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:
|
|
|
|
```sh
|
|
KINDEXR_LOGGING_LEVEL=debug kindexr --config /etc/kindexr/config.yaml
|
|
```
|
|
|
|
## Development
|
|
|
|
```sh
|
|
just test # cargo test
|
|
just check # cargo clippy + fmt check
|
|
just build # cargo build --release
|
|
```
|
|
|
|
## Architecture
|
|
|
|
See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the full design.
|
|
|
|
## License
|
|
|
|
MIT
|