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
Registrar
LiveDomain registration with zone discovery. Finds zones from kind:31990 Nostr events, validates via DNS TXT cross-signing, and surfaces testing/production status.
- →Zone discovery
- →Testing status badges
- →Multi-zone registration
Explorer
LiveReal-time event feed from relay.cashu.email with payment badges, validity checks, and a Zone Monitor that compares records across relay, API, and DNS.
- →Live event feed
- →3-source comparison
- →Payment & validity badges
Bot API
RESTThe bot exposes records, health checks, pricing, availability, and a canonical BIND zone export endpoint for any configured zone.
- →GET /api/records
- →GET /api/zone/{zone}/export
- →GET /api/health
CLI
npxTypeScript CLI with zone validation, conformance testing, and zone-file export from any source. Run it ad-hoc with no install.
- →npx nodns zone-check
- →npx nodns zone-export
- →3-source conformance
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.
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.
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.
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.
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.
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/exportTesting 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