- Introduced a comprehensive skill for the Nostr protocol, covering client and relay implementation, event structure, cryptographic operations, and best practices. - Added detailed reference files including an overview of NIPs, event kinds, common mistakes, and a complete guide to the Nostr protocol. - Included quick start examples and a checklist for implementing Nostr features effectively. - Ensured documentation is aligned with the latest standards and practices for Nostr development.
9.0 KiB
Nostr Event Kinds - Complete Reference
This document provides a comprehensive list of all standard and commonly-used Nostr event kinds.
Standard Event Kinds
Core Events (0-999)
Metadata and Profile
- 0:
Metadata- User profile information (name, about, picture, etc.)- Replaceable
- Content: JSON with profile fields
Text Content
- 1:
Text Note- Short-form post (like a tweet)- Regular event (not replaceable)
- Most common event type
Relay Recommendations
- 2:
Recommend Relay- Deprecated, use NIP-65 instead
Contact Lists
- 3:
Contacts- Following list with optional relay hints- Replaceable
- Tags:
ptags for each followed user
Encrypted Messages
- 4:
Encrypted Direct Message- Private message (NIP-04, deprecated)- Regular event
- Use NIP-44 instead for better security
Content Management
- 5:
Event Deletion- Request to delete events- Tags:
etags for events to delete - Only works for own events
- Tags:
Sharing
- 6:
Repost- Share another event- Tags:
efor reposted event,pfor original author - May include original event in content
- Tags:
Reactions
- 7:
Reaction- Like, emoji reaction to event- Content: "+" or emoji
- Tags:
efor reacted event,pfor author
Channel Events (40-49)
- 40:
Channel Creation- Create a public chat channel - 41:
Channel Metadata- Set channel name, about, picture - 42:
Channel Message- Post message in channel - 43:
Channel Hide Message- Hide a message in channel - 44:
Channel Mute User- Mute a user in channel
Regular Events (1000-9999)
Regular events are never deleted or replaced. All versions are kept.
- 1000:
Example regular event - 1063:
File Metadata(NIP-94) - Metadata for shared files- Tags: url, MIME type, hash, size, dimensions
Replaceable Events (10000-19999)
Only the latest event of each kind is kept per pubkey.
- 10000:
Mute List- List of muted users/content - 10001:
Pin List- Pinned events - 10002:
Relay List Metadata(NIP-65) - User's preferred relays- Critical for routing
- Tags:
rwith relay URLs and read/write markers
Ephemeral Events (20000-29999)
Not stored by relays, only forwarded once.
- 20000:
Example ephemeral event - 21000:
Typing Indicator- User is typing - 22242:
Client Authentication(NIP-42) - Auth response to relay
Parameterized Replaceable Events (30000-39999)
Replaced based on d tag value.
Lists (30000-30009)
-
30000:
Categorized People List- Custom people listsdtag: list identifierptags: people in list
-
30001:
Categorized Bookmark List- Bookmark collectionsdtag: list identifiereoratags: bookmarked items
-
30008:
Badge Definition(NIP-58) - Define a badge/achievementdtag: badge ID- Tags: name, description, image
-
30009:
Profile Badges(NIP-58) - Badges displayed on profiledtag: badge IDeoratags: badge awards
Long-form Content (30023)
- 30023:
Long-form Article(NIP-23) - Blog post, articledtag: article identifier (slug)- Tags: title, summary, published_at, image
- Content: Markdown
Application Data (30078)
- 30078:
Application-specific Data(NIP-78)dtag: app-name:data-key- Content: app-specific data (may be encrypted)
Other Parameterized Replaceables
-
31989:
Application Handler Information(NIP-89)- Declares app can handle certain event kinds
-
31990:
Handler Recommendation(NIP-89)- User's preferred apps for event kinds
Special Event Kinds
Authentication & Signing
- 22242:
Client Authentication- Prove key ownership to relay - 24133:
Nostr Connect- Remote signer protocol (NIP-46)
Lightning & Payments
-
9734:
Zap Request(NIP-57) - Request Lightning payment- Not published to regular relays
- Sent to LNURL provider
-
9735:
Zap Receipt(NIP-57) - Proof of Lightning payment- Published by LNURL provider
- Proves zap was paid
-
23194:
Wallet Request(NIP-47) - Request wallet operation -
23195:
Wallet Response(NIP-47) - Response to wallet request
Content & Annotations
-
1984:
Reporting(NIP-56) - Report content/users- Tags: reason (spam, illegal, etc.)
-
9802:
Highlights(NIP-84) - Highlight text- Content: highlighted text
- Tags: context, source event
Badges & Reputation
- 8:
Badge Award(NIP-58) - Award a badge to someone- Tags:
afor badge definition,pfor recipient
- Tags:
Generic Events
-
16:
Generic Repost(NIP-18) - Repost any event kind- More flexible than kind 6
-
27235:
HTTP Auth(NIP-98) - Authenticate HTTP requests- Tags: URL, method
Event Kind Ranges Summary
| Range | Type | Behavior | Examples |
|---|---|---|---|
| 0-999 | Core | Varies | Metadata, notes, reactions |
| 1000-9999 | Regular | Immutable, all kept | File metadata |
| 10000-19999 | Replaceable | Only latest kept | Mute list, relay list |
| 20000-29999 | Ephemeral | Not stored | Typing, presence |
| 30000-39999 | Parameterized Replaceable | Replaced by d tag |
Articles, lists, badges |
Event Lifecycle
Regular Events (1000-9999)
Event A published → Stored
Event A' published → Both A and A' stored
Replaceable Events (10000-19999)
Event A published → Stored
Event A' published (same kind, same pubkey) → A deleted, A' stored
Parameterized Replaceable Events (30000-39999)
Event A (d="foo") published → Stored
Event B (d="bar") published → Both stored (different d)
Event A' (d="foo") published → A deleted, A' stored (same d)
Ephemeral Events (20000-29999)
Event A published → Forwarded to subscribers, NOT stored
Common Patterns
Metadata (Kind 0)
{
"kind": 0,
"content": "{\"name\":\"Alice\",\"about\":\"Nostr user\",\"picture\":\"https://...\",\"nip05\":\"alice@example.com\"}",
"tags": []
}
Text Note (Kind 1)
{
"kind": 1,
"content": "Hello Nostr!",
"tags": [
["t", "nostr"],
["t", "hello"]
]
}
Reply (Kind 1 with thread tags)
{
"kind": 1,
"content": "Great post!",
"tags": [
["e", "<root-event-id>", "<relay>", "root"],
["e", "<parent-event-id>", "<relay>", "reply"],
["p", "<author-pubkey>"]
]
}
Reaction (Kind 7)
{
"kind": 7,
"content": "+",
"tags": [
["e", "<reacted-event-id>"],
["p", "<event-author-pubkey>"],
["k", "1"]
]
}
Long-form Article (Kind 30023)
{
"kind": 30023,
"content": "# My Article\n\nContent here...",
"tags": [
["d", "my-article-slug"],
["title", "My Article"],
["summary", "This is about..."],
["published_at", "1234567890"],
["t", "nostr"],
["image", "https://..."]
]
}
Relay List (Kind 10002)
{
"kind": 10002,
"content": "",
"tags": [
["r", "wss://relay1.com"],
["r", "wss://relay2.com", "write"],
["r", "wss://relay3.com", "read"]
]
}
Zap Request (Kind 9734)
{
"kind": 9734,
"content": "",
"tags": [
["relays", "wss://relay1.com", "wss://relay2.com"],
["amount", "21000"],
["lnurl", "lnurl..."],
["p", "<recipient-pubkey>"],
["e", "<event-id>"]
]
}
File Metadata (Kind 1063)
{
"kind": 1063,
"content": "My photo from the trip",
"tags": [
["url", "https://cdn.example.com/image.jpg"],
["m", "image/jpeg"],
["x", "abc123..."],
["size", "524288"],
["dim", "1920x1080"],
["blurhash", "LEHV6n..."]
]
}
Report (Kind 1984)
{
"kind": 1984,
"content": "This is spam",
"tags": [
["e", "<reported-event-id>", "<relay>"],
["p", "<reported-pubkey>"],
["report", "spam"]
]
}
Future Event Kinds
The event kind space is open-ended. New NIPs may define new event kinds.
Guidelines for new event kinds:
- Use appropriate range for desired behavior
- Document in a NIP
- Implement in at least 2 clients and 1 relay
- Ensure backwards compatibility
- Don't overlap with existing kinds
Custom event kinds:
- Applications can use undefined event kinds
- Document behavior for interoperability
- Consider proposing as a NIP if useful broadly
Event Kind Selection Guide
Choose based on lifecycle needs:
-
Regular (1000-9999): When you need history
- User posts, comments, reactions
- Payment records, receipts
- Immutable records
-
Replaceable (10000-19999): When you need latest state
- User settings, preferences
- Mute/block lists
- Current status
-
Ephemeral (20000-29999): When you need real-time only
- Typing indicators
- Online presence
- Temporary notifications
-
Parameterized Replaceable (30000-39999): When you need multiple latest states
- Articles (one per slug)
- Product listings (one per product ID)
- Configuration sets (one per setting name)
References
- NIPs Repository: https://github.com/nostr-protocol/nips
- NIP-16: Event Treatment
- NIP-01: Event structure
- Various feature NIPs for specific kinds