Lighthouse
Self-hosted Nostr indexer for NIP-35 torrent events with federated curation. Comes with a Torznab API so it works with Prowlarr, Sonarr, Radarr, and other *arr apps.
Full Documentation | Quick Start | API Reference
Disclaimer
This software is a Nostr protocol indexer that reads publicly available NIP-35 events from Nostr relays. It does not host, distribute, or provide access to any copyrighted content. The software merely indexes metadata published on the decentralized Nostr network. Users are solely responsible for their use of this software and must comply with all applicable laws in their jurisdiction.
Note: To fully understand the context and use case behind Lighthouse, please read the whitepaper first.
What it does
- Indexes NIP-35 (Kind 2003) events from Nostr relays
- Publish metadata events to Nostr relays (parses .torrent file headers only)
- Filter what is indexed based on tags
- Web of Trust filtering - only see content from people you trust
- Federated curation- trust curators who apply moderation rulesets
- Verification decisions - cryptographically signed accept/reject decisions
- Report/appeal system - formal channels for content moderation
- Comments - NIP-35 compatible comment system (Kind 2004)
- Torznab API for seamless *arr apps integration
- Auto-fetches metadata from TMDB/OMDB
- Single Go binary + SQLite, runs anywhere
- Web UI built with Svelte
Quick start
From source (recommended)
Needs Go 1.22+ and Node.js 20+
git clone https://github.com/gmonarque/lighthouse.git
cd lighthouse
make build
./build/lighthouse
Docker
git clone https://github.com/gmonarque/lighthouse.git
cd lighthouse
docker-compose up -d
Open http://localhost:9999
Configuration
Lighthouse uses config.yaml. A default one is created on first run:
server:
host: "0.0.0.0"
port: 9999
api_key: "" # auto-generated
database:
path: "./data/lighthouse.db"
nostr:
identity:
npub: ""
nsec: ""
relays:
- url: "wss://relay.damus.io"
enabled: true
trust:
depth: 1 # 0=whitelist only, 1=follows, 2=follows of follows
enrichment:
tmdb_api_key: ""
omdb_api_key: ""
enabled: true
Environment variables
Override any setting with LIGHTHOUSE_ prefix:
LIGHTHOUSE_SERVER_PORT=8080
LIGHTHOUSE_ENRICHMENT_TMDB_API_KEY=your_key
Using with *arr apps
- Complete the setup wizard at http://localhost:9999
- Go to Settings and copy your API key
- In Prowlarr/Sonarr/Radarr, add a new indexer:
- Type: Torznab
- URL:
http://localhost:9999/api/torznab
- API Key: paste from step 2
- Test and save
Web of Trust
Controls what content shows up based on who uploaded it:
| Depth |
What you see |
| 0 |
Only whitelisted uploaders |
| 1 |
Whitelist + people you follow on Nostr |
| 2 |
Above + friends of friends (use carefully) |
From the Trust page you can:
- Whitelist: manually add trusted uploaders by npub
- Blacklist: block bad actors (removes all their torrents)
- Import follows: pull your Nostr contact list
Categories
Full Torznab category support with subcategories.
API Reference
REST API
| Endpoint |
Method |
Description |
/api/stats |
GET |
Dashboard statistics |
/api/search |
GET |
Search torrents |
/api/torrents/:id |
GET |
Torrent details |
/api/torrents/:id |
DELETE |
Remove torrent |
/api/publish/parse-torrent |
POST |
Parse .torrent file |
/api/publish |
POST |
Publish torrent to relays |
/api/trust/whitelist |
GET/POST/DELETE |
Manage whitelist |
/api/trust/whitelist/{npub}/discover-relays |
POST |
Discover user's relays (NIP-65) |
/api/trust/blacklist |
GET/POST/DELETE |
Manage blacklist |
/api/relays |
GET/POST/PUT/DELETE |
Manage relays |
/api/settings |
GET/PUT |
App settings |
/api/indexer/start |
POST |
Start indexer |
/api/indexer/stop |
POST |
Stop indexer |
/api/indexer/resync |
POST |
Resync historical events |
Torznab API
| Endpoint |
Parameters |
Description |
/api/torznab?t=caps |
- |
Capabilities |
/api/torznab?t=search |
q, cat, limit |
General search |
/api/torznab?t=tvsearch |
q, season, ep |
TV search |
/api/torznab?t=movie |
q, imdbid, tmdbid |
Movie search |
Federated Curation
Lighthouse supports federated content curation through trusted curators:
| Component |
Description |
| Curators |
Trusted entities that review and validate content |
| Rulesets |
Versioned moderation policies (censoring + semantic) |
| Decisions |
Cryptographically signed accept/reject decisions |
| Aggregation |
Combine decisions from multiple curators (quorum, weighted, etc.) |
See Curation Documentation for setup instructions.
Project structure
lighthouse/
├── cmd/lighthouse/ # entry point
├── internal/
│ ├── api/ # HTTP handlers & router
│ ├── comments/ # torrent comments
│ ├── config/ # configuration
│ ├── curator/ # curation engine
│ ├── database/ # SQLite & migrations
│ ├── decision/ # verification decisions
│ ├── explorer/ # relay event discovery
│ ├── indexer/ # torrent indexing
│ ├── models/ # shared data models
│ ├── moderation/ # reports & appeals
│ ├── nostr/ # Nostr client & events
│ ├── relay/ # Nostr relay server
│ ├── ruleset/ # rule engine
│ ├── torznab/ # Torznab protocol
│ └── trust/ # Web of Trust
├── web/ # Svelte frontend
├── docs/ # documentation
└── docker/ # Docker stuff
Development
make deps # install dependencies
make dev # backend with hot reload
make dev-frontend # frontend dev server (separate terminal)
make test # run tests
make build # production build
make docker # build docker image
Documentation
Links
License
MIT