Community

Nostr archive

NIP-05: DNS-Based Identifiers

Our archive page for NIP-05, explaining what it does, where it fits in Nostr and why it matters for identity, apps, relays and real-world systems.

NIP-05: DNS-Based Identifiers visual
Route Under the hood Events, NIPs, relay behavior and the shared formats apps can trust.
Protocol route

Protocol and NIPs guide

This shelf turns standards into plain consequences: what becomes portable, what gets safer, what clients must support and what still needs product judgment.

NIPs All NIPs pages 242 pages in this routeNIP explainer pages, NIP reference pages, Protocol orientation Browse pagesClose shelf

NIP explainer pages

NIP reference pages

Android Signer Application Basic key derivation from mnemonic seed phrase Basic protocol flow bech32-encoded entities BLE Communications Blossom Bridged Events Calendar Events Chats Chess Classified Listings Code Snippets Comments Complete NIP Archive Index Crays NIP Strategy Custom Emoji Data Vending Machines Dealing with Unknown Events Delegated Event Signing Draft Events E2EE Messaging using MLS Ecash Mint Discoverability Encrypted Direct Message Event Deletion Request Expiration Timestamp External Content IDs External Identities Extra metadata fields and tags File Metadata Follow List Forum Threads Geocaching Gift Wrap git stuff Handling Mentions HTTP Auth HTTP File Storage Integration Labeling Lists Live Activities Mapping Nostr keys to DNS-based identifiers Moderated Communities Negentropy Syncing NIP and standards research NIP-01: Basic protocol flow NIP-01: NIP-01 NIP-02: Follow List NIP-02: NIP-02 NIP-03: NIP-03 NIP-03: OpenTimestamps Attestations NIP-04: Encrypted Direct Message NIP-04: NIP-04 NIP-05: Mapping Nostr keys to DNS-based identifiers NIP-05: NIP-05 NIP-06: Basic key derivation from mnemonic seed phrase NIP-06: NIP-06 NIP-07: NIP-07 NIP-07: window.nostr capability for web browsers NIP-08: Handling Mentions NIP-08: NIP-08 NIP-09: Event Deletion Request NIP-09: NIP-09 NIP-10: NIP-10 NIP-10: Text Notes and Threads NIP-12: NIP-12 NIP-13: NIP-13 NIP-13: Proof of Work NIP-14: NIP-14 NIP-14: Subject tag NIP-15: NIP-15 NIP-16: NIP-16 NIP-17: NIP-17 NIP-17: Private Direct Messages NIP-18: NIP-18 NIP-18: Reposts NIP-19: bech32-encoded entities NIP-19: NIP-19 NIP-20: NIP-20 NIP-21: NIP-21 NIP-21: nostr: URI scheme NIP-22: Comments NIP-22: NIP-22 NIP-23: NIP-23 NIP-24: Extra metadata fields and tags NIP-24: NIP-24 NIP-25: NIP-25 NIP-25: Reactions NIP-26: Delegated Event Signing NIP-26: Delegator: NIP-27: NIP-27 NIP-27: Text Note References NIP-28: NIP-28 NIP-28: Public Chat NIP-29: NIP-29 NIP-30: Custom Emoji NIP-30: NIP-30 NIP-31: Dealing with Unknown Events NIP-31: NIP-31 NIP-32: Labeling NIP-32: NIP-32 NIP-33: NIP-33 NIP-34: git stuff NIP-34: NIP-34 NIP-35: NIP-35 NIP-35: Torrents NIP-36: NIP-36 NIP-36: Sensitive Content NIP-37: Draft Events NIP-37: NIP-37 NIP-38: NIP-38 NIP-38: User Statuses NIP-39: External Identities NIP-39: NIP-39 NIP-40: Expiration Timestamp NIP-40: NIP-40 NIP-42: NIP-42 NIP-43: NIP-43 NIP-44: Calculates length of the padded byte array. NIP-44: Versioned Encryption NIP-45: Counting Results NIP-45: NIP-45 NIP-46: NIP-46 NIP-46: Nostr Remote Signing NIP-47: NIP-47 NIP-48: Bridged Events NIP-48: NIP-48 NIP-49: NIP-49 NIP-49: Private Key Encryption NIP-50: Search Capability NIP-51: Lists NIP-51: NIP-51 NIP-52: Calendar Events NIP-52: NIP-52 NIP-53: Live Activities NIP-53: NIP-53 NIP-54: NIP-54 NIP-54: Wiki NIP-55: Android Signer Application NIP-55: NIP-55 NIP-56: NIP-56 NIP-56: Reporting NIP-57: NIP-57 NIP-58: NIP-58 NIP-59: Gift Wrap NIP-59: NIP-59 NIP-5A: Static Websites / nsites NIP-60: NIP-60 NIP-61: NIP-61 NIP-62: NIP-62 NIP-62: Request to Vanish NIP-64: Chess NIP-64: NIP-64 NIP-65: NIP-65 NIP-68: NIP-68 NIP-68: Picture-first feeds NIP-69: NIP-69 NIP-69: Peer-to-peer Order events NIP-70: NIP-70 NIP-70: Protected Events NIP-71: NIP-71 NIP-72: Moderated Communities NIP-72: NIP-72 NIP-73: External Content IDs NIP-73: NIP-73 NIP-75: NIP-75 NIP-77: Negentropy Syncing NIP-77: NIP-77 NIP-78: Application-specific data NIP-78: NIP-78 NIP-7D: Forum Threads NIP-84: Highlights NIP-84: NIP-84 NIP-85: NIP-85 NIP-85: Trusted Assertions NIP-86: NIP-86 NIP-87: Ecash Mint Discoverability NIP-87: NIP-87 NIP-88: NIP-88 NIP-88: Polls NIP-89: NIP-89 NIP-89: Recommended Application Handlers NIP-90: Data Vending Machines NIP-90: NIP-90 NIP-92: NIP-92 NIP-94: File Metadata NIP-94: NIP-94 NIP-96: HTTP File Storage Integration NIP-96: NIP-96 NIP-98: HTTP Auth NIP-98: NIP-98 NIP-99: Classified Listings NIP-99: NIP-99 NIP-A0: Voice Messages NIP-A4: Public Messages NIP-B0: Web Bookmarks NIP-B7: Blossom NIP-BE: BLE Communications NIP-C0: Code Snippets NIP-C7: Chats NIP-CC: Geocaching NIP-EE: E2EE Messaging using MLS NIP-F4: Podcasts NIPs mirror Nostr NIPs Nostr Remote Signing nostr-protocol/nips nostr: URI scheme OpenTimestamps Attestations Peer-to-peer Order events Picture-first feeds Podcasts Polls Private Direct Messages Private Key Encryption Proof of Work Protected Events Public Chat Public Messages Reactions Reporting Reposts Request to Vanish Search Capability Sensitive Content Static Websites / nsites Subject tag Text Note References Text Notes and Threads Torrents Trusted Assertions User Statuses Versioned Encryption Voice Messages Web Bookmarks Wiki window.nostr capability for web browsers

Protocol orientation

NIPs6 min readNostr archive

NIP-05: DNS-Based Identifiers

Our archive page for NIP-05, explaining what it does, where it fits in Nostr and why it matters for identity, apps, relays and real-world systems.

NIP-05 makes Nostr identities easier to recognize by mapping a public key to a DNS-based identifier.

The quick readOur archive page for NIP-05, explaining what it does, where it fits in Nostr and why it matters for identity, apps, relays and real-world systems.
A good protocol rule is a quiet agreement that lets everyone keep building.
A good protocol rule is a quiet agreement that lets everyone keep building.
NIPs need to feel like shared operating rules, not sacred paperwork.
NIPs need to feel like shared operating rules, not sacred paperwork.

What it standardizes

It lets a profile publish an identifier such as name@example.com and lets clients verify that the domain maps the name back to the public key.

The important thing to understand is that NIP-05 is not an app feature by itself. It is a shared convention. A client, relay, wallet, signer or adjacent service can implement the convention, ignore it, implement only part of it, or hide it behind a simpler user experience.

That is why a NIP page needs two layers: the technical shape builders must respect, and the product consequence a normal reader can feel.

  • Protocol layer. NIP-05 defines a pattern for interoperable behavior, not a closed product.
  • Interoperability. The value is that different apps can understand the same signed data or request shape.
  • Optionality. Support can vary by client, relay and service, so products need fallbacks and clear messaging.

Data shape and moving parts

A domain serves a nostr.json file under .well-known. Clients check the name and public-key mapping before displaying the identifier as verified.

Read the moving parts in this order: who signs, what object is created, which fields or tags carry meaning, where the object is published, what relays or services have to support it, and how a second client can verify or interpret the result later.

This sequence matters because Nostr problems often look like UX problems at the surface while the real failure is lower down: a missing tag, a relay policy mismatch, a signer permission, a stale relay list, a wallet limit, an unsupported event kind or an indexer that never saw the event.

  • Signer boundary. Which key signs the event or request, and should a dedicated signer handle it?
  • Relay boundary. Does the relay merely store/forward, or must it enforce authentication, search, policy or retention?
  • Client boundary. What must the user see so the feature feels understandable instead of protocol-shaped?
  • Fallback boundary. What happens when another app, relay or wallet does not support this convention yet?

Product consequence for us

We can use domain-backed identifiers for creators, venues, Association accounts and ecosystem services so users can recognize official identities.

For us, NIP-05 matters only when it improves a real flow: identity, publishing, access, value transfer, media, venue context, reputation, moderation, governance or developer operations. If it does not help one of those flows, it can stay in the archive until the product need is real.

The user should not have to memorize the NIP number. The product should translate the convention into plain actions: verify a profile, sign safely, publish content, receive a zap, connect a wallet, prove status, enter a space, vote, or recover context across apps.

  • Crays. Profiles, creator pages and social proof need portable identity rather than a closed account table.
  • Crays World. Real venues need local context, member state, reputation and payments that can survive app changes.
  • Governance path. Future governance needs signed identity, membership context and auditable participation signals.

Risks, edge cases and implementation discipline

NIP-05 does not custody the key. If a domain is compromised or a private key is stolen, users still need clear recovery and communication practices.

The edge cases are where a standard becomes a product decision. A feature can be technically valid and still confuse users, leak metadata, create moderation problems, increase key exposure, break search, overload relays or make payments feel unreliable.

Before shipping anything based on NIP-05, test current client support, relay behavior, signer permissions, failure states, abuse cases and the exact words shown to a non-technical user. If the wording cannot be made simple, the implementation is probably not ready for a mainstream Crays surface.

  • Do not overpromise. A NIP gives a shared format. It does not magically solve onboarding, moderation, UX or custody.
  • Keep private keys away. Any feature that increases private-key exposure increases the attack surface.
  • Make support visible. A reader should know whether the feature works everywhere, only in some clients, or only with specific relays/services.
  • Use plain language. Most users need outcomes: login, pay, publish, vote, prove status, access a venue.

What this standard changes

NIP-05: DNS-Based Identifiers belongs to the protocol standards layer. The page should help you answer one concrete question instead of forcing you through a generic Nostr essay.

The short version is: our archive page for NIP-05, explaining what it does, where it fits in Nostr and why it matters for identity, apps, relays and real-world systems. The deeper version is to see which concept, standard, product surface or human decision actually changes because of it.

The protocol shelf works when a reader can see the decision path.
The protocol shelf works when a reader can see the decision path.
Common standards let independent products act like one larger culture.
Common standards let independent products act like one larger culture.

Who has to implement it

The useful machinery around NIP-05: DNS-Based Identifiers is event kinds, tags, relay behavior, client support and backwards compatibility. Name those moving parts directly, because vague protocol language is where confusion starts.

In the nip-05-identifiers chapter, A strong page gives you enough context to recognize the term in another client, NIP, relay policy, wallet prompt or source document without pretending every reader is already a protocol engineer.

  • Status. Is the NIP mandatory, optional, draft, final or unrecommended?
  • Layer. Client, relay, signer, wallet, media server or indexer?
  • Adoption. Where can you verify support?

Event, tag or service surface

Test NIP-05: DNS-Based Identifiers by asking what is signed, where it is stored, who renders it, which relays or services are involved and what survives when the first app or server is unavailable.

In the nip-05-identifiers chapter, That test keeps the explanation tied to reality. It also tells us which internal links belong in the body: foundations first, then standards, then practical examples.

Compatibility and adoption

In the nip-05-identifiers chapter, The main risk is that support can vary between clients and relays, so the feature may feel real in one place and missing in another. The page should say that plainly and then show the safer reading: what works today, what is experimental and what needs source verification.

In the nip-05-identifiers chapter, This is where dense content beats long content. Give the reader facts, constraints, examples and next steps instead of repeating broad claims about openness or decentralization.

Product risk

For us, NIP-05: DNS-Based Identifiers matters only when it improves understanding or helps a real flow: identity, publishing, relay choice, signing, payment, media, moderation, commerce, venue context or governance.

In the nip-05-identifiers chapter, That does not mean every page has to become our product pitch. It means the page should make the connection visible when the topic affects our ecosystem, and stay purely educational when it does not.

Neighboring standards

The best next step from NIP-05: DNS-Based Identifiers is not a generic link pile. Connect it to the closest prerequisite, the closest technical standard and the closest practical example.

In the nip-05-identifiers chapter, A large archive becomes useful when every page behaves like a node in a knowledge graph: this explains one thing, points to what it depends on and shows where the idea is used.

Back to the Crays Nostr page