What Does `did-nostr` Do?
Melvin Carvalho

Melvin Carvalho @melvincarvalho

About: Mathematician and web developer

Joined:
Aug 6, 2020

What Does `did-nostr` Do?

Publish Date: Apr 2
0 0

🧭 What Does did-nostr Do?

did-nostr is a DID method that brings decentralized identity to Nostr. It lets you attach useful metadata and service endpoints to your Nostr public key, turning it into a portable identity hub.

Instead of just being a key that signs events, your Nostr pubkey becomes a rich identifier that can point to relays, profiles, storage, Bitcoin wallets, and much more.


💡 Example: Basic did-nostr Document

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/nostr/context"
  ],
  "id": "did:nostr:124c0fa99407182ece5a24fad9b7f6674902fc422843d3128d38a0afbee0fdd2",

  "verificationMethod": [
    {
      "id": "#key1",
      "type": "SchnorrVerification2023",
      "controller": "did:nostr:124c0fa99407182ece5a24fad9b7f6674902fc422843d3128d38a0afbee0fdd2",
      "publicKeyBase16": "124c0fa99407182ece5a24fad9b7f6674902fc422843d3128d38a0afbee0fdd2"
    }
  ],

  "authentication": ["#key1"],
  "assertionMethod": ["#key1"],

  "service": [
    {
      "id": "#relay",
      "type": "Relay",
      "serviceEndpoint": [
        "wss://relay.nostr.example",
        "wss://nostr-pub.wellorder.net"
      ]
    },
    {
      "id": "#profile",
      "type": "Profile",
      "serviceEndpoint": "https://your.site/profile.json"
    },
    {
      "id": "#storage",
      "type": "DecentralizedStorage",
      "serviceEndpoint": "https://storage.example.com/alice/"
    },
    {
      "id": "#inbox",
      "type": "Messaging",
      "serviceEndpoint": "https://inbox.example.org/alice"
    },
    {
      "id": "#vc",
      "type": "VerifiableCredentialService",
      "serviceEndpoint": "https://vc.example.com/submit"
    },
    {
      "id": "#wallet",
      "type": "BitcoinTaprootAddress",
      "serviceEndpoint": "bc1p...yourTaprootAddress"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

🧩 What Kind of Services Can You Attach?

Here are just a few possibilities:

🔌 Relays

Let others know where you're active or reachable.

{
  "id": "#relay",
  "type": "Relay",
  "serviceEndpoint": [
    "wss://relay.nostr.example",
    "wss://nostr.damus.io"
  ]
}
Enter fullscreen mode Exit fullscreen mode

🧾 Consistent Profiles

Point to a hosted profile document (e.g., NIP-05, JSON-LD, or Solid).

{
  "id": "#profile",
  "type": "Profile",
  "serviceEndpoint": "https://yoursite.example/profile.json"
}
Enter fullscreen mode Exit fullscreen mode

📦 Storage

Advertise where your public data or documents live.

{
  "id": "#storage",
  "type": "DecentralizedStorage",
  "serviceEndpoint": "https://storage.example/alice/"
}
Enter fullscreen mode Exit fullscreen mode

✉️ Messaging Inbox

Allow others to DM you using email-style or DIDComm-compatible protocols.

{
  "id": "#inbox",
  "type": "Messaging",
  "serviceEndpoint": "https://inbox.example.org/users/alice"
}
Enter fullscreen mode Exit fullscreen mode

🪪 Verifiable Credentials

Issue or receive credentials, badges, or attestations.

{
  "id": "#vc",
  "type": "VerifiableCredentialService",
  "serviceEndpoint": "https://vc.example.com/submit"
}
Enter fullscreen mode Exit fullscreen mode

🪙 Bitcoin Wallet

Include your Taproot (P2TR) address derived from your pubkey.

{
  "id": "#wallet",
  "type": "BitcoinTaprootAddress",
  "serviceEndpoint": "bc1p...yourTaprootAddress"
}
Enter fullscreen mode Exit fullscreen mode

🤝 Why Use did-nostr?

Because your Nostr pubkey can do more than sign events. With a did:nostr document, you can:

  • Make your key discoverable
  • Declare your preferred relays
  • Publish profile or storage locations
  • Link to wallet or message inboxes
  • Become part of a broader decentralized identity ecosystem

All of this is portable, self-hosted, and standardized.


📬 Want to Build With It?

The did-nostr method spec is open and evolving. You can check out the latest draft here:

👉 https://nostrcg.github.io/did-nostr/

PRs welcome. Identities are yours. Let’s build the semantic web of Nostr, one DID at a time.


Comments 0 total

    Add comment