NIP-39: External Identities in Profiles
NIP-39 defines how users attach external identity claims to their Nostr profiles using i tags. These tags link a Nostr pubkey to accounts on external platforms like GitHub, Twitter, or DNS domains.
How It Works
Users publish identity claims as i tags. Each tag contains a platform identifier and a proof URL where the external account links back to the Nostr pubkey, establishing bidirectional verification:
{
"tags": [
["i", "github:username", "https://gist.github.com/username/proof"],
["i", "twitter:handle", "https://twitter.com/handle/status/proof_tweet_id"]
]
}
Clients verify claims by fetching the proof URL and checking that it contains the user’s Nostr pubkey. This creates a web of identity connections without requiring centralized verification services.
Recent Changes
As of February 2026, PR #2216 extracted identity tags from kind 0 (user metadata) events to a dedicated kind 10011. The move was part of vitorpamplona’s kind 0 slimming campaign, motivated by low adoption: almost no clients implemented i tag verification, yet every kind 0 fetch carried the overhead. The new kind 10011 lets interested clients fetch identity claims separately.
Primary sources:
Mentioned in:
See also: