Skip to content
NoDNS.shop

Ecosystem

The tools around the protocol

nodns turns Nostr events into live DNS records — publish a signed event, get a globally resolvable record in seconds. The ecosystem around it spans zone discovery, real-time monitoring, conformance testing, and a CLI that catches discrepancies before users do.

Live Tools

Architecture

Five independent components talk over open protocols. No component trusts another implicitly — every claim is cryptographically verified or cross-checked against a second source.

Nostr Relays
kind:31990 (zones)
kind:11111 (records)
relay.cashu.email
damus, nos.lol, ...
RegistrarDiscovery
Subscribe to 31990
Validate DNS TXT
Cross-sign zones
Surface status
nodns-botRust
Validate 11111
Check authority
Verify Cashu
Push via DDNS
DNS Backend
Knot DNS (RFC 2136)
Cloudflare API
EPP (ccTLD)
DNSSEC signed
ExplorerMonitor
Relay feed
API records
Live DNS lookup
Conformance diff

The bridge architecture is distributed — each DNS backend (Knot DDNS, Cloudflare API, EPP) is a pluggable adapter behind a uniform interface. See docs/40 for the full bridge design.

Zone Discovery Flow

Zones are not hardcoded. Any operator can announce a zone via a Nostr event, and the Registrar verifies it independently before listing it.

1

Publish Zone Event

A zone operator publishes a kind:31990 Nostr event announcing their zone. The event contains the zone name, endpoints, and a signed proof.

2

DNS TXT Cross-Sign

The same pubkey published in the Nostr event must appear in a DNS TXT record at the zone apex. This cross-references Nostr identity against DNS authority.

3

Registrar Discovers

The Registrar subscribes to kind:31990 events, fetches the TXT record, and verifies the pubkey matches. Only cross-signed zones appear in the registry.

4

Status Surfaced

A status tag on the event signals testing or production readiness. Users see an amber banner for testing zones and can filter accordingly.

# The kind:31990 event announcing a zone
{
  "kind": 31990,
  "tags": [
    ["zone",   "nodns.shop"],
    ["endpoint", "https://nodns.shop/api"],
    ["status", "testing", "testnet — do not rely on for production"]
  ]
}

# Cross-sign: same pubkey must appear in DNS
dig nodns.shop TXT +short
"npub1..."

Conformance Testing

The CLI pulls records from three independent sources and diffs them. Discrepancies reveal unprocessed events, failed DDNS pushes, or stale caches — before they affect users.

Relay

Raw kind:11111 events as published. The source of truth for what users intended.

Bot API

Records the bot has accepted and processed. Shows what passed validation.

Live DNS

Actual responses from the authoritative nameserver. The ground truth for resolvers.

# Compare all three sources for a zone
npx nodns zone-check nodns.shop

  Source      Records   Match
  ──────────  ───────   ─────
  Relay       42        —
  Bot API     41        1 missing
  Live DNS    41        OK

  Discrepancy: relay has 1 unprocessed event (expired token)
# Export a canonical BIND zone file from any source
npx nodns zone-export nodns.shop --source dns > nodns.shop.zone

# Or pull from the bot API directly
curl -s https://nodns.shop/api/zone/nodns.shop/export

Testing Status Signaling

A status tag on the kind:31990 event declares whether a zone is safe for production use. It is NIP-90 compatible and relay-filterable, so clients can automatically exclude testing zones.

Testing

Amber banner shown. Records may be wiped, mint is testnet, DNSSEC may be unsigned. Safe for experimentation.

["status", "testing", "reason"]

Production

No status tag (or explicit production). DNSSEC signed, stable mint, records persist. Clients treat as durable.

["status", "production"]

Active test zones: nodns.shop (Knot DNS / RFC 2136) and dns4sats.xyz (Cloudflare API) — both verified testnet.

Nostr-over-DNSExperimental

The core idea: store the signed Nostr event itself as a DNS TXT record at _nodns.{name}. This makes DNS self-validating — a resolver can verify a record's authenticity from the DNS response alone, with no relay access required.

Why it matters

DNS is cached everywhere. Embedding the proof in the record means the chain of authority survives relay downtime, censorship, and network partitions. The signature is verifiable offline.

How to query

# Fetch the embedded proof
dig _nodns.nodns.shop TXT +short

# Returns the base64-encoded
# kind:11111 Nostr event

Explore