# 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: `p` tags 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: `e` tags for events to delete - Only works for own events #### Sharing - **6**: `Repost` - Share another event - Tags: `e` for reposted event, `p` for original author - May include original event in content #### Reactions - **7**: `Reaction` - Like, emoji reaction to event - Content: "+" or emoji - Tags: `e` for reacted event, `p` for 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: `r` with 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 lists - `d` tag: list identifier - `p` tags: people in list - **30001**: `Categorized Bookmark List` - Bookmark collections - `d` tag: list identifier - `e` or `a` tags: bookmarked items - **30008**: `Badge Definition` (NIP-58) - Define a badge/achievement - `d` tag: badge ID - Tags: name, description, image - **30009**: `Profile Badges` (NIP-58) - Badges displayed on profile - `d` tag: badge ID - `e` or `a` tags: badge awards #### Long-form Content (30023) - **30023**: `Long-form Article` (NIP-23) - Blog post, article - `d` tag: article identifier (slug) - Tags: title, summary, published_at, image - Content: Markdown #### Application Data (30078) - **30078**: `Application-specific Data` (NIP-78) - `d` tag: 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: `a` for badge definition, `p` for recipient ### 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) ```json { "kind": 0, "content": "{\"name\":\"Alice\",\"about\":\"Nostr user\",\"picture\":\"https://...\",\"nip05\":\"alice@example.com\"}", "tags": [] } ``` ### Text Note (Kind 1) ```json { "kind": 1, "content": "Hello Nostr!", "tags": [ ["t", "nostr"], ["t", "hello"] ] } ``` ### Reply (Kind 1 with thread tags) ```json { "kind": 1, "content": "Great post!", "tags": [ ["e", "", "", "root"], ["e", "", "", "reply"], ["p", ""] ] } ``` ### Reaction (Kind 7) ```json { "kind": 7, "content": "+", "tags": [ ["e", ""], ["p", ""], ["k", "1"] ] } ``` ### Long-form Article (Kind 30023) ```json { "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) ```json { "kind": 10002, "content": "", "tags": [ ["r", "wss://relay1.com"], ["r", "wss://relay2.com", "write"], ["r", "wss://relay3.com", "read"] ] } ``` ### Zap Request (Kind 9734) ```json { "kind": 9734, "content": "", "tags": [ ["relays", "wss://relay1.com", "wss://relay2.com"], ["amount", "21000"], ["lnurl", "lnurl..."], ["p", ""], ["e", ""] ] } ``` ### File Metadata (Kind 1063) ```json { "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) ```json { "kind": 1984, "content": "This is spam", "tags": [ ["e", "", ""], ["p", ""], ["report", "spam"] ] } ``` ## Future Event Kinds The event kind space is open-ended. New NIPs may define new event kinds. **Guidelines for new event kinds**: 1. Use appropriate range for desired behavior 2. Document in a NIP 3. Implement in at least 2 clients and 1 relay 4. Ensure backwards compatibility 5. 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