Profile
Any Nostr keypair — user, community, bot, or organisation — can publish a replaceable profile event describing itself. All fields are stored as indexed tags for efficient relay queries, with a stringified JSON copy in content for compatibility with legacy clients.
Profile Metadata Event (kind:0)
A profile metadata event describes any identifier: users, communities, bots, organizations, or any other entity with agency. All fields are stored as tags (the primary format), with a stringified JSON copy in content for compatibility with legacy clients.
This is a replaceable event (see [Protocol](protocol.md)). Only the latest event per pubkey is kept by relays.
Tags
All tags are optional. Use whichever fields are relevant for your identifier.
| Tag | Description |
|-----|-------------|
| name | Username, community name, bot name, etc. (e.g., "alice", "Bitcoin Enthusiasts") |
| about | Short bio or description |
| picture | URL to profile picture/avatar image |
| display_name | Alternative, bigger name with richer characters than name |
| nip05 | NIP-05 identifier for verification (e.g., "[email protected]") |
| website | Web URL related to the entity |
| banner | URL to wide banner image (~1500x500 pixels) |
| lud06 | Lightning Address for receiving tips (LNURL format) |
| lud16 | Lightning Address (user@domain format) |
| bot | Boolean flag - "true" if automated content (chatbots, newsfeeds) |
| community | Event reference 10222:<pubkey>:<d-tag> - marks this as a community |
| relay | Event reference 10002:<pubkey>: - links to user’s relay list (see [Relay List](relay-list.md)) |
Event Structure
Tags are primary. All metadata fields MUST be stored as tags for efficient relay indexing and querying.
Content is secondary. For compatibility with legacy Nostr clients, the same fields MUST also be included as a stringified JSON object in the content field.
{
"kind": 0,
"pubkey": "<pubkey>",
"tags": [
// Tags are PRIMARY - indexed and queryable
["name", "alice"],
["about", "Developer and writer"],
["picture", "https://example.com/alice.jpg"],
["website", "https://alice.example"]
],
// Content is SECONDARY - for legacy compatibility
"content": "{\"name\":\"alice\",\"about\":\"Developer and writer\",\"picture\":\"https://example.com/alice.jpg\",\"website\":\"https://alice.example\"}",
"created_at": 1234567890
}
Examples
Example 1: User Profile
{
"kind": 0,
"pubkey": "user-alice-hex-pubkey",
"tags": [
["name", "alice"],
["display_name", "Alice ✨"],
["about", "Designer & open source enthusiast"],
["picture", "https://example.com/alice.jpg"],
["banner", "https://example.com/alice-banner.jpg"],
["website", "https://alice.design"],
["relay", "10002:user-alice-hex-pubkey:"]
],
"content": "{\"name\":\"alice\",\"display_name\":\"Alice ✨\",\"about\":\"Designer & open source enthusiast\",\"picture\":\"https://example.com/alice.jpg\",\"banner\":\"https://example.com/alice-banner.jpg\",\"website\":\"https://alice.design\",\"relay\":\"10002:user-alice-hex-pubkey:\"}",
"created_at": 1234567890,
"sig": "<signature>"
}
Example 2: Community Profile
For community pubkeys, include the community tag:
{
"kind": 0,
"pubkey": "community-hex-pubkey",
"tags": [
["name", "Gardening Club"],
["about", "A community for sharing gardening tips and plant care"],
["picture", "https://example.com/garden-logo.png"],
["banner", "https://example.com/garden-banner.png"],
["website", "https://gardeningclub.example"],
["community", "10222:community-hex-pubkey:"]
],
"content": "{\"name\":\"Gardening Club\",\"about\":\"A community for sharing gardening tips and plant care\",\"picture\":\"https://example.com/garden-logo.png\",\"banner\":\"https://example.com/garden-banner.png\",\"website\":\"https://gardeningclub.example\",\"community\":\"10222:community-hex-pubkey:\"}",
"created_at": 1234567890,
"sig": "<signature>"
}
Example 3: Bot Profile
{
"kind": 0,
"pubkey": "bot-hex-pubkey",
"tags": [
["name", "weather-bot"],
["about", "Automated weather updates for major cities"],
["picture", "https://example.com/weather-bot-avatar.png"],
["bot", "true"]
],
"content": "{\"name\":\"weather-bot\",\"about\":\"Automated weather updates for major cities\",\"picture\":\"https://example.com/weather-bot-avatar.png\",\"bot\":\"true\"}",
"created_at": 1234567890,
"sig": "<signature>"
}
Client Recommendations
Displaying Profiles
Clients SHOULD:
- Display display_name if present, otherwise fall back to name
- Respect the bot flag and show appropriate indicators (bot badge, etc.)
- Check for community tag to identify communities and show special UI
Clients MAY:
- Show Lightning tip button if lud16 or lud06 is present
- Link to website if provided
- Show verification status if nip05 is present and valid
Querying Profiles
Relays SHOULD:
- Index all tag fields for efficient querying
- Allow queries like {"kinds":[0],"#name":["alice"]}
- Support community discovery via {"kinds":[0],"#community":[]}
Publishing Profiles
Clients MUST: - Include all metadata as tags (primary) - Duplicate tags as JSON in content (compatibility) - Use the same field names in both tags and JSON
Image Specifications
Profile Picture: - Recommended size: 256x256 pixels minimum - Aspect ratio: 1:1 (square) - Formats: JPEG, PNG, or WebP - Max file size: 500KB for optimal loading
Banner: - Recommended size: 1500x500 pixels - Aspect ratio: 3:1 (wide) - Formats: JPEG, PNG, or WebP - Max file size: 1MB for optimal loading
Pinned Content
Any profile can publish a "kind 10001" pin list to feature selected events — notes, articles, apps, or any other addressable content — on their profile page. Clients SHOULD display pinned events prominently. Tag order in the pin list controls display sequence.