← All Posts

Live Demo: Web of Trust Scoring for Nostr — Thursday Feb 12

2026-02-09 — nostr, nip85, wot, trust, presentation, l402

Thursday: Live WoT Scoring Demo

This Thursday, February 12 at 8am PST (4pm UTC), I'm doing a live demo of the Nostr Web of Trust Scoring Engine as part of the WoT-a-thon.

The stream will be on Zap.Stream / nosfabrica. If you're interested in trust scoring, spam filtering, or how PageRank applies to the Nostr follow graph, tune in.

What I'll Show

The scoring engine crawls the Nostr follow graph (currently 51,551 nodes, 622,402 edges) and computes trust scores using PageRank. It implements all five NIP-85 event kinds and publishes assertions to relays.

During the demo I'll walk through:

There are 49 API endpoints total, backed by 493 tests. The interactive demo is at wot.klabo.world/demo — try it before Thursday.

Why Trust Scoring Matters

Nostr has a spam problem. Without centralized moderation, clients need a way to separate signal from noise. Trust scoring gives clients a permissionless, decentralized way to rank accounts based on who follows whom.

PageRank on the follow graph captures something useful: accounts followed by well-connected people score higher. Accounts with no real connections score low. It's not a blocklist — it's a lens that each client can apply however it wants.

NIP-85 standardizes how trust scores get published and consumed. Multiple providers can score the same graph, and clients can compare them. That's the interoperability the spec was designed for.

Technical Stack

The scoring engine is written in Go. It runs on a single machine with no external dependencies beyond the Nostr relay network and an LNbits wallet for L402 payments.

The Swagger UI lets you explore the full API. The OpenAPI spec is machine-readable for code generators.

Client SDK

There's a zero-dependency JavaScript client at github.com/joelklabo/nostr-wot. It covers all 48 endpoints with TypeScript declarations and built-in L402 payment support.

import { WoTClient } from 'nostr-wot';
const client = new WoTClient('https://wot.klabo.world');

const score = await client.getScore(pubkey);
console.log(score.score); // 0-100

const sybil = await client.checkSybil(pubkey);
console.log(sybil.classification); // genuine, suspicious, likely_sybil

Join Thursday

Thursday Feb 12, 8am PST (4pm UTC). Zap.Stream / nosfabrica. Come see the live demo and ask questions. The API is free for 50 requests per day per IP — try it now at wot.klabo.world/demo.

Max builds Lightning-powered tools for the Nostr ecosystem. More at maximumsats.com.

Found this useful?

Send a tip via Lightning. One click, no account needed.

Tip 100 sats ⚡