12<html lang="en">3<head>4<meta charset="utf-8">5<meta name="viewport" content="width=device-width, initial-scale=1">6<title>NIP-54 - Wiki — Nostr Instruction Manual</title>7<meta name="description" content="NIP-54: decentralized wiki articles on Nostr. Kind 30818 articles, d-tag normalization, Djot wikilinks, merge requests, redirects, forks, and deference. Complete manual page.">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 54 - Knowledge</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="54">54</div>48 <div class="titles">49 <div class="kicker">Nostr Implementation Possibility - Hex № 54</div>50 <h1>Wiki</h1>51 <p class="sub">A decentralized encyclopedia: anyone can write an article about any subject, and readers pick the version they trust.</p>52 </div>53 </div>5455 <main class="spread">56 <div class="main">5758 <h2 class="bar" id="overview"><span class="num">1</span> Overview</h2>59 <p>A classic wiki has one page per subject and one server that decides what the page says. This NIP removes both limits. It defines <code>kind:30818</code>, an addressable event (see <a href="01.html">NIP-01</a>) that holds one encyclopedia article. Many authors write articles about the same subject. Each author keeps an independent version. Variations can be small or complete rewrites.</p>60 <p>A subject is identified by its <code>d</code> tag. The <code>d</code> tag value is a lowercase, normalized form of the article name. Because every author normalizes the same way, articles about the same subject share the same <code>d</code> tag across all pubkeys.</p>61 <p>The NIP also defines two support kinds. <code>kind:818</code> is a merge request: it asks an author to accept changes from a fork. <code>kind:30819</code> is a redirect: it points one article name at another. On top of these, <code>fork</code> and <code>defer</code> tag markers record where an article came from and which version its author now endorses.</p>6263 <div class="box hint">64 <span class="tag">Hint!</span>65 <p>There is no "the" article for a subject. There is one article per subject <em>per author</em>. The client decides which author's version to show. Section 8 lists ranking strategies.</p>66 </div>6768 <h2 class="bar" id="spec"><span class="num">2</span> Articles: Kind 30818</h2>69 <p>An article is a <code>kind:30818</code> addressable event. The relay keeps only the latest event per <code>pubkey</code> + <code>kind</code> + <code>d</code> value, so an author edits an article by publishing it again. The <code>content</code> holds the article body. The <code>d</code> tag holds the normalized article name.</p>7071 <div class="crt">72 <div class="titlebar">Wire format - wiki article (kind 30818)</div>73<pre>{74 <span class="k">"kind"</span>: 30818,75 <span class="k">"content"</span>: <span class="s">"A wiki is a hypertext publication collaboratively edited and managed by its own audience."</span>,76 <span class="k">"tags"</span>: [77 [<span class="s">"d"</span>, <span class="s">"wiki"</span>],78 [<span class="s">"title"</span>, <span class="s">"Wiki"</span>]79 ]80}</pre>81 </div>8283 <p>Four optional tags refine the article:</p>84 <div class="tscroll"><table class="ref">85 <caption>Optional article tags</caption>86 <tr><th>Tag</th><th>Purpose</th></tr>87 <tr><td class="btn">title</td><td>Display title, for when it should differ from the <code>d</code> tag value.</td></tr>88 <tr><td class="btn">summary</td><td>Short description for display in article lists.</td></tr>89 <tr><td class="btn">a</td><td>Reference to the original addressable article this one was forked from.</td></tr>90 <tr><td class="btn">e</td><td>Reference to the exact original event version this one was forked from.</td></tr>91 </table></div>9293 <h2 class="bar" id="normalization"><span class="num">3</span> D-Tag Normalization</h2>94 <p>Every client must derive the <code>d</code> tag from the article name with the same rules. Apply them in order:</p>95 <div class="tscroll"><table class="ref">96 <caption>Normalization rules</caption>97 <tr><th>Rule</th><th>Level</th></tr>98 <tr><td>Convert every letter that has case variants to lowercase.</td><td><span class="kbd">MUST</span></td></tr>99 <tr><td>Convert whitespace to <code>-</code>.</td><td><span class="kbd">MUST</span></td></tr>100 <tr><td>Remove punctuation and symbols.</td><td><span class="kbd">SHOULD</span></td></tr>101 <tr><td>Collapse multiple consecutive <code>-</code> into a single <code>-</code>.</td><td><span class="kbd">SHOULD</span></td></tr>102 <tr><td>Remove leading and trailing <code>-</code>.</td><td><span class="kbd">SHOULD</span></td></tr>103 <tr><td>Preserve non-ASCII letters (Japanese, Chinese, Arabic, Cyrillic, ...) as UTF-8.</td><td><span class="kbd">MUST</span></td></tr>104 <tr><td>Preserve numbers.</td><td><span class="kbd">MUST</span></td></tr>105 </table></div>106107 <figure class="diagram">108 <div class="frame">109 <svg viewBox="0 0 560 120" role="img" aria-label="Article name flows through lowercase, whitespace to dash, strip punctuation, and collapse and trim steps to produce the d tag value">110 <rect class="d-actor" x="10" y="35" width="100" height="50" rx="8"/>111 <text class="d-actor-label" x="60" y="57" text-anchor="middle">Name</text>112 <text class="d-note" x="60" y="74" text-anchor="middle">"What's Up?"</text>113 <rect class="d-actor" x="150" y="35" width="100" height="50" rx="8"/>114 <text class="d-actor-label" x="200" y="57" text-anchor="middle">Lowercase</text>115 <text class="d-note" x="200" y="74" text-anchor="middle">MUST</text>116 <rect class="d-actor" x="290" y="35" width="100" height="50" rx="8"/>117 <text class="d-actor-label" x="340" y="57" text-anchor="middle">Space → -</text>118 <text class="d-note" x="340" y="74" text-anchor="middle">MUST</text>119 <rect class="d-actor" x="430" y="35" width="120" height="50" rx="8"/>120 <text class="d-actor-label" x="490" y="57" text-anchor="middle">Strip + trim</text>121 <text class="d-note" x="490" y="74" text-anchor="middle">→ "whats-up"</text>122 <path class="d-msg d-flow" d="M112,60 L147,60"/>123 <path class="d-msg d-flow" d="M252,60 L287,60"/>124 <path class="d-msg d-flow" d="M392,60 L427,60"/>125 </svg>126 </div>127 <figcaption>Fig. 54-1 — <b>Normalization pipeline.</b> The article name becomes the <code>d</code> tag. Non-ASCII letters and numbers pass through unchanged.</figcaption>128 </figure>129130 <div class="tscroll"><table class="ref">131 <caption>Normalization examples</caption>132 <tr><th>Input</th><th>d tag value</th><th>Note</th></tr>133 <tr><td><code>"Wiki Article"</code></td><td><code>"wiki-article"</code></td><td>lowercase, space to dash</td></tr>134 <tr><td><code>"What's Up?"</code></td><td><code>"whats-up"</code></td><td>punctuation removed</td></tr>135 <tr><td><code>" Hello World "</code></td><td><code>"hello-world"</code></td><td>dashes collapsed and trimmed</td></tr>136 <tr><td><code>"Article 1"</code></td><td><code>"article-1"</code></td><td>numbers preserved</td></tr>137 <tr><td><code>"ウィキペディア"</code></td><td><code>"ウィキペディア"</code></td><td>Japanese, no case change</td></tr>138 <tr><td><code>"Ñoño"</code></td><td><code>"ñoño"</code></td><td>Spanish, lowercased</td></tr>139 <tr><td><code>"Москва"</code></td><td><code>"москва"</code></td><td>Russian, lowercased</td></tr>140 <tr><td><code>"日本語 Article"</code></td><td><code>"日本語-article"</code></td><td>mixed scripts</td></tr>141 </table></div>142143 <div class="box tech">144 <span class="tag">Tech Note</span>145 <p>Three of the seven rules are only SHOULD: strip punctuation, collapse dashes, trim dashes. Two conforming clients can therefore compute different <code>d</code> tags for the same name, such as <code>"whats-up"</code> versus <code>"what's-up?"</code>. The spec does not say how to resolve such splits.</p>146 </div>147148 <h2 class="bar" id="content"><span class="num">4</span> Content Format: Djot</h2>149 <p>The <code>content</code> should be <a href="https://djot.net/">Djot</a> markup, with two extra behaviors on top of standard Djot:</p>150 <ol>151 <li>A link target may be a <a href="21.html">NIP-21</a> URI, like <code>[Bob](nostr:npub1...)</code>.</li>152 <li>A reference-style link with no matching reference becomes a <strong>wikilink</strong>. It links to the wiki article with that name. Normalize the target with the rules from section 3.</li>153 </ol>154155 <div class="crt">156 <div class="titlebar">Example - Djot article body</div>157<pre>Bitcoin is a [cryptocurrency][] invented by [Satoshi Nakamoto][].158159See also: [proof of work][] and [lightning network][Lightning Network].160161<span class="k">[Satoshi Nakamoto]</span>: <span class="s">nostr:npub1satoshi...</span></pre>162 </div>163164 <div class="tscroll"><table class="ref">165 <caption>How the links above resolve</caption>166 <tr><th>Link</th><th>Resolves to</th></tr>167 <tr><td><code>[cryptocurrency][]</code></td><td>Article with <code>d</code> tag <code>"cryptocurrency"</code>. No reference defined, so it is a wikilink.</td></tr>168 <tr><td><code>[Satoshi Nakamoto][]</code></td><td>The npub. A reference is defined at the bottom.</td></tr>169 <tr><td><code>[proof of work][]</code></td><td>Article with <code>d</code> tag <code>"proof-of-work"</code>.</td></tr>170 <tr><td><code>[lightning network][Lightning Network]</code></td><td>Article <code>"lightning-network"</code>; displays as "lightning network".</td></tr>171 </table></div>172173 <p>Wikilinks also work with non-Latin scripts, with the same normalization rules:</p>174 <ul>175 <li><code>[ビットコイン][]</code> links to the article with <code>d</code> tag <code>"ビットコイン"</code>.</li>176 <li><code>[Japanese Article][日本語 記事]</code> links to <code>"日本語-記事"</code>; displays as "Japanese Article".</li>177 <li><code>[Биткойн][]</code> links to the article with <code>d</code> tag <code>"биткойн"</code> (Cyrillic, lowercased).</li>178 </ul>179180 <p><a href="21.html">NIP-21</a> <code>nostr:</code> links can also point to profiles or arbitrary events. Do not link to a specific version of an article. Prefer the wikilink syntax. The reader and their client decide which version of an article to read.</p>181182 <p><strong>Why Djot?</strong> Djot is a markup language by John MacFarlane, the author of Pandoc and a co-author of CommonMark. The NIP picked it for five reasons:</p>183 <ul>184 <li><strong>Well-defined spec.</strong> Markdown has many incompatible dialects. The Asciidoc spec is tied to a Ruby implementation. Djot has one clear, standalone specification.</li>185 <li><strong>Native implementations</strong> in JavaScript, Lua, Rust, Go, and other languages, without transpilation.</li>186 <li><strong>Rich features:</strong> superscript, subscript, footnotes, tables, definition lists, and math. All useful for encyclopedic content.</li>187 <li><strong>Familiar syntax</strong>, similar to basic Markdown. Easy to learn.</li>188 <li><strong>Fast parsing</strong>, designed for linear-time parsers.</li>189 </ul>190191 <h2 class="bar" id="merge"><span class="num">5</span> Merge Requests: Kind 818</h2>192 <p>An editor who improved a fork can ask the original author to adopt the changes. A <code>kind:818</code> event is that request. It is directed to a pubkey. It references the target article and the modified event.</p>193194 <div class="crt">195 <div class="titlebar">Wire format - merge request (kind 818)</div>196<pre>{197 <span class="k">"kind"</span>: 818,198 <span class="k">"content"</span>: <span class="s">"I added information about the block size limit"</span>,199 <span class="k">"tags"</span>: [200 [<span class="s">"a"</span>, <span class="s">"30818:<span class="c"><destination-pubkey></span>:bitcoin"</span>, <span class="s">"<span class="c"><relay-url></span>"</span>],201 [<span class="s">"e"</span>, <span class="s">"<span class="c"><version-against-which-the-modification-was-made></span>"</span>, <span class="s">"<span class="c"><relay-url></span>"</span>],202 [<span class="s">"p"</span>, <span class="s">"<span class="c"><destination-pubkey></span>"</span>],203 [<span class="s">"e"</span>, <span class="s">"<span class="c"><version-to-be-merged></span>"</span>, <span class="s">"<span class="c"><relay-url></span>"</span>, <span class="s">"source"</span>]204 ]205}</pre>206 </div>207208 <div class="tscroll"><table class="ref">209 <caption>Merge request fields</caption>210 <tr><th>Field</th><th>Rule</th></tr>211 <tr><td class="btn">content</td><td>Optional explanation of why this merge is requested.</td></tr>212 <tr><td class="btn">a</td><td>The article that should be modified: the target of the merge request.</td></tr>213 <tr><td class="btn">e</td><td>Optional: the version of the article this modification is based on.</td></tr>214 <tr><td class="btn">e + source</td><td>The <code>e</code> tag with the <code>source</code> marker holds the ID of the event to be merged. That event MUST be a <code>kind:30818</code> as defined in this NIP.</td></tr>215 <tr><td class="btn">p</td><td>The destination pubkey: the author who is asked to merge.</td></tr>216 </table></div>217218 <p>The destination pubkey answers with a <a href="25.html">NIP-25</a> reaction that tags the <code>kind:818</code> event. A <code>+</code> reaction accepts the merge request. A <code>-</code> reaction rejects it.</p>219220 <figure class="diagram">221 <div class="frame">222 <svg viewBox="0 0 560 300" role="img" aria-label="Sequence diagram: Bob forks Alice's article, publishes his fork, sends a kind 818 merge request, and Alice accepts with a plus reaction">223 <line class="d-wire" x1="110" y1="40" x2="110" y2="285" stroke-dasharray="3 4"/>224 <line class="d-wire" x1="450" y1="40" x2="450" y2="285" stroke-dasharray="3 4"/>225 <rect class="d-actor" x="55" y="8" width="110" height="30" rx="6"/>226 <text class="d-actor-label" x="110" y="28" text-anchor="middle">Bob (editor)</text>227 <rect class="d-actor" x="395" y="8" width="110" height="30" rx="6"/>228 <text class="d-actor-label" x="450" y="28" text-anchor="middle">Alice (author)</text>229 <text class="d-note" x="280" y="58" text-anchor="middle">Alice has published 30818 "bitcoin". Bob forks it.</text>230 <path class="d-msg" d="M110,92 L445,92"/>231 <text class="d-label" x="280" y="85" text-anchor="middle">30818 "bitcoin" with a+e "fork" tags</text>232 <path class="d-msg" d="M110,135 L445,135"/>233 <text class="d-label" x="280" y="128" text-anchor="middle">818 merge request: a target, e "source", p Alice</text>234 <path class="d-msg blue d-flow" d="M450,180 L115,180"/>235 <text class="d-label" x="280" y="173" text-anchor="middle">kind 7 reaction "+" on the 818 event</text>236 <path class="d-msg" d="M110,225 L445,225"/>237 <text class="d-label" x="280" y="218" text-anchor="middle">optional: Bob re-publishes his 30818 with "defer" tags</text>238 <text class="d-note" x="280" y="260" text-anchor="middle">Alice edits her article; Bob's WoT weight now backs her version.</text>239 <circle r="4" fill="#f26a00">240 <animateMotion dur="2.6s" repeatCount="indefinite" path="M110,135 L445,135"/>241 </circle>242 </svg>243 </div>244 <figcaption>Fig. 54-2 — <b>Fork, merge request, deference.</b> Events flow through relays; the arrows show the logical direction.</figcaption>245 </figure>246247 <h2 class="bar" id="redirects"><span class="num">6</span> Redirects: Kind 30819</h2>248 <p>A redirect maps one article name to another. If "BTC" should lead to "Bitcoin", publish a <code>kind:30819</code> event instead of copying the content. The <code>d</code> tag holds the source name. The <code>a</code> tag points at the target article.</p>249250 <div class="crt">251 <div class="titlebar">Wire format - wiki redirect (kind 30819)</div>252<pre>{253 <span class="k">"kind"</span>: 30819,254 <span class="k">"tags"</span>: [255 [<span class="s">"d"</span>, <span class="s">"btc"</span>],256 [<span class="s">"a"</span>, <span class="s">"30818:<span class="c"><pubkey></span>:bitcoin"</span>, <span class="s">"<span class="c"><relay-url></span>"</span>]257 ],258 <span class="k">"content"</span>: <span class="s">""</span>259}</pre>260 </div>261262 <p>Clients use redirects in two ways. They can redirect automatically from one article to another. They can also collect many redirects for one name and generate a crowdsourced "disambiguation" page, like the ones on Wikipedia.</p>263264 <h2 class="bar" id="markers"><span class="num">7</span> Forks and Deference</h2>265 <p>Two tag markers let wiki events point at other wiki events:</p>266 <div class="tscroll"><table class="ref">267 <caption>Tag markers on wiki events</caption>268 <tr><th>Marker</th><th>Meaning</th></tr>269 <tr><td class="btn">fork</td><td>This event came from a different version. Both an <code>a</code> tag and an <code>e</code> tag SHOULD be used, each with the <code>fork</code> marker, to identify the exact version it was forked from.</td></tr>270 <tr><td class="btn">defer</td><td>The author considers someone else's entry a better version of their own. Both an <code>a</code> tag and an <code>e</code> tag SHOULD be used with the <code>defer</code> marker.</td></tr>271 </table></div>272 <p>A <code>defer</code> marker is a stronger trust signal than a <code>+</code> reaction. It is useful after a merge. If the original author includes the editor's changes, and the editor does not want to maintain an independent version, the editor publishes a deferring event. Clients can treat that as a deletion of the editor's version. The editor's web-of-trust weight then backs the original author's version.</p>273274 <h2 class="bar" id="ranking"><span class="num">8</span> How to Decide What Article to Display</h2>275 <p>Many articles can exist for one name. The client must rank them. The criteria vary between users and clients. The NIP describes four usable signals:</p>276 <ul>277 <li><strong>Reactions.</strong> <a href="25.html">NIP-25</a> reactions build a simple web of trust between wiki authors. A raw "like" count is unproductive. But a <code>+</code> on a wiki article is a recommendation of that article, and a partial recommendation of its author. Follow recommendations 2 or 3 levels deep, and a big part of all articles gains some form of tagging.</li>278 <li><strong>Relays.</strong> <a href="51.html">NIP-51</a> relay lists of <code>kind:10102</code> tell a wiki client where to query articles first, and how to rank those articles against events from other relays.</li>279 <li><strong>Contact lists.</strong> <a href="02.html">NIP-02</a> contact lists seed a recommendation system, expanded with relay lists and reaction lists through nested queries. They are a good starting point only because they are so widespread.</li>280 <li><strong>Wiki-related contact lists.</strong> <a href="51.html">NIP-51</a> lists can also hold users trusted only in the context of wiki authorship or wiki curationship.</li>281 </ul>282283 <h2 class="bar" id="examples"><span class="num">9</span> Worked Example</h2>284 <p>The session below shows a full wiki cycle. Alice publishes an article. Carol adds a redirect. Bob forks, edits, and requests a merge. Alice accepts. Orange lines go to the relay. Blue lines come from the relay.</p>285 <div class="crt">286 <div class="titlebar">Session transcript - wss://wiki.relay.example</div>287<pre><span class="c">-- Alice publishes the article "Bitcoin" (d tag normalized to "bitcoin") --</span>288<span class="send">→ ["EVENT", {"kind":30818,"pubkey":"a11ce…","content":"Bitcoin is a [cryptocurrency][]289 invented by [Satoshi Nakamoto][].\n\n[Satoshi Nakamoto]: nostr:npub1s4t0sh1…",290 "tags":[["d","bitcoin"],["title","Bitcoin"],["summary","The first cryptocurrency."]], …}]</span>291<span class="recv">← ["OK", "77aa01…", true, ""]</span>292293<span class="c">-- Carol redirects "BTC" to Alice's article --</span>294<span class="send">→ ["EVENT", {"kind":30819,"pubkey":"c4a01…","content":"",295 "tags":[["d","btc"],["a","30818:a11ce…:bitcoin","wss://wiki.relay.example"]], …}]</span>296<span class="recv">← ["OK", "88bb02…", true, ""]</span>297298<span class="c">-- Bob forks Alice's article and publishes his own version --</span>299<span class="send">→ ["EVENT", {"kind":30818,"pubkey":"b0b00…","content":"… plus the block size limit …",300 "tags":[["d","bitcoin"],["title","Bitcoin"],301 ["a","30818:a11ce…:bitcoin","wss://wiki.relay.example","fork"],302 ["e","77aa01…","wss://wiki.relay.example","fork"]], …}]</span>303<span class="recv">← ["OK", "99cc03…", true, ""]</span>304305<span class="c">-- Bob asks Alice to merge his changes --</span>306<span class="send">→ ["EVENT", {"kind":818,"pubkey":"b0b00…",307 "content":"I added information about the block size limit",308 "tags":[["a","30818:a11ce…:bitcoin","wss://wiki.relay.example"],309 ["e","77aa01…","wss://wiki.relay.example"],["p","a11ce…"],310 ["e","99cc03…","wss://wiki.relay.example","source"]], …}]</span>311<span class="recv">← ["OK", "aadd04…", true, ""]</span>312313<span class="c">-- Alice accepts with a NIP-25 "+" reaction on the merge request --</span>314<span class="send">→ ["EVENT", {"kind":7,"pubkey":"a11ce…","content":"+",315 "tags":[["e","aadd04…"],["p","b0b00…"]], …}]</span>316<span class="recv">← ["OK", "bbee05…", true, ""]</span></pre>317 </div>318319 <h2 class="bar" id="history"><span class="num">10</span> Version History</h2>320 <p>fiatjaf proposed decentralized wikis in May 2024. The content format changed twice; the normalization rules grew once. Notable changes, newest first:</p>321 <ul class="patchnotes">322 <li><span class="ver">2026</span><span class="when">2026-03</span>Content format switched from Asciidoc to Djot; the "Why Djot?" rationale was added.</li>323 <li><span class="ver">2025</span><span class="when">2025-12</span>Normalization fixed for non-Latin scripts: preserve UTF-8 letters, lowercase where case exists, keep numbers.</li>324 <li class="minor"><span class="ver">2024-25</span><span class="when">2024-2025</span>Heading levels, spelling, JSON formatting, and markdown-leftover cleanups.</li>325 <li><span class="ver">2024</span><span class="when">2024-08</span>"Parameterized replaceable event" renamed to "addressable event" across the repository.</li>326 <li><span class="ver">2024</span><span class="when">2024-06</span>Content format changed from Markdown to Asciidoc.</li>327 <li><span class="ver">2024</span><span class="when">2024-05</span>Wikilink format clarified; <code>d</code> tag normalization rules added.</li>328 <li><span class="ver">Origin</span><span class="when">2024-05-02</span>fiatjaf published "NIP-54: decentralized wikis" with articles, merge requests, redirects, forks, and deference.</li>329 </ul>330331 <div class="credits">332 <h3 class="cardhead">Original Proposal - Credits</h3>333 <table>334 <tr><td>Author</td><td>fiatjaf</td></tr>335 <tr><td>First commit</td><td>2024-05-02 — “NIP-54: decentralized wikis” (<a href="https://github.com/nostr-protocol/nips/pull/787">PR #787</a>)</td></tr>336 <tr><td>Status</td><td>draft - optional</td></tr>337 <tr><td>Source</td><td><a href="https://github.com/nostr-protocol/nips/blob/master/54.md">54.md on GitHub</a> - <a href="https://github.com/nostr-protocol/nips/commits/master/54.md">full change history</a></td></tr>338 </table>339 </div>340341 <h2 class="bar"><span class="num">11</span> See Also</h2>342 <ul>343 <li><a href="01.html">NIP-01</a> — addressable events, <code>d</code>/<code>a</code>/<code>e</code>/<code>p</code> tags, and the base protocol this NIP builds on.</li>344 <li><a href="21.html">NIP-21</a> — the <code>nostr:</code> URI scheme used for links inside article content.</li>345 <li><a href="25.html">NIP-25</a> — reactions; <code>+</code>/<code>-</code> on merge requests and article recommendations.</li>346 <li><a href="51.html">NIP-51</a> — lists; <code>kind:10102</code> wiki relay lists and wiki-specific trust lists.</li>347 <li><a href="02.html">NIP-02</a> — contact lists as a seed for article ranking.</li>348 </ul>349 </div>350351 <aside>352 <div class="cartridge">353 <div class="inner">354 <h3 class="cardhead">Spec Card</h3>355 <div class="lights"><span class="led on"></span><span class="led warn"></span><span class="led warn"></span></div>356 <dl>357 <dt>Status</dt><dd><span class="chip draft">draft</span><span class="chip">optional</span></dd>358 <dt>Defines</dt><dd>kinds 30818, 818, 30819 - title/summary tags - fork/defer/source markers</dd>359 <dt>Kinds</dt><dd>30818 (article) - 818 (merge request) - 30819 (redirect)</dd>360 <dt>Requires</dt><dd><a href="01.html">NIP-01</a> - <a href="21.html">NIP-21</a> - <a href="25.html">NIP-25</a></dd>361 <dt>Content</dt><dd>Djot markup with wikilinks</dd>362 <dt>First commit</dt><dd>2024-05-02</dd>363 <dt>Last updated</dt><dd>2026-03-17</dd>364 </dl>365 </div>366 </div>367 </aside>368 </main>369370 <nav class="navbtns">371 <a href="53.html">◀ NIP-53: Live Streaming and Spaces</a>372 <a href="55.html">NIP-55: Android Signer Application ▶</a>373 </nav>374375 <footer class="pagefoot">376 <a href="../index.html">Nostr Protocol Manual</a>377 <span class="pageno">NIP 54 / F4</span>378 </footer>379</div>380381<script src="../assets/webmcp.js" defer></script>382</body>383</html>