1 Overview
A classic forum has topics. A user opens a topic with a title. Other users reply under the topic. Replies do not nest. This NIP maps that model onto Nostr with one event kind.
A thread is a kind 11 event. The thread text lives in content. The thread title lives in a title tag. Replies are not a new kind. Replies reuse the kind 1111 comment format from NIP-22.
The result is a flat discussion. Every reply points at the root thread event. Clients render the thread as one ordered list, like a forum topic page. This NIP was split out of the group-chat work in NIP-29 so that threads work on any relay.
Threads are not text notes. A kind 1 note (see NIP-10) has no title and nests freely. Use kind 11 when you want a titled topic with a flat reply list.
2 The Thread Event — Kind 11
A thread is a regular event with kind set to 11. All base rules from NIP-01 apply: the event is signed, hashed, and published like any other event. Threads SHOULD include a title tag.
{
"kind": 11,
"content": "Good morning",
"tags": [
["title", "GM"]
]
}
| Item | Value | Rule |
|---|---|---|
| kind | 11 | Marks the event as a forum thread. Regular storage class per NIP-01. |
| content | string | The body text of the thread's opening post. |
| title | ["title", <string>] | The thread title. Threads SHOULD include this tag. |
3 Replies — Kind 1111
Replies to a kind 11 thread MUST use NIP-22 kind 1111 comment events. A reply SHOULD always point to the root kind 11 event. Do not reply to a reply. This rule avoids arbitrarily nested reply hierarchies.
{
"kind": 1111,
"content": "Cool beans",
"tags": [
["K", "11"],
["E", <event-id>, <relay-url>, <pubkey>]
]
}
| Tag | Form | Rule |
|---|---|---|
| K | ["K", "11"] | The kind of the root event. Always "11" for forum threads. |
| E | ["E", <event-id>, <relay-url>, <pubkey>] | Points to the root kind 11 event: its id, a relay URL hint, and the author's pubkey. |
The reply example in the source shows only the uppercase root tags K and E. NIP-22 also defines lowercase parent tags (k, e, p). Because every reply targets the root, the parent equals the root; the source does not state whether the lowercase set is still required. Follow NIP-22 for the full comment tag rules.
E tag to the root thread. Replies never point at other replies.4 Worked Example
Alice opens a thread. Bob loads the thread and its replies, then posts one reply. Orange lines go to the relay. Blue lines come from the relay.
-- Alice opens a thread -- → ["EVENT", {"id":"a3f1c02d9e…","pubkey":"8a2f11bc…","created_at":1749800000, "kind":11,"tags":[["title","GM"]],"content":"Good morning","sig":"91bb04c2…"}] ← ["OK", "a3f1c02d9e…", true, ""] -- Bob fetches the thread and all replies to it -- → ["REQ", "topic", {"ids":["a3f1c02d9e…"]}, {"kinds":[1111], "#E":["a3f1c02d9e…"]}] ← ["EVENT", "topic", {"id":"a3f1c02d9e…", "kind":11, "content":"Good morning", …}] ← ["EOSE", "topic"] -- Bob replies to the root -- → ["EVENT", {"id":"c9d24be071…","pubkey":"5e90aa47…","created_at":1749800180, "kind":1111,"tags":[["K","11"], ["E","a3f1c02d9e…","wss://forum.example.com","8a2f11bc…"]], "content":"Cool beans","sig":"7fe210da…"}] ← ["OK", "c9d24be071…", true, ""] -- the reply streams into Bob's open subscription -- ← ["EVENT", "topic", {"id":"c9d24be071…", "kind":1111, "content":"Cool beans", …}]
#E filter on the root id fetches every reply, stored and live.5 Version History
NIP-7D began as part of the relay-based groups work and was split into its own document in late 2024. Notable changes, newest first:
- 20262026-05Editorial sanity fix by fiatjaf; no rule change.
- 20252025-04Renamed the thread title tag from
subjecttotitle(#1874). - Origin2024-11hodlbod broke chat and threads out of NIP-29;
kind 11threads became this standalone NIP (#1591).
Original Proposal - Credits
| Author | hodlbod |
| First commit | 2024-11-21 — “Break out chat and threads from nip 29” (PR #1591) |
| Status | draft - optional |
| Source | 7D.md on GitHub - full change history |
6 See Also
- NIP-01 — the base event format, kinds, and filters that threads build on.
- NIP-22 — the
kind 1111comment format that all thread replies MUST use. - NIP-29 — relay-based groups; the document this NIP was split out of.
- NIP-10 —
kind 1text notes with nested replies; the contrasting model. - NIP-C7 — chats; the sibling kind split out of NIP-29 in the same change.