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-24 - Extra metadata fields and tags — Nostr Instruction Manual</title>7<meta name="description" content="NIP-24: extra optional fields for kind-0 and kind-3 events, deprecated fields to ignore, and the shared r, i, title, and t tags. 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 24 - Profiles</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="24">24</div>48 <div class="titles">49 <div class="kicker">Nostr Implementation Possibility - Hex № 24</div>50 <h1>Extra Metadata Fields and Tags</h1>51 <p class="sub">The community glossary: optional profile fields and shared tags that became de facto standards without a NIP of their own.</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>Some fields and tags appear in real events but are defined in no NIP. Clients started to use them anyway. They became de facto standards. This NIP keeps track of them.</p>60 <p>The NIP has three parts. Part one lists extra fields for the <strong>kind-0</strong> user metadata event of <a href="01.html">NIP-01</a>. Part two lists a deprecated field pattern in the <strong>kind-3</strong> follow event of <a href="02.html">NIP-02</a>. Part three lists four <strong>tags</strong> that keep the same meaning across many event kinds.</p>61 <p>This NIP also collects minor implementation possibilities. These items do not deserve their own NIP. They also have no place in other NIPs. All fields and tags here are optional.</p>6263 <div class="box hint">64 <span class="tag">Hint!</span>65 <p>Treat this chapter as an appendix to <a href="01.html">NIP-01</a> and <a href="02.html">NIP-02</a>. It defines no new kinds and no new messages. It only names things that clients already write into existing events.</p>66 </div>6768 <figure class="diagram">69 <div class="frame">70 <svg viewBox="0 0 560 168" role="img" aria-label="Kind-0 metadata content layers: NIP-01 base fields, NIP-24 extra fields, and deprecated fields to ignore">71 <text class="d-actor-label" x="10" y="18">Kind-0 content field map</text>72 <rect x="10" y="30" width="130" height="26" rx="4" fill="#2e5f9e"/>73 <text class="d-label" x="75" y="47" text-anchor="middle" fill="#fff">NIP-01 base</text>74 <text class="d-note" x="150" y="47">name - about - picture</text>75 <rect x="10" y="64" width="130" height="26" rx="4" fill="#f26a00"/>76 <text class="d-label" x="75" y="81" text-anchor="middle" fill="#fff">NIP-24 extras</text>77 <text class="d-note" x="150" y="81">display_name - website - banner - bot - birthday</text>78 <rect x="10" y="98" width="130" height="26" rx="4" fill="#7d8794"/>79 <text class="d-label" x="75" y="115" text-anchor="middle" fill="#fff">DEPRECATED</text>80 <text class="d-note" x="150" y="115">displayName - username — ignore or remove on sight</text>81 <rect x="10" y="132" width="130" height="26" rx="4" fill="#2c7a3f"/>82 <text class="d-label" x="75" y="149" text-anchor="middle" fill="#fff">SHARED TAGS</text>83 <text class="d-note" x="150" y="149">r - i - title - t — same meaning across many kinds</text>84 </svg>85 </div>86 <figcaption>Fig. 24-1 — <b>What this NIP tracks.</b> Extra fields extend the kind-0 object; deprecated fields must be ignored; four tags are shared across kinds.</figcaption>87 </figure>8889 <h2 class="bar" id="spec"><span class="num">2</span> Extra Fields for Kind 0</h2>90 <p><a href="01.html">NIP-01</a> defines the kind-0 user metadata event. Its <code>content</code> is a stringified JSON object. NIP-01 specifies <code>name</code>, <code>about</code>, and <code>picture</code>. The fields below may also be present in that object. NIP-01 does not specify them.</p>9192 <div class="tscroll"><table class="ref">93 <caption>Extra kind-0 fields</caption>94 <tr><th>Field</th><th>Type</th><th>Meaning</th></tr>95 <tr><td class="btn">display_name</td><td>string</td><td>An alternative, bigger name with richer characters than <code>name</code>. Set <code>name</code> always, even when <code>display_name</code> is present.</td></tr>96 <tr><td class="btn">website</td><td>string</td><td>A web URL related in any way to the event author.</td></tr>97 <tr><td class="btn">banner</td><td>string</td><td>A URL to a wide (~1024x768) picture. Clients may display it in the background of a profile screen.</td></tr>98 <tr><td class="btn">bot</td><td>boolean</td><td>States that the content is entirely or partially the result of automation. Examples: chatbots, newsfeeds.</td></tr>99 <tr><td class="btn">birthday</td><td>object</td><td>The author's birth date. Format: <code>{"year": number, "month": number, "day": number}</code>. Each field may be omitted.</td></tr>100 </table></div>101102 <div class="crt">103 <div class="titlebar">Kind-0 content object - with NIP-24 extras</div>104<pre>{105 <span class="k">"name"</span>: <span class="s">"dami"</span>,106 <span class="k">"about"</span>: <span class="s">"I write manuals."</span>,107 <span class="k">"picture"</span>: <span class="s">"https://example.com/avatar.png"</span>,108 <span class="k">"display_name"</span>: <span class="s">"Dami ⚡ Manual Dept."</span>,109 <span class="k">"website"</span>: <span class="s">"https://example.com"</span>,110 <span class="k">"banner"</span>: <span class="s">"https://example.com/banner.png"</span>,111 <span class="k">"bot"</span>: false,112 <span class="k">"birthday"</span>: { <span class="k">"month"</span>: 4, <span class="k">"day"</span>: 1 } <span class="c">// year omitted</span>113}</pre>114 </div>115116 <div class="box tech">117 <span class="tag">Tech Note</span>118 <p>The source spec calls <code>banner</code> a "wide" picture but gives ~1024x768 as the example size. That is a 4:3 ratio, which is not wide. Treat the number as a rough size hint, not a required aspect ratio.</p>119 </div>120121 <h3>Deprecated kind-0 fields</h3>122 <p>Ignore or remove these fields when you find them in the wild:</p>123 <div class="tscroll"><table class="ref">124 <caption>Deprecated kind-0 fields</caption>125 <tr><th>Field</th><th>Status</th><th>Replacement</th></tr>126 <tr><td class="btn">displayName</td><td><span class="chip unrecommended">deprecated</span></td><td>Use <code>display_name</code> instead.</td></tr>127 <tr><td class="btn">username</td><td><span class="chip unrecommended">deprecated</span></td><td>Use <code>name</code> instead.</td></tr>128 </table></div>129130 <h2 class="bar" id="kind3"><span class="num">3</span> Deprecated Fields for Kind 3</h2>131 <p><a href="02.html">NIP-02</a> defines the kind-3 follow event. Old clients wrote a relay list into its stringified JSON <code>content</code>. That pattern is now deprecated. Ignore or remove it when found.</p>132 <div class="crt">133 <div class="titlebar">Deprecated - kind-3 content relay object</div>134<pre>{135 <span class="s">"wss://relay.example.com"</span>: { <span class="k">"read"</span>: true, <span class="k">"write"</span>: true },136 <span class="s">"wss://other.example.com"</span>: { <span class="k">"read"</span>: true, <span class="k">"write"</span>: false }137} <span class="c">// <relay-url> keys map to {"read": <true|false>, "write": <true|false>}</span></pre>138 </div>139 <div class="box warn">140 <span class="tag">Warning!</span>141 <p>Do not publish this relay object anymore. Use a <a href="65.html">NIP-65</a> relay list event instead. Reading clients should ignore the object when they parse kind-3 events.</p>142 </div>143144 <h2 class="bar" id="tags"><span class="num">4</span> Shared Tags</h2>145 <p>These four tags may be present in multiple event kinds. A more specific NIP can give a tag a different meaning for its own kinds. When no such NIP applies, the tags mean this:</p>146 <div class="tscroll"><table class="ref">147 <caption>Shared tags</caption>148 <tr><th>Tag</th><th>Value</th><th>Meaning</th></tr>149 <tr><td class="btn">r</td><td>web URL</td><td>A web URL the event refers to in some way.</td></tr>150 <tr><td class="btn">i</td><td>external id</td><td>An external id the event refers to in some way. See <a href="73.html">NIP-73</a>.</td></tr>151 <tr><td class="btn">title</td><td>string</td><td>The name of a <a href="51.html">NIP-51</a> set, a <a href="52.html">NIP-52</a> calendar event, a <a href="53.html">NIP-53</a> live event, or a <a href="99.html">NIP-99</a> listing.</td></tr>152 <tr><td class="btn">t</td><td>hashtag</td><td>A hashtag. The value must be a lowercase string.</td></tr>153 </table></div>154 <div class="box tech">155 <span class="tag">Tech Note</span>156 <p>The <code>t</code> rule constrains only case. It does not say whether the value includes a leading <code>#</code> character or how to handle spaces. In practice clients store the bare word without <code>#</code>. Relays index all four tags because their names are short; see the <a href="01.html">NIP-01</a> single-letter indexing rule, which covers <code>r</code>, <code>i</code>, and <code>t</code> but not <code>title</code>.</p>157 </div>158159 <h2 class="bar" id="examples"><span class="num">5</span> Worked Example</h2>160 <p>The transcript below shows two events. First a client publishes a full kind-0 metadata event with NIP-24 extras. The <code>content</code> is the stringified object from §2. Then it publishes a kind-1 note that uses the shared <code>r</code> and <code>t</code> tags.</p>161 <div class="crt">162 <div class="titlebar">Session transcript - wss://relay.example.com</div>163<pre><span class="c">-- publish profile metadata (kind 0) --</span>164<span class="send">→ ["EVENT", {"id":"7f3a91cc42…","pubkey":"22a12a12…","created_at":1754900000,165 "kind":0,"tags":[],166 "content":"{\"name\":\"dami\",\"about\":\"I write manuals.\",167 \"picture\":\"https://example.com/avatar.png\",168 \"display_name\":\"Dami ⚡ Manual Dept.\",169 \"website\":\"https://example.com\",170 \"banner\":\"https://example.com/banner.png\",171 \"bot\":false,\"birthday\":{\"month\":4,\"day\":1}}",172 "sig":"a4c11f09…"}]</span>173<span class="recv">← ["OK", "7f3a91cc42…", true, ""]</span>174175<span class="c">-- publish a note that uses shared tags (kind 1) --</span>176<span class="send">→ ["EVENT", {"id":"c09d4a17be…","pubkey":"22a12a12…","created_at":1754900060,177 "kind":1,178 "tags":[["r","https://example.com/spec.pdf"],179 ["t","nostr"],180 ["i","isbn:9780765382030","https://example.com/book"]],181 "content":"Reading the spec again. #nostr","sig":"91bb02de…"}]</span>182<span class="recv">← ["OK", "c09d4a17be…", true, ""]</span></pre>183 </div>184 <div class="box hint">185 <span class="tag">Hint!</span>186 <p>The old profile still shows <code>username</code> or <code>displayName</code>? Drop those fields the next time you write the kind-0 event. Clients must ignore them either way.</p>187 </div>188189 <h2 class="bar" id="history"><span class="num">6</span> Version History</h2>190 <p>NIP-24 grows one field at a time, as the community adopts new conventions. Notable changes, newest first:</p>191 <ul class="patchnotes">192 <li class="minor"><span class="ver">2025</span><span class="when">2025-08</span>Fixed heading levels in the document. No content change.</li>193 <li><span class="ver">2025</span><span class="when">2025-03</span>Added the <code>birthday</code> object for the author's birth date. Every part of it may be omitted.</li>194 <li><span class="ver">2024</span><span class="when">2024-11</span>Clarified the purpose statement. A <code>pronouns</code> field was merged by mistake and reverted two days later.</li>195 <li><span class="ver">2024</span><span class="when">2024-08</span>Defined the <code>t</code> hashtag tag. Its value must be a lowercase string.</li>196 <li><span class="ver">2024</span><span class="when">2024-04</span>Added the <code>i</code> external-id tag, later pointed at <a href="73.html">NIP-73</a>.</li>197 <li><span class="ver">2024</span><span class="when">2024-03</span>Added the <code>bot</code> boolean for automated accounts.</li>198 <li><span class="ver">2023</span><span class="when">2023-12</span>Added <code>title</code> as a shared tag for <a href="51.html">NIP-51</a>, <a href="52.html">NIP-52</a>, and later <a href="53.html">NIP-53</a> and <a href="99.html">NIP-99</a> events.</li>199 <li><span class="ver">2023</span><span class="when">2023-09</span>Added the kind-3 relay object as a deprecated pattern; <a href="65.html">NIP-65</a> replaces it.</li>200 <li><span class="ver">Origin</span><span class="when">2023-09-24</span>fiatjaf created the NIP with the extra metadata fields; <code>banner</code> and the deprecated names arrived the same day.</li>201 </ul>202203 <div class="credits">204 <h3 class="cardhead">Original Proposal - Credits</h3>205 <table>206 <tr><td>Author</td><td>fiatjaf</td></tr>207 <tr><td>First commit</td><td>2023-09-24 — “add nip-24: extra metadata fields.”</td></tr>208 <tr><td>Status</td><td>draft - optional — clients may adopt any subset of these fields and tags</td></tr>209 <tr><td>Source</td><td><a href="https://github.com/nostr-protocol/nips/blob/master/24.md">24.md on GitHub</a> - <a href="https://github.com/nostr-protocol/nips/commits/master/24.md">full change history</a></td></tr>210 </table>211 </div>212213 <h2 class="bar"><span class="num">7</span> See Also</h2>214 <ul>215 <li><a href="01.html">NIP-01</a> — defines the kind-0 metadata event and its base fields <code>name</code>, <code>about</code>, <code>picture</code>.</li>216 <li><a href="02.html">NIP-02</a> — defines the kind-3 follow event that carried the deprecated relay object.</li>217 <li><a href="65.html">NIP-65</a> — the relay list event that replaces the kind-3 relay object.</li>218 <li><a href="73.html">NIP-73</a> — external content ids, the full spec behind the <code>i</code> tag.</li>219 <li><a href="51.html">NIP-51</a>, <a href="52.html">NIP-52</a>, <a href="53.html">NIP-53</a>, <a href="99.html">NIP-99</a> — the kinds that use the shared <code>title</code> tag.</li>220 </ul>221 </div>222223 <aside>224 <div class="cartridge">225 <div class="inner">226 <h3 class="cardhead">Spec Card</h3>227 <div class="lights"><span class="led on"></span><span class="led on"></span><span class="led on"></span></div>228 <dl>229 <dt>Status</dt><dd><span class="chip draft">draft</span><span class="chip">optional</span></dd>230 <dt>Defines</dt><dd>kind-0 extra fields - kind-3 deprecations - r/i/title/t tags</dd>231 <dt>Kinds</dt><dd>extends 0 and 3 — no new kinds</dd>232 <dt>Requires</dt><dd><a href="01.html">NIP-01</a> - <a href="02.html">NIP-02</a></dd>233 <dt>First commit</dt><dd>2023-09-24</dd>234 <dt>Last updated</dt><dd>2025-08-11</dd>235 </dl>236 </div>237 </div>238 </aside>239 </main>240241 <nav class="navbtns">242 <a href="23.html">◀ NIP-23: Long-form Content</a>243 <a href="25.html">NIP-25: Reactions ▶</a>244 </nav>245246 <footer class="pagefoot">247 <a href="../index.html">Nostr Protocol Manual</a>248 <span class="pageno">NIP 24 / F4</span>249 </footer>250</div>251252<script src="../assets/webmcp.js" defer></script>253</body>254</html>