You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A public, high-performance Web-of-Trust resolver written in Rust, plus the
Sync Server that feeds it. The resolver keeps as much of a very large WoT
Graph in memory as the machine allows — about 12 bytes per edge — and loads
the rest by subject in one or two contiguous reads. The graph is built from
trust (32009), rating (32014), and identity-claim (10011) events; the
resolver answers queries for any root over long-lived WebSocket connections,
with multi-threaded, guard-railed resolution.
Status: resolver and Sync Server built (RocksDB event store) · 2026-10-01
Strictly a WoT graph
Kinds 32009, 32014, 10011 only.
No kind 0 profiles, no X identity or post data, no identity evidence
supplied by clients. A result depends only on public signed events.
X data (accounts and posts a user has seen, their Bio evidence) stays in
the Attention extension.
Exactly the same API as the Personal Server
Protocol:resolver protocol v1 —
the same messages, operations, defaults, results, errors, auth, ingest,
deletions, and guardrails as the Personal Server, proven by one shared
session suite (conformance.md § One API).
A client switches between the servers by changing the URL.
Global configuration of the shared settings: auth.reads = open
(option members with the NIP-43 whitelist and NIP-42 challenge),
auth.writes = members so only whitelisted writers push, tighter deadlines,
and rate limits. Later the whitelist can be derived from the operator's web
of trust.
Stance: an optimization, not an oracle. Every answer cites signed events
anyone can verify. No global rank, no objective score.
Two binaries
Binary
Role
dtp-global (resolver)
Compact in-memory graph, resolver, WebSocket endpoint; never connects to relays
dtp-sync (Sync Server)
Crawls relays and pushes events into one or more resolvers as an authenticated, whitelisted writer
Any tool that can publish Nostr events with NIP-42 auth can feed a resolver
alongside or instead of the Sync Server. Several writers can push at once;
one Sync Server can feed many resolver replicas.
Clustered by subject and author: a subject that is not in memory loads in one or two contiguous reads; batches and frontiers are prefetched in one submission
Every eligible winner is in the graph store; reachability from active roots decides warmth and what disk evicts first, and Sybil clusters are never paged in
Graph store: what a walk touches, bytes per edge and node, packed CSRs, tiered segments, residency and locality, fast subject loading, binding indexes, epochs, restart, memory budget
Spike: dtp-model + packed segment format + exact walk with guardrails; corpus runner green; bytes per edge measured; no network
G1
Event store, delta → L1 flush and merges, restart from segments, WebSocket endpoint with AUTH + EVENT ingest and the NIP-43 whitelist, dtp-sync with relay live + backfill
G2
DTP read operations, quotas, telemetry pages and /metrics, single-node test deployment
G3
Root fields, parallel batch, residency (pinning, prefetch, warm-up, locality layout), benchmarks at 1 B resident and 5 B disk-backed edges (validates the targets; decides GS-D7)
G4
Retention and warmth classes, root activation, per-root binding (lenient and strict), want hints
G5
Frontier and field operations, NIP-86 management, negentropy in dtp-sync, public beta with privacy policy