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-51 - Lists — Nostr Instruction Manual</title>7<meta name="description" content="NIP-51: user lists and sets. Every standard list kind, every set kind, public and private items, and the NIP-44 encryption rules. 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 51 - 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="51">51</div>48 <div class="titles">49 <div class="kicker">Nostr Implementation Possibility - Hex № 51</div>50 <h1>Lists</h1>51 <p class="sub">One catalog of list events: mute lists, bookmarks, relay lists, sets, and the rules for keeping items private.</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>Users collect things: people, notes, relays, hashtags, emojis, apps. This NIP defines the <strong>list</strong>: an event whose tags hold references to those things. A list can point to anything.</p>60 <p>There are two families. A <strong>standard list</strong> is a normal replaceable event. A user has at most one list per kind. A <strong>set</strong> is an addressable event with a <code>d</code> tag. A user can have many sets per kind, one per <code>d</code> value.</p>61 <p>Each item in a list is <strong>public</strong> or <strong>private</strong>. Public items live in the event <code>tags</code> array. Private items live in the <code>content</code> field, encrypted with <a href="44.html">NIP-44</a>. Everyone can read the public items. Only the author can read the private items.</p>6263 <div class="box hint">64 <span class="tag">Hint!</span>65 <p>When you add a new item to an existing list, append it to the end of the array. The list then stays in chronological order. Clients SHOULD follow this rule.</p>66 </div>6768 <h2 class="bar" id="spec"><span class="num">2</span> Public and Private Items</h2>69 <p>Public items are normal tags in the event <code>tags</code> array. Private items use a hidden second tags array. Build it like this:</p>70 <ol>71 <li>Collect the private items as a JSON array. It mimics the structure of the event <code>tags</code> array.</li>72 <li>Stringify the array.</li>73 <li>Encrypt the string with the <a href="44.html">NIP-44</a> scheme. Compute the shared key from the author's own public and private key.</li>74 <li>Store the ciphertext in <code>event.content</code>.</li>75 </ol>7677 <div class="crt">78 <div class="titlebar">Encryption process - pseudocode</div>79<pre><span class="k">private_items</span> = [80 [<span class="s">"p"</span>, <span class="s">"07caba282f76441955b695551c3c5c742e5b9202a3784780f8086fdcdc1da3a9"</span>],81 [<span class="s">"a"</span>, <span class="s">"a55c15f5e41d5aebd236eca5e0142789c5385703f1a7485aa4b38d94fd18dcc4"</span>],82]83<span class="k">base64blob</span> = nip44.encrypt(json.encode_to_string(<span class="k">private_items</span>))84<span class="k">event.content</span> = <span class="k">base64blob</span></pre>85 </div>8687 <div class="box warn">88 <span class="tag">Warning!</span>89 <p>An earlier version of this NIP encrypted private items with <a href="04.html">NIP-04</a>. That method is now deprecated. For backward compatibility, a client can detect the scheme: search the ciphertext for the string <code>"iv"</code>. If it is present, decrypt with <a href="04.html">NIP-04</a>. Otherwise decrypt with <a href="44.html">NIP-44</a>.</p>90 </div>9192 <figure class="diagram">93 <div class="frame">94 <svg viewBox="0 0 560 190" role="img" aria-label="Public items go into the tags array; private items are stringified, encrypted with NIP-44, and stored in content">95 <rect class="d-actor" x="10" y="20" width="130" height="44" rx="8"/>96 <text class="d-actor-label" x="75" y="39" text-anchor="middle">Public items</text>97 <text class="d-note" x="75" y="55" text-anchor="middle">plain tags</text>98 <rect class="d-actor" x="10" y="120" width="130" height="44" rx="8"/>99 <text class="d-actor-label" x="75" y="139" text-anchor="middle">Private items</text>100 <text class="d-note" x="75" y="155" text-anchor="middle">JSON tags array</text>101 <rect class="d-actor" x="215" y="120" width="130" height="44" rx="8"/>102 <text class="d-actor-label" x="280" y="139" text-anchor="middle">NIP-44 encrypt</text>103 <text class="d-note" x="280" y="155" text-anchor="middle">key: own pub+priv</text>104 <rect class="d-actor" x="420" y="55" width="130" height="80" rx="8"/>105 <text class="d-actor-label" x="485" y="82" text-anchor="middle">List event</text>106 <text class="d-note" x="485" y="100" text-anchor="middle">.tags = public</text>107 <text class="d-note" x="485" y="116" text-anchor="middle">.content = ciphertext</text>108 <path class="d-msg d-flow" d="M142,42 C280,42 340,70 417,80"/>109 <path class="d-msg blue d-flow" d="M142,142 L212,142"/>110 <path class="d-msg blue d-flow" d="M347,142 C380,140 395,125 417,112"/>111 <circle r="4" fill="#2e5f9e">112 <animateMotion dur="2.6s" repeatCount="indefinite" path="M142,142 L212,142"/>113 </circle>114 <circle r="4" fill="#f26a00">115 <animateMotion dur="2.6s" begin="1.3s" repeatCount="indefinite" path="M142,42 C280,42 340,70 417,80"/>116 </circle>117 </svg>118 </div>119 <figcaption>Fig. 51-1 — <b>Two paths into one event.</b> Public items stay readable tags. Private items become one encrypted blob in <code>content</code>.</figcaption>120 </figure>121122 <h2 class="bar" id="standard"><span class="num">3</span> Standard Lists</h2>123 <p>Standard lists use normal replaceable events. A user may have only a single list of each kind. These lists have special meaning. Clients may rely on them to augment a user's profile or browsing experience.</p>124 <p>For example, the <em>mute list</em> can contain the public keys of spammers and bad actors. The user does not want to see them in feeds or receive notifications from them.</p>125126 <div class="tscroll"><table class="ref">127 <caption>Standard list kinds</caption>128 <tr><th>Name</th><th>Kind</th><th>Description</th><th>Expected tag items</th></tr>129 <tr><td>Follow list</td><td class="btn">3</td><td>Microblogging basic follow list, see <a href="02.html">NIP-02</a>.</td><td><span class="kbd">p</span> pubkeys, with optional relay hint and petname</td></tr>130 <tr><td>Mute list</td><td class="btn">10000</td><td>Things the user does not want to see in their feeds.</td><td><span class="kbd">p</span> pubkeys - <span class="kbd">t</span> hashtags - <span class="kbd">word</span> lowercase string - <span class="kbd">e</span> threads</td></tr>131 <tr><td>Pinned notes</td><td class="btn">10001</td><td>Events the user intends to showcase in their profile page.</td><td><span class="kbd">e</span> kind:1 notes</td></tr>132 <tr><td>Read/write relays</td><td class="btn">10002</td><td>Where a user publishes to and where they expect mentions.</td><td>See <a href="65.html">NIP-65</a>.</td></tr>133 <tr><td>Bookmarks</td><td class="btn">10003</td><td>Uncategorized, "global" list of things a user wants to save.</td><td><span class="kbd">e</span> kind:1 notes - <span class="kbd">a</span> kind:30023 articles</td></tr>134 <tr><td>Communities</td><td class="btn">10004</td><td><a href="72.html">NIP-72</a> communities the user belongs to.</td><td><span class="kbd">a</span> kind:34550 community definitions</td></tr>135 <tr><td>Public chats</td><td class="btn">10005</td><td><a href="28.html">NIP-28</a> chat channels the user is in.</td><td><span class="kbd">e</span> kind:40 channel definitions</td></tr>136 <tr><td>Blocked relays</td><td class="btn">10006</td><td>Relays clients should never connect to.</td><td><span class="kbd">relay</span> relay URLs</td></tr>137 <tr><td>Search relays</td><td class="btn">10007</td><td>Relays clients should use when performing search queries.</td><td><span class="kbd">relay</span> relay URLs</td></tr>138 <tr><td>Profile badges</td><td class="btn">10008</td><td><a href="58.html">NIP-58</a> badges a user has accepted and chosen to display.</td><td><span class="kbd">a</span> kind:30009 badge definitions and <span class="kbd">e</span> kind:8 badge awards, and <span class="kbd">a</span> kind:30008 badge set</td></tr>139 <tr><td>Simple groups</td><td class="btn">10009</td><td><a href="29.html">NIP-29</a> groups the user is in.</td><td><span class="kbd">group</span> <a href="29.html">NIP-29</a> group id + relay URL + optional group name - <span class="kbd">r</span> for each relay in use</td></tr>140 <tr><td>Favorite follow sets</td><td class="btn">10011</td><td>User favorite follow sets.</td><td><span class="kbd">a</span> kind:30000 follow set</td></tr>141 <tr><td>Relay feeds</td><td class="btn">10012</td><td>User favorite browsable relays (and relay sets).</td><td><span class="kbd">relay</span> relay URLs and <span class="kbd">a</span> kind:30002 relay set</td></tr>142 <tr><td>Private relays</td><td class="btn">10013</td><td>(nip44-encrypted) <a href="37.html">NIP-37</a> private relays (drafts).</td><td><span class="kbd">relay</span> relay URL</td></tr>143 <tr><td>Interests</td><td class="btn">10015</td><td>Topics a user may be interested in and pointers.</td><td><span class="kbd">t</span> hashtags and <span class="kbd">a</span> kind:30015 interest set</td></tr>144 <tr><td>Media follows</td><td class="btn">10020</td><td>Multimedia (photos, short video) follow list.</td><td><span class="kbd">p</span> pubkeys, with optional relay hint and petname</td></tr>145 <tr><td>Emojis</td><td class="btn">10030</td><td>User preferred emojis and pointers to emoji sets.</td><td><span class="kbd">emoji</span> see <a href="30.html">NIP-30</a> - <span class="kbd">a</span> kind:30030 emoji set</td></tr>146 <tr><td>DM relays</td><td class="btn">10050</td><td>Where to receive <a href="17.html">NIP-17</a> direct messages.</td><td><span class="kbd">relay</span> see <a href="17.html">NIP-17</a></td></tr>147 <tr><td>Blossom servers</td><td class="btn">10063</td><td>Servers where to upload and look for images and other blobs.</td><td><span class="kbd">server</span> see <a href="b7.html">NIP-B7</a></td></tr>148 <tr><td>Good wiki authors</td><td class="btn">10101</td><td><a href="54.html">NIP-54</a> user recommended wiki authors.</td><td><span class="kbd">p</span> pubkeys</td></tr>149 <tr><td>Good wiki relays</td><td class="btn">10102</td><td><a href="54.html">NIP-54</a> relays deemed to only host useful articles.</td><td><span class="kbd">relay</span> relay URLs</td></tr>150 <tr><td>Git authors</td><td class="btn">10017</td><td>Code follow list: people who produce <a href="34.html">NIP-34</a> events.</td><td><span class="kbd">p</span> pubkeys, with optional relay hint and petname</td></tr>151 <tr><td>Git repositories</td><td class="btn">10018</td><td><a href="34.html">NIP-34</a> followed repositories.</td><td><span class="kbd">a</span> kind:30617 repository announcement event</td></tr>152 <tr><td>Favorite podcasts</td><td class="btn">10054</td><td>Podcasts a user wants to bookmark as favorites.</td><td><span class="kbd">p</span> <a href="f4.html">NIP-F4</a> podcast pubkeys - <span class="kbd">url</span> RSS/XML podcast URLs</td></tr>153 <tr><td>Authored podcasts</td><td class="btn">10064</td><td>Podcasts the user authors.</td><td><span class="kbd">p</span> <a href="f4.html">NIP-F4</a> podcast pubkeys</td></tr>154 </table></div>155156 <h2 class="bar" id="sets"><span class="num">4</span> Sets</h2>157 <p>Sets are lists with well-defined meaning. They can enhance the functionality and the UI of clients that rely on them. Unlike standard lists, a user is expected to have more than one set of each kind. Therefore each set must have a different <code>d</code> tag identifier.</p>158 <p>For example, <em>relay sets</em> can appear in a dropdown UI. The user picks which relays to publish to, or which relays to read replies from. <em>Curation sets</em> let apps showcase curations made by others, tagged to different topics.</p>159 <p>Aside from the main <code>d</code> identifier, a set can carry three optional tags that enhance its UI: <code>title</code>, <code>image</code>, and <code>description</code>.</p>160161 <figure class="diagram">162 <div class="frame">163 <svg viewBox="0 0 560 170" role="img" aria-label="A standard list is one replaceable event per kind; sets are addressable events, one per d tag value">164 <text class="d-actor-label" x="10" y="20">Standard list (replaceable)</text>165 <rect class="d-actor" x="10" y="32" width="180" height="38" rx="8"/>166 <text class="d-actor-label" x="100" y="50" text-anchor="middle">kind 10000</text>167 <text class="d-note" x="100" y="64" text-anchor="middle">one per user</text>168 <text class="d-actor-label" x="10" y="102">Sets (addressable)</text>169 <rect class="d-actor" x="10" y="114" width="170" height="38" rx="8"/>170 <text class="d-actor-label" x="95" y="132" text-anchor="middle">kind 30000</text>171 <text class="d-note" x="95" y="146" text-anchor="middle">d="friends"</text>172 <rect class="d-actor" x="195" y="114" width="170" height="38" rx="8"/>173 <text class="d-actor-label" x="280" y="132" text-anchor="middle">kind 30000</text>174 <text class="d-note" x="280" y="146" text-anchor="middle">d="devs"</text>175 <rect class="d-actor" x="380" y="114" width="170" height="38" rx="8"/>176 <text class="d-actor-label" x="465" y="132" text-anchor="middle">kind 30000</text>177 <text class="d-note" x="465" y="146" text-anchor="middle">d="artists"</text>178 <text class="d-note" x="290" y="51">← at most one event per kind and pubkey</text>179 <text class="d-note" x="380" y="102">many events, keyed by d value</text>180 </svg>181 </div>182 <figcaption>Fig. 51-2 — <b>Lists versus sets.</b> A standard list replaces itself. Sets coexist, one per <code>d</code> value.</figcaption>183 </figure>184185 <div class="tscroll"><table class="ref">186 <caption>Set kinds</caption>187 <tr><th>Name</th><th>Kind</th><th>Description</th><th>Expected tag items</th></tr>188 <tr><td>Follow sets</td><td class="btn">30000</td><td>Categorized groups of users a client may choose to check out in different circumstances.</td><td><span class="kbd">p</span> pubkeys</td></tr>189 <tr><td>Relay sets</td><td class="btn">30002</td><td>User-defined relay groups the user can easily pick and choose from during various operations.</td><td><span class="kbd">relay</span> relay URLs</td></tr>190 <tr><td>Bookmark sets</td><td class="btn">30003</td><td>User-defined bookmark categories, for when bookmarks must be in labeled separate groups.</td><td><span class="kbd">e</span> kind:1 notes - <span class="kbd">a</span> kind:30023 articles</td></tr>191 <tr><td>Curation sets</td><td class="btn">30004</td><td>Groups of articles picked by users as interesting and/or belonging to the same category.</td><td><span class="kbd">a</span> kind:30023 articles - <span class="kbd">e</span> kind:1 notes</td></tr>192 <tr><td>Curation sets</td><td class="btn">30005</td><td>Groups of videos picked by users as interesting and/or belonging to the same category.</td><td><span class="kbd">e</span> kind:21 videos</td></tr>193 <tr><td>Curation sets</td><td class="btn">30006</td><td>Groups of pictures picked by users as interesting and/or belonging to the same category.</td><td><span class="kbd">e</span> kind:20 pictures</td></tr>194 <tr><td>Kind mute sets</td><td class="btn">30007</td><td>Mute pubkeys by kinds. The <code>d</code> tag MUST be the kind string.</td><td><span class="kbd">p</span> pubkeys</td></tr>195 <tr><td>Badge sets</td><td class="btn">30008</td><td><a href="58.html">NIP-58</a> categorized groups of badges.</td><td><span class="kbd">a</span> kind:30009 badge definitions and <span class="kbd">e</span> kind:8 badge awards</td></tr>196 <tr><td>Interest sets</td><td class="btn">30015</td><td>Interest topics represented by a bunch of "hashtags".</td><td><span class="kbd">t</span> hashtags</td></tr>197 <tr><td>Emoji sets</td><td class="btn">30030</td><td>Categorized emoji groups.</td><td><span class="kbd">emoji</span> see <a href="30.html">NIP-30</a></td></tr>198 <tr><td>Release artifact sets</td><td class="btn">30063</td><td>Group of artifacts of a software release.</td><td><span class="kbd">e</span> kind:1063 <a href="94.html">file metadata</a> events - <span class="kbd">a</span> software application event</td></tr>199 <tr><td>App curation sets</td><td class="btn">30267</td><td>References to multiple software applications.</td><td><span class="kbd">a</span> software application event</td></tr>200 <tr><td>Calendar</td><td class="btn">31924</td><td>A set of events categorized in any way.</td><td><span class="kbd">a</span> calendar event (see <a href="52.html">NIP-52</a>)</td></tr>201 <tr><td>Starter packs</td><td class="btn">39089</td><td>A named set of profiles to be shared around, with the goal of being followed together.</td><td><span class="kbd">p</span> pubkeys</td></tr>202 <tr><td>Media starter packs</td><td class="btn">39092</td><td>Same as starter packs, but specific to multimedia (photos, short video) clients.</td><td><span class="kbd">p</span> pubkeys</td></tr>203 </table></div>204205 <h2 class="bar" id="deprecated"><span class="num">5</span> Deprecated Standard Lists</h2>206 <p>Some clients used the rows below in the past. They should transition to the standard list kinds in section 3.</p>207 <div class="box warn">208 <span class="tag">Warning!</span>209 <p>Do not create new lists with these kind + <code>d</code> tag combinations. Read them only for backward compatibility. Write the replacement kind instead.</p>210 </div>211 <div class="tscroll"><table class="ref">212 <caption>Deprecated kind + d-tag combinations</caption>213 <tr><th>Kind</th><th><code>d</code> tag</th><th>Use instead</th></tr>214 <tr><td class="btn">30000</td><td><span class="kbd">mute</span></td><td>Kind 10000 <em>mute list</em>.</td></tr>215 <tr><td class="btn">30001</td><td><span class="kbd">pin</span></td><td>Kind 10001 <em>pin list</em>.</td></tr>216 <tr><td class="btn">30001</td><td><span class="kbd">bookmark</span></td><td>Kind 10003 <em>bookmarks list</em>.</td></tr>217 <tr><td class="btn">30001</td><td><span class="kbd">communities</span></td><td>Kind 10004 <em>communities list</em>.</td></tr>218 </table></div>219220 <div class="box tech">221 <span class="tag">Tech Note</span>222 <p>The mute list example in the source spec carries a ciphertext that ends in <code>?iv=…</code>. That marks it as legacy <a href="04.html">NIP-04</a> encryption, which the same spec deprecates. New events must use <a href="44.html">NIP-44</a>; the example survives only to show the backward-compatibility detection. Also note the standard list table is not fully sorted: kinds 10017, 10018, 10054, and 10064 appear after 10101/10102 in the source. The order carries no meaning.</p>223 </div>224225 <h2 class="bar" id="examples"><span class="num">6</span> Worked Examples</h2>226 <p>Four real list events follow. The first is a standard list with mixed public and private items. The other three are sets.</p>227228 <h3>A mute list with public and encrypted items</h3>229 <p>Two muted pubkeys are public tags. More items hide inside <code>content</code>. Only the author can decrypt them.</p>230 <div class="crt">231 <div class="titlebar">Event - kind 10000 mute list</div>232<pre>{233 <span class="k">"id"</span>: <span class="s">"a92a316b75e44cfd…8beebcd0"</span>,234 <span class="k">"pubkey"</span>: <span class="s">"854043ae8f1f9743…2750ae4cb"</span>,235 <span class="k">"created_at"</span>: 1699597889,236 <span class="k">"kind"</span>: 10000,237 <span class="k">"tags"</span>: [238 [<span class="s">"p"</span>, <span class="s">"07caba282f764419…cdc1da3a9"</span>],239 [<span class="s">"p"</span>, <span class="s">"a55c15f5e41d5aeb…4fd18dcc4"</span>]240 ],241 <span class="k">"content"</span>: <span class="s">"TJob1dQrf2ndsmdbeGU+05HT5GMnBSx3fx8QdDY/g3NvCa7klfzgaQCmRZuo1d3W…242 …4vYFsq35BeZl4v1Cse7n2htZicVkItMz3wjzj1q1I1VqbnorNXFgllkRZn4/243 YXfTG/RMnoK/bDogRapOV+XToZ+IvsN0BqwKSUDx+ydKpci6htDRF2WDRkU+244 VQMqwM0CoLzy2H6A2cqyMMMD9SLRRzBg==?iv=S3rFeFr1gsYqmQA7bNnNTQ=="</span>,245 <span class="k">"sig"</span>: <span class="s">"1173822c53261f8c…853dba6ca"</span>246}247<span class="c">-- the "?iv=" suffix marks legacy NIP-04 ciphertext; new events use NIP-44 --</span></pre>248 </div>249250 <h3>A curation set of articles and notes about yaks</h3>251 <p>A kind 30004 set. The <code>d</code> tag makes it addressable. The <code>title</code>, <code>image</code>, and <code>description</code> tags feed the UI.</p>252 <div class="crt">253 <div class="titlebar">Event - kind 30004 curation set</div>254<pre>{255 <span class="k">"id"</span>: <span class="s">"567b41fc9060c758…4dd220ef"</span>,256 <span class="k">"pubkey"</span>: <span class="s">"d6dc95542e18b8b7…d0593a0c"</span>,257 <span class="k">"created_at"</span>: 1695327657,258 <span class="k">"kind"</span>: 30004,259 <span class="k">"tags"</span>: [260 [<span class="s">"d"</span>, <span class="s">"jvdy9i4"</span>],261 [<span class="s">"title"</span>, <span class="s">"Yaks"</span>],262 [<span class="s">"image"</span>, <span class="s">"https://cdn.britannica.com/40/…/Yak-Himalayas-Nepal.jpg"</span>],263 [<span class="s">"description"</span>, <span class="s">"The domestic yak, also known as the Tartary ox, …"</span>],264 [<span class="s">"a"</span>, <span class="s">"30023:26dc95542e18b8b7…d0593a0c:95ODQzw3ajNoZ8SyMDOzQ"</span>],265 [<span class="s">"a"</span>, <span class="s">"30023:54af95542e18b8b7…d0593a0c:1-MYP8dAhramH9J5gJWKx"</span>],266 [<span class="s">"a"</span>, <span class="s">"30023:f8fe95542e18b8b7…d0593a0c:D2Tbd38bGrFvU0bIbvSMt"</span>],267 [<span class="s">"e"</span>, <span class="s">"d78ba0d5dce22bff…326b4941e"</span>]268 ],269 <span class="k">"content"</span>: <span class="s">""</span>,270 <span class="k">"sig"</span>: <span class="s">"a9a4e2192eede77e…1294a96bd"</span>271}</pre>272 </div>273274 <h3>A release artifact set of an example app</h3>275 <p>A kind 30063 set. Each <code>e</code> tag points to one <a href="94.html">kind 1063 file metadata</a> event. The <code>a</code> tag points to the parent software application event.</p>276 <div class="crt">277 <div class="titlebar">Event - kind 30063 release artifact set</div>278<pre>{279 <span class="k">"id"</span>: <span class="s">"567b41fc9060c758…4dd220ef"</span>,280 <span class="k">"pubkey"</span>: <span class="s">"d6dc95542e18b8b7…d0593a0c"</span>,281 <span class="k">"created_at"</span>: 1695327657,282 <span class="k">"kind"</span>: 30063,283 <span class="k">"content"</span>: <span class="s">"Release notes in markdown"</span>,284 <span class="k">"tags"</span>: [285 [<span class="s">"d"</span>, <span class="s">"com.example.app@0.0.1"</span>],286 [<span class="s">"e"</span>, <span class="s">"d78ba0d5dce22bff…326b4941e"</span>], <span class="c">// Windows exe</span>287 [<span class="s">"e"</span>, <span class="s">"f27e2c91051de0c4…ed78bae996c9e"</span>], <span class="c">// MacOS dmg</span>288 [<span class="s">"e"</span>, <span class="s">"9d24ddfab95ba3ff…04aad02332"</span>], <span class="c">// Linux AppImage</span>289 [<span class="s">"e"</span>, <span class="s">"340e0326b340e032…b49ed78ba"</span>], <span class="c">// PWA</span>290 [<span class="s">"a"</span>, <span class="s">"32267:d6dc95542e18b8b7…d0593a0c:com.example.app"</span>] <span class="c">// parent software application</span>291 ],292 <span class="k">"sig"</span>: <span class="s">"a9a4e2192eede77e…1294a96bd"</span>293}</pre>294 </div>295296 <h3>An app curation set</h3>297 <p>A kind 30267 set. Each <code>a</code> tag references one kind 32267 software application event.</p>298 <div class="crt">299 <div class="titlebar">Event - kind 30267 app curation set</div>300<pre>{301 <span class="k">"id"</span>: <span class="s">"d8037fa866eb5acd…2b431b611"</span>,302 <span class="k">"pubkey"</span>: <span class="s">"78ce6faa72264387…f026307d"</span>,303 <span class="k">"sig"</span>: <span class="s">"c1ce0a04521c020a…fae863d95"</span>,304 <span class="k">"kind"</span>: 30267,305 <span class="k">"created_at"</span>: 1729302793,306 <span class="k">"content"</span>: <span class="s">"My nostr app selection"</span>,307 <span class="k">"tags"</span>: [308 [<span class="s">"d"</span>, <span class="s">"nostr"</span>],309 [<span class="s">"a"</span>, <span class="s">"32267:7579076d9aff0a4c…1bbfcb19:com.example.app1"</span>],310 [<span class="s">"a"</span>, <span class="s">"32267:045f2486c7e5d8bc…9aff0a4cfdefa7e2:net.example.app2"</span>],311 [<span class="s">"a"</span>, <span class="s">"32267:264387284e647ba6…725737e55130:pl.code.app3"</span>]312 ]313}</pre>314 </div>315316 <h2 class="bar" id="history"><span class="num">7</span> Version History</h2>317 <p>NIP-51 grows whenever the network invents a new thing worth collecting. It started as a family of small list NIPs that merged into one page on day one. Notable changes, newest first:</p>318 <ul class="patchnotes">319 <li><span class="ver">2026</span><span class="when">2026-07</span>Added kind 10011 favorite follow sets; clarified kind 10013 private relays with <a href="37.html">NIP-37</a>.</li>320 <li><span class="ver">2026</span><span class="when">2026-03/05</span>Added Blossom servers (10063), <a href="34.html">NIP-34</a> git authors and repositories (10017, 10018), and <a href="f4.html">NIP-F4</a> podcast lists (10054, 10064). Profile badges moved to kind 10008; badge sets 30008 arrived.</li>321 <li><span class="ver">2025</span><span class="when">2025-08/12</span>Switched private-item encryption to <a href="44.html">NIP-44</a> and deprecated <a href="04.html">NIP-04</a>. Removed hashtag and URL tags from bookmarks. Added picture curation sets (30006); video curation sets (30005) switched to <code>e</code> tags.</li>322 <li><span class="ver">2025</span><span class="when">2025-02/05</span>Added starter packs (39089, 39092), relay feeds (10012), media follows (10020), and the kind 10002 relay list row.</li>323 <li><span class="ver">2024</span><span class="when">2024</span>Added kind mute sets (30007), wiki lists (10101, 10102), simple groups (10009), release artifact sets (30063), app curation sets (30267), and DM relays (10050). "Parameterized replaceable" became "addressable".</li>324 <li><span class="ver">2023</span><span class="when">2023-11</span>The big rewrite: lists split from sets, kind 30001 deprecated, and mute words, blocked relays, search relays, interests, emojis, and more lists added. The append-to-end rule arrived weeks later.</li>325 <li class="minor"><span class="ver">2023</span><span class="when">2023-04/08</span>Typo fixes and an extended kind 30001 description, later removed.</li>326 <li><span class="ver">Origin</span><span class="when">2023-03-09</span>monlovesmango opened NIP-51 "Lists" (<a href="https://github.com/nostr-protocol/nips/pull/183">PR #183</a>). The same day fiatjaf merged the separate 51x list NIPs into this single document.</li>327 </ul>328329 <div class="credits">330 <h3 class="cardhead">Original Proposal - Credits</h3>331 <table>332 <tr><td>Author</td><td>monlovesmango</td></tr>333 <tr><td>First commit</td><td>2023-03-09 — “NIP-51 Lists (#183)”</td></tr>334 <tr><td>Pull request</td><td><a href="https://github.com/nostr-protocol/nips/pull/183">nostr-protocol/nips#183</a></td></tr>335 <tr><td>Status</td><td>draft - optional</td></tr>336 <tr><td>Source</td><td><a href="https://github.com/nostr-protocol/nips/blob/master/51.md">51.md on GitHub</a> - <a href="https://github.com/nostr-protocol/nips/commits/master/51.md">full change history</a></td></tr>337 </table>338 </div>339340 <h2 class="bar"><span class="num">8</span> See Also</h2>341 <ul>342 <li><a href="01.html">NIP-01</a> — replaceable and addressable events; the storage classes lists depend on.</li>343 <li><a href="02.html">NIP-02</a> — the kind 3 follow list, the oldest standard list.</li>344 <li><a href="44.html">NIP-44</a> — the encryption scheme for private list items.</li>345 <li><a href="04.html">NIP-04</a> — the deprecated legacy encryption still found in old lists.</li>346 <li><a href="65.html">NIP-65</a> — the kind 10002 read/write relay list in detail.</li>347 <li><a href="17.html">NIP-17</a> — direct messages and the kind 10050 DM relay list.</li>348 <li><a href="58.html">NIP-58</a> — badges, shown through the kind 10008 profile badges list.</li>349 <li><a href="52.html">NIP-52</a> — calendar events, collected by the kind 31924 calendar set.</li>350 </ul>351 </div>352353 <aside>354 <div class="cartridge">355 <div class="inner">356 <h3 class="cardhead">Spec Card</h3>357 <div class="lights"><span class="led on"></span><span class="led on"></span><span class="led on"></span></div>358 <dl>359 <dt>Status</dt><dd><span class="chip draft">draft</span><span class="chip">optional</span></dd>360 <dt>Defines</dt><dd>25 standard lists - 15 set kinds - private items in content</dd>361 <dt>Kinds</dt><dd>3, 10000–10102, 30000–39092</dd>362 <dt>Requires</dt><dd><a href="01.html">NIP-01</a> - <a href="44.html">NIP-44</a></dd>363 <dt>Crypto</dt><dd>NIP-44 v2 (NIP-04 legacy read-only)</dd>364 <dt>First commit</dt><dd>2023-03-09</dd>365 <dt>Last updated</dt><dd>2026-07-15</dd>366 </dl>367 </div>368 </div>369 </aside>370 </main>371372 <nav class="navbtns">373 <a href="50.html">◀ NIP-50: Search Capability</a>374 <a href="52.html">NIP-52: Calendar Events ▶</a>375 </nav>376377 <footer class="pagefoot">378 <a href="../index.html">Nostr Protocol Manual</a>379 <span class="pageno">NIP 51 / F4</span>380 </footer>381</div>382383<script src="../assets/webmcp.js" defer></script>384</body>385</html>