clone

every nostr nip as a chapter of an illustrated, early-2000s printed game manual

main
nip.guide / site / nips / 72.html
72.html 27.8K
1<!DOCTYPE html>2<html lang="en">3<head>4<meta charset="utf-8">5<meta name="viewport" content="width=device-width, initial-scale=1">6<title>NIP-72 - Moderated Communities (Reddit Style) — Nostr Instruction Manual</title>7<meta name="description" content="NIP-72: Reddit-style moderated communities. Kind 34550 community definitions, kind 1111 posts, and kind 4550 moderator approvals. Deprecated in favor of NIP-29.">8<link rel="preload" href="../assets/fonts/michroma-400-latin.woff2" as="font" type="font/woff2" crossorigin>9<link rel="preload" href="../assets/fonts/exo2-var-latin.woff2" as="font" type="font/woff2" crossorigin>10<link rel="preload" href="../assets/fonts/sairacondensed-600-latin.woff2" as="font" type="font/woff2" crossorigin>11<link rel="preload" href="../assets/fonts/sairacondensed-700-latin.woff2" as="font" type="font/woff2" crossorigin>12<link rel="preload" href="../assets/fonts/sairacondensed-500-latin.woff2" as="font" type="font/woff2" crossorigin>13<link rel="preload" href="../assets/fonts/sharetechmono-400-latin.woff2" as="font" type="font/woff2" crossorigin>14<link rel="preload" href="../assets/fonts/exo2-400i-latin.woff2" as="font" type="font/woff2" crossorigin>15<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml">16<link rel="stylesheet" href="../assets/manual.css">17</head>18<body>1920<svg width="0" height="0" style="position:absolute">21 <defs>22 <marker id="arr" markerWidth="9" markerHeight="9" refX="7" refY="4.5" orient="auto">23 <path d="M1,1 L8,4.5 L1,8 Z" fill="#f26a00"/>24 </marker>25 <marker id="arrb" markerWidth="9" markerHeight="9" refX="7" refY="4.5" orient="auto">26 <path d="M1,1 L8,4.5 L1,8 Z" fill="#2e5f9e"/>27 </marker>28 </defs>29</svg>3031<div class="page">32 <span class="staple s1"></span><span class="staple s2"></span>3334 <header class="band">35 <a class="logo" href="../index.html">NOSTR<b>▸</b>PROTOCOL MANUAL</a>36 <span class="booklet-note">Chapter 72 - Social</span>37 </header>38 <nav class="tabs">39 <a href="../index.html">Contents</a>40 <a href="#overview" class="on">Overview</a>41 <a href="#spec">Spec</a>42 <a href="#examples">Examples</a>43 <a href="#history">History</a>44 </nav>4546 <div class="chapter">47 <div class="nipno" data-n="72">72</div>48 <div class="titles">49 <div class="kicker">Nostr Implementation Possibility - Hex № 72</div>50 <h1>Moderated Communities (Reddit Style)</h1>51 <p class="sub">Public forums built from three event kinds: a community definition, posts that tag it, and moderator approvals.</p>52 </div>53 <div class="stamp">Deprecated</div>54 </div>5556 <main class="spread">57 <div class="main">5859 <h2 class="bar" id="overview"><span class="num">1</span> Overview</h2>6061 <div class="box danger">62 <span class="tag">Deprecated</span>63 <p>The source spec marks this NIP <strong>unrecommended</strong>. Do not build new communities on it. Use <a href="29.html">NIP-29</a> (Relay-based Groups) instead. This page documents the full spec for existing implementations.</p>64 </div>6566 <p>This NIP enables public communities in the style of a Reddit forum. A community owner publishes one addressable event, <code>kind:34550</code>. That event names the community and lists its moderators.</p>67 <p>Any user can post into the community. The user tags a Nostr event with the community's <code>a</code> address. No permission is needed to post. Moderation happens after the fact: a moderator publishes an approval event, <code>kind:4550</code>, for each post they accept. Clients then show only approved posts.</p>68 <p>The model is open by design. Posts, approvals, and the community definition are all plain events on public relays. Any relay can host them. Any client can render them.</p>6970 <figure class="diagram">71 <div class="frame">72 <svg viewBox="0 0 560 200" role="img" aria-label="A member posts a kind 1111 event tagging the community, a moderator publishes a kind 4550 approval, and a reader client shows only approved posts">73 <rect class="d-actor" x="10" y="20" width="110" height="50" rx="8"/>74 <text class="d-actor-label" x="65" y="42" text-anchor="middle">Member</text>75 <text class="d-note" x="65" y="59" text-anchor="middle">posts 1111</text>76 <rect class="d-actor" x="10" y="130" width="110" height="50" rx="8"/>77 <text class="d-actor-label" x="65" y="152" text-anchor="middle">Moderator</text>78 <text class="d-note" x="65" y="169" text-anchor="middle">approves 4550</text>79 <rect class="d-actor" x="225" y="75" width="110" height="50" rx="8"/>80 <text class="d-actor-label" x="280" y="97" text-anchor="middle">Relay</text>81 <text class="d-note" x="280" y="114" text-anchor="middle">stores both</text>82 <rect class="d-actor" x="440" y="75" width="110" height="50" rx="8"/>83 <text class="d-actor-label" x="495" y="97" text-anchor="middle">Reader</text>84 <text class="d-note" x="495" y="114" text-anchor="middle">approved only</text>85 <path class="d-msg d-flow" d="M122,50 C170,58 180,72 223,84"/>86 <path class="d-msg d-flow" d="M122,150 C170,142 180,128 223,116"/>87 <path class="d-msg blue d-flow" d="M337,100 L437,100"/>88 <text class="d-label" x="163" y="52" text-anchor="middle">kind 1111</text>89 <text class="d-label" x="163" y="152" text-anchor="middle">kind 4550</text>90 <text class="d-label" x="387" y="92" text-anchor="middle">post + approval</text>91 <circle r="4" fill="#f26a00">92 <animateMotion dur="2.6s" repeatCount="indefinite" path="M122,50 C170,58 180,72 223,84"/>93 </circle>94 <circle r="4" fill="#2e5f9e">95 <animateMotion dur="2.6s" begin="1.3s" repeatCount="indefinite" path="M337,100 L437,100"/>96 </circle>97 </svg>98 </div>99 <figcaption>Fig. 72-1 — <b>Post-then-approve flow.</b> Posting is open. Moderation is a separate approval event that readers filter on.</figcaption>100 </figure>101102 <h2 class="bar" id="spec"><span class="num">2</span> Community Definition — Kind 34550</h2>103 <p>The community definition is an addressable event, <code>kind:34550</code>. It should include any field that helps define the community and the set of moderators. The community address is <code>34550:&lt;owner pubkey&gt;:&lt;d value&gt;</code>.</p>104 <p>The <code>d</code> tag may double as the community name. If a <code>name</code> tag is present, clients should display it instead of the <code>d</code> value.</p>105106 <div class="crt">107 <div class="titlebar">Wire format - kind 34550 community definition</div>108<pre>{109 <span class="k">"created_at"</span>: <span class="c">&lt;unix timestamp in seconds&gt;</span>,110 <span class="k">"kind"</span>: 34550,111 <span class="k">"tags"</span>: [112 [<span class="s">"d"</span>, <span class="c">&lt;community-d-identifier&gt;</span>],113 [<span class="s">"name"</span>, <span class="c">&lt;community name&gt;</span>],114 [<span class="s">"description"</span>, <span class="c">&lt;community description&gt;</span>],115 [<span class="s">"image"</span>, <span class="c">&lt;community image url&gt;</span>, <span class="c">&lt;width&gt;x&lt;height&gt;</span>],116 <span class="c">// ... other tags relevant to defining the community</span>117118 <span class="c">// moderators</span>119 [<span class="s">"p"</span>, <span class="c">&lt;32-byte hex pubkey&gt;</span>, <span class="c">&lt;optional relay URL&gt;</span>, <span class="s">"moderator"</span>],120121 <span class="c">// relays used by the community (with optional marker)</span>122 [<span class="s">"relay"</span>, <span class="c">&lt;relay hosting author kind 0&gt;</span>, <span class="s">"author"</span>],123 [<span class="s">"relay"</span>, <span class="c">&lt;relay for requests&gt;</span>, <span class="s">"requests"</span>],124 [<span class="s">"relay"</span>, <span class="c">&lt;relay for approvals&gt;</span>, <span class="s">"approvals"</span>],125 [<span class="s">"relay"</span>, <span class="c">&lt;relay for both requests and approvals&gt;</span>]126 ]127}</pre>128 </div>129130 <div class="tscroll"><table class="ref">131 <caption>Kind 34550 tags</caption>132 <tr><th>Tag</th><th>Value</th><th>Rule</th></tr>133 <tr><td class="btn">d</td><td>community identifier</td><td>Required for an addressable event. May double as the display name.</td></tr>134 <tr><td class="btn">name</td><td>community name</td><td>Optional. When present, clients should display it instead of the <code>d</code> value.</td></tr>135 <tr><td class="btn">description</td><td>text</td><td>Optional. Describes the community.</td></tr>136 <tr><td class="btn">image</td><td>URL + <code>&lt;width&gt;x&lt;height&gt;</code></td><td>Optional. Community image with optional dimensions.</td></tr>137 <tr><td class="btn">p</td><td>pubkey, optional relay URL, <code>moderator</code></td><td>One tag per moderator. The <code>moderator</code> marker sits in the 4th position.</td></tr>138 <tr><td class="btn">relay</td><td>relay URL, optional marker</td><td>May describe the preferred relays for downloading requests and approvals. See the marker table below.</td></tr>139 </table></div>140141 <div class="tscroll"><table class="ref">142 <caption>Relay tag markers</caption>143 <tr><th>Marker</th><th>Meaning</th></tr>144 <tr><td class="btn">author</td><td>Relay that hosts the owner's kind 0 metadata event.</td></tr>145 <tr><td class="btn">requests</td><td>Relay where clients send and receive post requests.</td></tr>146 <tr><td class="btn">approvals</td><td>Relay where clients send and receive approval events.</td></tr>147 <tr><td class="btn">(none)</td><td>Relay used to post requests to and fetch approvals from.</td></tr>148 </table></div>149150 <div class="box tech">151 <span class="tag">Tech Note</span>152 <p>The source spec calls <code>kind:34550</code> a "replaceable event". Under current <a href="01.html">NIP-01</a> terms it is an <strong>addressable</strong> event: kind 34550 sits in the 30000-39999 range and is keyed by <code>pubkey</code> + <code>kind</code> + <code>d</code> value. The text predates the rename.</p>153 </div>154155 <h2 class="bar"><span class="num">3</span> Posting to a Community</h2>156 <p>Posts should use <a href="22.html">NIP-22</a> <code>kind:1111</code> comment events. The uppercase <code>A</code> tag is always scoped to the community definition. The lowercase tags follow NIP-22 threading rules.</p>157158 <h3>Top-level posts</h3>159 <p>For a top-level post, the uppercase and lowercase tags both point to the community definition itself.</p>160 <div class="crt">161 <div class="titlebar">Wire format - kind 1111 top-level post</div>162<pre>{163 <span class="k">"kind"</span>: 1111,164 <span class="k">"tags"</span>: [165 [<span class="s">"A"</span>, <span class="s">"34550:&lt;community-author-pubkey&gt;:&lt;community-d-identifier&gt;"</span>, <span class="c">&lt;optional relay URL&gt;</span>],166 [<span class="s">"a"</span>, <span class="s">"34550:&lt;community-author-pubkey&gt;:&lt;community-d-identifier&gt;"</span>, <span class="c">&lt;optional relay URL&gt;</span>],167 [<span class="s">"P"</span>, <span class="c">&lt;community-author-pubkey&gt;</span>, <span class="c">&lt;optional relay URL&gt;</span>],168 [<span class="s">"p"</span>, <span class="c">&lt;community-author-pubkey&gt;</span>, <span class="c">&lt;optional relay URL&gt;</span>],169 [<span class="s">"K"</span>, <span class="s">"34550"</span>],170 [<span class="s">"k"</span>, <span class="s">"34550"</span>]171 ],172 <span class="k">"content"</span>: <span class="s">"Hi everyone. It's great to be here!"</span>173}</pre>174 </div>175176 <h3>Nested replies</h3>177 <p>For a nested reply, the uppercase tags still point to the community definition. The lowercase tags point to the parent post or reply.</p>178 <div class="crt">179 <div class="titlebar">Wire format - kind 1111 nested reply</div>180<pre>{181 <span class="k">"kind"</span>: 1111,182 <span class="k">"tags"</span>: [183 <span class="c">// community definition itself</span>184 [<span class="s">"A"</span>, <span class="s">"34550:&lt;community-author-pubkey&gt;:&lt;community-d-identifier&gt;"</span>, <span class="c">&lt;optional relay URL&gt;</span>],185 [<span class="s">"P"</span>, <span class="c">&lt;community-author-pubkey&gt;</span>, <span class="c">&lt;optional relay URL&gt;</span>],186 [<span class="s">"K"</span>, <span class="s">"34550"</span>],187188 <span class="c">// parent post or reply</span>189 [<span class="s">"e"</span>, <span class="c">&lt;parent-event-id&gt;</span>, <span class="c">&lt;optional relay URL&gt;</span>],190 [<span class="s">"p"</span>, <span class="c">&lt;parent-event-author-pubkey&gt;</span>, <span class="c">&lt;optional relay URL&gt;</span>],191 [<span class="s">"k"</span>, <span class="c">&lt;parent-event-kind&gt;</span>] <span class="c">// most likely "1111"</span>192 ],193 <span class="k">"content"</span>: <span class="s">"Agreed! Welcome everyone!"</span>194}</pre>195 </div>196197 <figure class="diagram">198 <div class="frame">199 <svg viewBox="0 0 560 210" role="img" aria-label="Top-level posts point both A and a tags at the community definition; nested replies point uppercase tags at the community and lowercase tags at the parent post">200 <rect class="d-actor" x="215" y="15" width="150" height="50" rx="8"/>201 <text class="d-actor-label" x="290" y="37" text-anchor="middle">Community</text>202 <text class="d-note" x="290" y="54" text-anchor="middle">kind 34550</text>203 <rect class="d-actor" x="40" y="140" width="140" height="50" rx="8"/>204 <text class="d-actor-label" x="110" y="162" text-anchor="middle">Top post</text>205 <text class="d-note" x="110" y="179" text-anchor="middle">kind 1111</text>206 <rect class="d-actor" x="390" y="140" width="140" height="50" rx="8"/>207 <text class="d-actor-label" x="460" y="162" text-anchor="middle">Reply</text>208 <text class="d-note" x="460" y="179" text-anchor="middle">kind 1111</text>209 <path class="d-msg" d="M130,138 C170,100 200,80 236,68"/>210 <text class="d-label" x="130" y="90" text-anchor="middle">A + a</text>211 <path class="d-msg blue" d="M440,138 C400,100 370,80 344,68"/>212 <text class="d-label" x="432" y="90" text-anchor="middle">A / P / K</text>213 <path class="d-msg d-flow" d="M388,165 L184,165"/>214 <text class="d-label" x="286" y="157" text-anchor="middle">e / p / k → parent</text>215 </svg>216 </div>217 <figcaption>Fig. 72-2 — <b>Tag anatomy.</b> Uppercase tags always anchor the community. Lowercase tags anchor the parent in a reply.</figcaption>218 </figure>219220 <h3>Backwards compatibility</h3>221 <div class="box warn">222 <span class="tag">Warning!</span>223 <p>Older clients posted <code>kind:1</code> events with an <code>a</code> tag pointing to the community. Clients may still query for those kind 1 events. Clients should not create new posts with kind 1. Use kind 1111 with the <code>A</code> and <code>a</code> tags shown above.</p>224 </div>225226 <h2 class="bar"><span class="num">4</span> Moderation — Kind 4550</h2>227 <p>Anyone may publish an approval event. An approval states an opinion that a post fits the community. Clients may choose which approvals to honor. Clients should at least honor approvals from the moderators listed in the community definition.</p>228 <p>An approval event is a regular event, <code>kind:4550</code>. It must include:</p>229 <ul>230 <li>One or more community <code>a</code> tags. A community <code>a</code> tag always begins with <code>34550</code>. This prefix disambiguates community pointers from other addressable-event pointers.</li>231 <li>An <code>e</code> or <code>a</code> tag that points to the approved post.</li>232 <li>The <code>p</code> tag of the post author, for approval notifications.</li>233 </ul>234 <p>The approval should also carry the JSON-stringified post event inside <code>content</code>. It should carry a <code>k</code> tag with the post's kind. The <code>k</code> tag lets clients filter approved posts by kind.</p>235236 <div class="crt">237 <div class="titlebar">Wire format - kind 4550 post approval</div>238<pre>{239 <span class="k">"pubkey"</span>: <span class="c">&lt;32-byte lowercase hex pubkey of the moderator&gt;</span>,240 <span class="k">"kind"</span>: 4550,241 <span class="k">"tags"</span>: [242 [<span class="s">"a"</span>, <span class="s">"34550:&lt;community-author-pubkey&gt;:&lt;community-d-identifier&gt;"</span>, <span class="c">&lt;optional relay URL&gt;</span>],243 [<span class="s">"e"</span>, <span class="c">&lt;post-id&gt;</span>, <span class="c">&lt;optional relay URL&gt;</span>],244 [<span class="s">"p"</span>, <span class="c">&lt;post-author-pubkey&gt;</span>, <span class="c">&lt;optional relay URL&gt;</span>],245 [<span class="s">"k"</span>, <span class="c">&lt;post-request-kind&gt;</span>]246 ],247 <span class="k">"content"</span>: <span class="c">&lt;the full approved event, JSON-encoded&gt;</span>248}</pre>249 </div>250251 <p>A moderator may revoke an approval at any time. To revoke, publish a <a href="09.html">NIP-09</a> deletion request for the approval event.</p>252253 <div class="box hint">254 <span class="tag">Hint!</span>255 <p>Have several moderators approve each post. If one moderator leaves the owner's list, their approvals stop counting, and singly-approved posts vanish from the community. If the whole moderator set rotates, the new moderators must re-sign approvals for past posts, or the community restarts. The owner can also periodically copy and re-sign each moderator's approvals so posts do not disappear.</p>256 </div>257258 <h3>Approving replaceable events</h3>259 <p>A replaceable post can be approved in three ways:</p>260 <div class="tscroll"><table class="ref">261 <caption>Approval pointer options for replaceable posts</caption>262 <tr><th>Pointer</th><th>Effect</th></tr>263 <tr><td class="btn">e</td><td>Approves one specific version. Moderators approve each change separately.</td></tr>264 <tr><td class="btn">a</td><td>Approves the address. The author may publish new versions without further approvals.</td></tr>265 <tr><td class="btn">e + a</td><td>Both tags together. Clients can display the original and the updated version, with suitable remarks in the UI.</td></tr>266 </table></div>267 <p>Relays delete old versions of a replaceable event. So an approval that uses an <code>e</code> tag must embed that specific version in its <code>content</code>. Otherwise clients may not find that version anywhere.</p>268 <p>One approval can serve many communities. Clients should treat every non-<code>34550:*</code> <code>a</code> tag as a post approved for all of the event's <code>34550:*</code> community tags.</p>269270 <div class="box tech">271 <span class="tag">Tech Note</span>272 <p>Two glitches in the source's approval example. First: the <code>p</code> tag placeholder reads <code>&lt;port-author-pubkey&gt;</code>; the prose makes clear it means the <em>post</em> author's pubkey. Second: its community <code>a</code> tag reads <code>34550:&lt;event-author-pubkey&gt;:…</code>, while every other example uses the community author's pubkey there; the community author is the correct value.</p>273 </div>274275 <h2 class="bar"><span class="num">5</span> Cross-Posting</h2>276 <p>Clients may support cross-posting between communities. To cross-post, publish a <a href="18.html">NIP-18</a> repost: <code>kind:6</code> for kind 1 notes, <code>kind:16</code> for other kinds. Tag the repost with one or more community <code>a</code> tags, as described above. The <code>content</code> of the repost must be the original event, not the approval event.</p>277278 <h2 class="bar" id="examples"><span class="num">6</span> Worked Example</h2>279 <p>Alice owns the community <code>gardening</code>. Bob posts a top-level note. Mod Carol approves it. A reader client fetches approvals to build the moderated feed.</p>280281 <div class="crt">282 <div class="titlebar">Event 1 - Alice defines the community</div>283<pre>{284 <span class="k">"kind"</span>: 34550, <span class="k">"pubkey"</span>: <span class="s">"a11ce9f2…"</span>, <span class="k">"created_at"</span>: 1750000000,285 <span class="k">"tags"</span>: [286 [<span class="s">"d"</span>, <span class="s">"gardening"</span>],287 [<span class="s">"name"</span>, <span class="s">"Gardening"</span>],288 [<span class="s">"description"</span>, <span class="s">"Grow things. Show things."</span>],289 [<span class="s">"image"</span>, <span class="s">"https://img.example.com/gardening.png"</span>, <span class="s">"600x600"</span>],290 [<span class="s">"p"</span>, <span class="s">"ca401f3e…"</span>, <span class="s">"wss://relay.example.com"</span>, <span class="s">"moderator"</span>],291 [<span class="s">"relay"</span>, <span class="s">"wss://relay.example.com"</span>, <span class="s">"requests"</span>],292 [<span class="s">"relay"</span>, <span class="s">"wss://mods.example.com"</span>, <span class="s">"approvals"</span>]293 ],294 <span class="k">"content"</span>: <span class="s">""</span>, <span class="c">…</span>295}</pre>296 </div>297298 <div class="crt">299 <div class="titlebar">Event 2 - Bob posts (kind 1111)</div>300<pre>{301 <span class="k">"id"</span>: <span class="s">"b0b7e4a1…"</span>, <span class="k">"kind"</span>: 1111, <span class="k">"pubkey"</span>: <span class="s">"b0b12c88…"</span>,302 <span class="k">"tags"</span>: [303 [<span class="s">"A"</span>, <span class="s">"34550:a11ce9f2…:gardening"</span>, <span class="s">"wss://relay.example.com"</span>],304 [<span class="s">"a"</span>, <span class="s">"34550:a11ce9f2…:gardening"</span>, <span class="s">"wss://relay.example.com"</span>],305 [<span class="s">"P"</span>, <span class="s">"a11ce9f2…"</span>], [<span class="s">"p"</span>, <span class="s">"a11ce9f2…"</span>],306 [<span class="s">"K"</span>, <span class="s">"34550"</span>], [<span class="s">"k"</span>, <span class="s">"34550"</span>]307 ],308 <span class="k">"content"</span>: <span class="s">"My tomatoes finally turned red."</span>, <span class="c">…</span>309}</pre>310 </div>311312 <div class="crt">313 <div class="titlebar">Event 3 - Carol approves (kind 4550) + reader session</div>314<pre>{315 <span class="k">"kind"</span>: 4550, <span class="k">"pubkey"</span>: <span class="s">"ca401f3e…"</span>,316 <span class="k">"tags"</span>: [317 [<span class="s">"a"</span>, <span class="s">"34550:a11ce9f2…:gardening"</span>, <span class="s">"wss://relay.example.com"</span>],318 [<span class="s">"e"</span>, <span class="s">"b0b7e4a1…"</span>, <span class="s">"wss://relay.example.com"</span>],319 [<span class="s">"p"</span>, <span class="s">"b0b12c88…"</span>],320 [<span class="s">"k"</span>, <span class="s">"1111"</span>]321 ],322 <span class="k">"content"</span>: <span class="s">"{\"id\":\"b0b7e4a1…\",\"kind\":1111,…}"</span>, <span class="c">…</span>323}324325<span class="c">-- reader builds the moderated feed --</span>326<span class="send">→ ["REQ", "mod-feed", {"kinds":[4550], "authors":["ca401f3e…"],327 "#a":["34550:a11ce9f2…:gardening"]}]</span>328<span class="recv">← ["EVENT", "mod-feed", {"kind":4550, "id":"ca901bb2…", …}]</span>329<span class="recv">← ["EOSE", "mod-feed"]</span>330<span class="c">-- client renders the post embedded in each approval's content --</span></pre>331 </div>332333 <h2 class="bar" id="history"><span class="num">7</span> Version History</h2>334 <p>The spec began life as NIP-172 in mid-2023 and got the number 72 two months later. Notable changes, newest first:</p>335 <ul class="patchnotes">336 <li><span class="ver">2026</span><span class="when">2026-05</span>Marked <code>unrecommended</code>. The body now points implementers to <a href="29.html">NIP-29</a>.</li>337 <li><span class="ver">2025</span><span class="when">2025-07</span>Community posts switched from <code>kind:1</code> to <a href="22.html">NIP-22</a> <code>kind:1111</code> with <code>A</code>/<code>a</code> scoping. Kind 1 kept for backwards compatibility only.</li>338 <li><span class="ver">2024</span><span class="when">2024-01</span>Added a title, the cross-posting section, and clearer moderation options (Jon Staab).</li>339 <li><span class="ver">2023</span><span class="when">2023-08</span>Renumbered: file moved from <code>172.md</code> to <code>72.md</code>.</li>340 <li><span class="ver">2023</span><span class="when">2023-07</span>Added the third option for approving replaceable events (<code>e</code> + <code>a</code> together).</li>341 <li><span class="ver">2023</span><span class="when">2023-06</span>Big rewrite: relay markers, replaceable posts allowed, approval moved to a regular event, revocation via <a href="09.html">NIP-09</a>, RFC verbs (SHOULD/MAY).</li>342 <li class="minor"><span class="ver">2023+</span><span class="when">2023-2026</span>Typo, formatting, and heading-level fixes grouped.</li>343 <li><span class="ver">Origin</span><span class="when">2023-06-12</span>Vitor Pamplona published the first draft as NIP-172: "Simple moderated communities flow".</li>344 </ul>345346 <div class="credits">347 <h3 class="cardhead">Original Proposal - Credits</h3>348 <table>349 <tr><td>Author</td><td>Vitor Pamplona (with arthurfranca)</td></tr>350 <tr><td>First commit</td><td>2023-06-12 — “Simple moderated communities flow” (as <code>172.md</code>)</td></tr>351 <tr><td>Status</td><td>draft - unrecommended - optional — deprecated in favor of <a href="29.html">NIP-29</a></td></tr>352 <tr><td>Source</td><td><a href="https://github.com/nostr-protocol/nips/blob/master/72.md">72.md on GitHub</a> - <a href="https://github.com/nostr-protocol/nips/commits/master/72.md">full change history</a></td></tr>353 </table>354 </div>355356 <h2 class="bar"><span class="num">8</span> See Also</h2>357 <ul>358 <li><a href="29.html">NIP-29</a> — Relay-based Groups; the recommended replacement for this NIP.</li>359 <li><a href="01.html">NIP-01</a> — events, tags, and the addressable-event storage class that kind 34550 uses.</li>360 <li><a href="22.html">NIP-22</a> — kind 1111 comments; the post format for communities.</li>361 <li><a href="09.html">NIP-09</a> — deletion requests; how a moderator revokes an approval.</li>362 <li><a href="18.html">NIP-18</a> — kind 6 and kind 16 reposts; the cross-posting vehicle.</li>363 </ul>364 </div>365366 <aside>367 <div class="cartridge">368 <div class="inner">369 <h3 class="cardhead">Spec Card</h3>370 <div class="lights"><span class="led err"></span><span class="led err"></span><span class="led err"></span></div>371 <dl>372 <dt>Status</dt><dd><span class="chip draft">draft</span><span class="chip unrecommended">unrecommended</span><span class="chip">optional</span></dd>373 <dt>Replaced by</dt><dd><a href="29.html">NIP-29</a> relay-based groups</dd>374 <dt>Defines</dt><dd>kind 34550 (community) - kind 4550 (approval) - relay tag markers</dd>375 <dt>Kinds</dt><dd>34550 - 4550 - uses 1111, 6, 16 (1 legacy)</dd>376 <dt>Requires</dt><dd><a href="01.html">NIP-01</a> - <a href="22.html">NIP-22</a> - <a href="09.html">NIP-09</a> - <a href="18.html">NIP-18</a></dd>377 <dt>First commit</dt><dd>2023-06-12 (as 172.md)</dd>378 <dt>Last updated</dt><dd>2026-06-13</dd>379 </dl>380 </div>381 </div>382 </aside>383 </main>384385 <nav class="navbtns">386 <a href="71.html">◀ NIP-71: Video Events</a>387 <a href="73.html">NIP-73: External Content IDs ▶</a>388 </nav>389390 <footer class="pagefoot">391 <a href="../index.html">Nostr Protocol Manual</a>392 <span class="pageno">NIP 72 / F4</span>393 </footer>394</div>395396<script src="../assets/webmcp.js" defer></script>397</body>398</html>