Understanding and configuring Lighthouse's trust system.
Lighthouse uses a Web of Trust model to filter content. Instead of relying on a central authority to moderate content, trust flows through cryptographic relationships.
Traditional torrent indexers are:
- Single points of failure - Take down the site, lose everything
- Centrally moderated - One entity decides what's acceptable
- Easy to censor - Clear targets for legal action
Lighthouse distributes trust through three actors:
| Actor | Role |
|---|---|
| Emitter | Creates and signs torrent metadata |
| Curator | Validates emitters, maintains trust lists |
| User | Chooses which curators to trust |
The trust.depth setting controls how far trust extends:
| Depth | What You See |
|---|---|
| 0 | Only whitelisted publishers |
| 1 | Whitelist + people you follow on Nostr |
| 2 | Above + friends of friends |
Most restrictive. Only content from manually added npubs appears.
trust:
depth: 0Use when:
- Running a private instance
- Only want specific publishers
- Maximum control over content
Content from your Nostr contact list plus whitelist.
trust:
depth: 1Use when:
- Already have a Nostr identity with follows
- Trust your social graph
- Recommended for most users
Content from follows of follows. Use carefully - can be noisy.
trust:
depth: 2Use when:
- Want maximum discovery
- Have a well-curated follow list
- Accept more noise for more content
Manually trusted publishers. Always visible regardless of depth.
Add via UI:
- Go to Trust page
- Click Add to Whitelist
- Enter npub and optional note
- Save
Add via API:
curl -X POST http://localhost:9999/api/trust/whitelist \
-H "X-API-Key: your-key" \
-H "Content-Type: application/json" \
-d '{"npub": "npub1...", "note": "Trusted uploader"}'Blocked publishers. Content never appears, regardless of trust.
Add via UI:
- Go to Trust page
- Click Block User
- Enter npub and reason
- Save
Blacklisting:
- Immediately removes all content from that publisher
- Prevents future content from appearing
- Syncs across sessions
Add via API:
curl -X POST http://localhost:9999/api/trust/blacklist \
-H "X-API-Key: your-key" \
-H "Content-Type: application/json" \
-d '{"npub": "npub1...", "reason": "Spam"}'Import your Nostr contact list:
- Go to Trust page
- Click Import Follows
- Your Kind 3 (contact list) events are fetched
- Follows are added to the trust graph
For more sophisticated trust, use Curators.
A curator is a trusted entity that:
- Reviews content
- Applies rulesets (moderation policies)
- Signs verification decisions
- Publishes decisions to Nostr
| Approach | Pros | Cons |
|---|---|---|
| Simple WoT | Easy, automatic | Limited moderation |
| Curators | Active moderation, rulesets | More setup |
- Go to Trust → Curators tab
- Click Add Curator
- Enter curator's npub
- Set weight (for aggregation)
- Save
When multiple curators exist, decisions are aggregated:
| Mode | Behavior |
|---|---|
any |
Any accept = content appears |
all |
All must accept |
quorum |
N of M must agree |
weighted |
Weight-based voting |
Configure in UI:
- Go to Trust → Curators
- Click Aggregation Settings
- Choose mode
- Set quorum (if applicable)
- Save
Configure via API:
curl -X PUT http://localhost:9999/api/trust/aggregation \
-H "X-API-Key: your-key" \
-H "Content-Type: application/json" \
-d '{"mode": "quorum", "quorum_required": 2}'You → follow → Alice → uploads content → You see it
You → follow → Bob → follows → Carol → uploads → You DON'T see it (depth 1)
Curator → accepts → Torrent
You → trust → Curator
Result: You see the torrent
Curator A → accepts
Curator B → accepts
Curator C → rejects
Policy: quorum=2
Result: Content appears (2/3 accept)
Curators create signed decisions:
{
"decision": "accept",
"reason_codes": [],
"ruleset_type": "semantic",
"ruleset_version": "1.0.0",
"ruleset_hash": "sha256...",
"target_infohash": "aabbccdd...",
"curator_pubkey": "npub1...",
"signature": "sig..."
}- Go to Curation page
- Browse decisions
- Filter by status, curator
Certain rejection codes always take priority:
| Code | Description | Behavior |
|---|---|---|
LEGAL_DMCA |
DMCA takedown | Always reject |
LEGAL_ILLEGAL |
Illegal content | Always reject |
ABUSE_SPAM |
Spam | Always reject |
ABUSE_MALWARE |
Malware | Always reject |
These override aggregation policy - one rejection with these codes means content is rejected.
Your Nostr identity is:
- Your reputation - How others trust you
- Your access - What content you can see
- Your signature - For publishing
Protect your nsec:
- Don't share it
- Don't commit to version control
- Consider hardware key for high security
Before trusting a curator:
- Review their reputation
- Check their ruleset version
- Consider their moderation style
- Start with low weight, increase over time
If a curator goes rogue:
- Remove from trust list
- Their decisions stop affecting your index
- Content they accepted remains (re-evaluate manually if needed)
- Set depth to 1
- Add a few known-good publishers to whitelist
- Import your Nostr follows
- Gradually discover more through your network
- Follow active uploaders on Nostr
- Trust curators with good reputations
- Blacklist bad actors promptly
- Adjust depth based on noise level
- Set depth to 0 (strict whitelist)
- Enable tag filtering
- Import/create rulesets
- Sign and publish decisions
- Share your npub with users
- Check trust depth (0 = whitelist only)
- Verify relays are connected
- Confirm whitelist has entries (if depth 0)
- Check indexer is running
- Lower trust depth
- Use curators instead of simple WoT
- Add spammers to blacklist
- Enable tag filtering
- Check blacklist (may have blocked publisher)
- Verify curator decisions
- Check if publisher was removed from follows
- Curation - Set up as a curator
- Configuration - Configure trust settings
- Architecture - Understand the system