1 Overview
Users collect things: people, notes, relays, hashtags, emojis, apps. This NIP defines the list: an event whose tags hold references to those things. A list can point to anything.
There are two families. A standard list is a normal replaceable event. A user has at most one list per kind. A set is an addressable event with a d tag. A user can have many sets per kind, one per d value.
Each item in a list is public or private. Public items live in the event tags array. Private items live in the content field, encrypted with NIP-44. Everyone can read the public items. Only the author can read the private items.
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.
2 Public and Private Items
Public items are normal tags in the event tags array. Private items use a hidden second tags array. Build it like this:
- Collect the private items as a JSON array. It mimics the structure of the event
tagsarray. - Stringify the array.
- Encrypt the string with the NIP-44 scheme. Compute the shared key from the author's own public and private key.
- Store the ciphertext in
event.content.
private_items = [ ["p", "07caba282f76441955b695551c3c5c742e5b9202a3784780f8086fdcdc1da3a9"], ["a", "a55c15f5e41d5aebd236eca5e0142789c5385703f1a7485aa4b38d94fd18dcc4"], ] base64blob = nip44.encrypt(json.encode_to_string(private_items)) event.content = base64blob
An earlier version of this NIP encrypted private items with NIP-04. That method is now deprecated. For backward compatibility, a client can detect the scheme: search the ciphertext for the string "iv". If it is present, decrypt with NIP-04. Otherwise decrypt with NIP-44.
content.3 Standard Lists
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.
For example, the mute list 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.
| Name | Kind | Description | Expected tag items |
|---|---|---|---|
| Follow list | 3 | Microblogging basic follow list, see NIP-02. | p pubkeys, with optional relay hint and petname |
| Mute list | 10000 | Things the user does not want to see in their feeds. | p pubkeys - t hashtags - word lowercase string - e threads |
| Pinned notes | 10001 | Events the user intends to showcase in their profile page. | e kind:1 notes |
| Read/write relays | 10002 | Where a user publishes to and where they expect mentions. | See NIP-65. |
| Bookmarks | 10003 | Uncategorized, "global" list of things a user wants to save. | e kind:1 notes - a kind:30023 articles |
| Communities | 10004 | NIP-72 communities the user belongs to. | a kind:34550 community definitions |
| Public chats | 10005 | NIP-28 chat channels the user is in. | e kind:40 channel definitions |
| Blocked relays | 10006 | Relays clients should never connect to. | relay relay URLs |
| Search relays | 10007 | Relays clients should use when performing search queries. | relay relay URLs |
| Profile badges | 10008 | NIP-58 badges a user has accepted and chosen to display. | a kind:30009 badge definitions and e kind:8 badge awards, and a kind:30008 badge set |
| Simple groups | 10009 | NIP-29 groups the user is in. | group NIP-29 group id + relay URL + optional group name - r for each relay in use |
| Favorite follow sets | 10011 | User favorite follow sets. | a kind:30000 follow set |
| Relay feeds | 10012 | User favorite browsable relays (and relay sets). | relay relay URLs and a kind:30002 relay set |
| Private relays | 10013 | (nip44-encrypted) NIP-37 private relays (drafts). | relay relay URL |
| Interests | 10015 | Topics a user may be interested in and pointers. | t hashtags and a kind:30015 interest set |
| Media follows | 10020 | Multimedia (photos, short video) follow list. | p pubkeys, with optional relay hint and petname |
| Emojis | 10030 | User preferred emojis and pointers to emoji sets. | emoji see NIP-30 - a kind:30030 emoji set |
| DM relays | 10050 | Where to receive NIP-17 direct messages. | relay see NIP-17 |
| Blossom servers | 10063 | Servers where to upload and look for images and other blobs. | server see NIP-B7 |
| Good wiki authors | 10101 | NIP-54 user recommended wiki authors. | p pubkeys |
| Good wiki relays | 10102 | NIP-54 relays deemed to only host useful articles. | relay relay URLs |
| Git authors | 10017 | Code follow list: people who produce NIP-34 events. | p pubkeys, with optional relay hint and petname |
| Git repositories | 10018 | NIP-34 followed repositories. | a kind:30617 repository announcement event |
| Favorite podcasts | 10054 | Podcasts a user wants to bookmark as favorites. | p NIP-F4 podcast pubkeys - url RSS/XML podcast URLs |
| Authored podcasts | 10064 | Podcasts the user authors. | p NIP-F4 podcast pubkeys |
4 Sets
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 d tag identifier.
For example, relay sets can appear in a dropdown UI. The user picks which relays to publish to, or which relays to read replies from. Curation sets let apps showcase curations made by others, tagged to different topics.
Aside from the main d identifier, a set can carry three optional tags that enhance its UI: title, image, and description.
d value.| Name | Kind | Description | Expected tag items |
|---|---|---|---|
| Follow sets | 30000 | Categorized groups of users a client may choose to check out in different circumstances. | p pubkeys |
| Relay sets | 30002 | User-defined relay groups the user can easily pick and choose from during various operations. | relay relay URLs |
| Bookmark sets | 30003 | User-defined bookmark categories, for when bookmarks must be in labeled separate groups. | e kind:1 notes - a kind:30023 articles |
| Curation sets | 30004 | Groups of articles picked by users as interesting and/or belonging to the same category. | a kind:30023 articles - e kind:1 notes |
| Curation sets | 30005 | Groups of videos picked by users as interesting and/or belonging to the same category. | e kind:21 videos |
| Curation sets | 30006 | Groups of pictures picked by users as interesting and/or belonging to the same category. | e kind:20 pictures |
| Kind mute sets | 30007 | Mute pubkeys by kinds. The d tag MUST be the kind string. | p pubkeys |
| Badge sets | 30008 | NIP-58 categorized groups of badges. | a kind:30009 badge definitions and e kind:8 badge awards |
| Interest sets | 30015 | Interest topics represented by a bunch of "hashtags". | t hashtags |
| Emoji sets | 30030 | Categorized emoji groups. | emoji see NIP-30 |
| Release artifact sets | 30063 | Group of artifacts of a software release. | e kind:1063 file metadata events - a software application event |
| App curation sets | 30267 | References to multiple software applications. | a software application event |
| Calendar | 31924 | A set of events categorized in any way. | a calendar event (see NIP-52) |
| Starter packs | 39089 | A named set of profiles to be shared around, with the goal of being followed together. | p pubkeys |
| Media starter packs | 39092 | Same as starter packs, but specific to multimedia (photos, short video) clients. | p pubkeys |
5 Deprecated Standard Lists
Some clients used the rows below in the past. They should transition to the standard list kinds in section 3.
Do not create new lists with these kind + d tag combinations. Read them only for backward compatibility. Write the replacement kind instead.
| Kind | d tag | Use instead |
|---|---|---|
| 30000 | mute | Kind 10000 mute list. |
| 30001 | pin | Kind 10001 pin list. |
| 30001 | bookmark | Kind 10003 bookmarks list. |
| 30001 | communities | Kind 10004 communities list. |
The mute list example in the source spec carries a ciphertext that ends in ?iv=…. That marks it as legacy NIP-04 encryption, which the same spec deprecates. New events must use NIP-44; 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.
6 Worked Examples
Four real list events follow. The first is a standard list with mixed public and private items. The other three are sets.
A mute list with public and encrypted items
Two muted pubkeys are public tags. More items hide inside content. Only the author can decrypt them.
{
"id": "a92a316b75e44cfd…8beebcd0",
"pubkey": "854043ae8f1f9743…2750ae4cb",
"created_at": 1699597889,
"kind": 10000,
"tags": [
["p", "07caba282f764419…cdc1da3a9"],
["p", "a55c15f5e41d5aeb…4fd18dcc4"]
],
"content": "TJob1dQrf2ndsmdbeGU+05HT5GMnBSx3fx8QdDY/g3NvCa7klfzgaQCmRZuo1d3W…
…4vYFsq35BeZl4v1Cse7n2htZicVkItMz3wjzj1q1I1VqbnorNXFgllkRZn4/
YXfTG/RMnoK/bDogRapOV+XToZ+IvsN0BqwKSUDx+ydKpci6htDRF2WDRkU+
VQMqwM0CoLzy2H6A2cqyMMMD9SLRRzBg==?iv=S3rFeFr1gsYqmQA7bNnNTQ==",
"sig": "1173822c53261f8c…853dba6ca"
}
-- the "?iv=" suffix marks legacy NIP-04 ciphertext; new events use NIP-44 --
A curation set of articles and notes about yaks
A kind 30004 set. The d tag makes it addressable. The title, image, and description tags feed the UI.
{
"id": "567b41fc9060c758…4dd220ef",
"pubkey": "d6dc95542e18b8b7…d0593a0c",
"created_at": 1695327657,
"kind": 30004,
"tags": [
["d", "jvdy9i4"],
["title", "Yaks"],
["image", "https://cdn.britannica.com/40/…/Yak-Himalayas-Nepal.jpg"],
["description", "The domestic yak, also known as the Tartary ox, …"],
["a", "30023:26dc95542e18b8b7…d0593a0c:95ODQzw3ajNoZ8SyMDOzQ"],
["a", "30023:54af95542e18b8b7…d0593a0c:1-MYP8dAhramH9J5gJWKx"],
["a", "30023:f8fe95542e18b8b7…d0593a0c:D2Tbd38bGrFvU0bIbvSMt"],
["e", "d78ba0d5dce22bff…326b4941e"]
],
"content": "",
"sig": "a9a4e2192eede77e…1294a96bd"
}
A release artifact set of an example app
A kind 30063 set. Each e tag points to one kind 1063 file metadata event. The a tag points to the parent software application event.
{
"id": "567b41fc9060c758…4dd220ef",
"pubkey": "d6dc95542e18b8b7…d0593a0c",
"created_at": 1695327657,
"kind": 30063,
"content": "Release notes in markdown",
"tags": [
["d", "com.example.app@0.0.1"],
["e", "d78ba0d5dce22bff…326b4941e"], // Windows exe
["e", "f27e2c91051de0c4…ed78bae996c9e"], // MacOS dmg
["e", "9d24ddfab95ba3ff…04aad02332"], // Linux AppImage
["e", "340e0326b340e032…b49ed78ba"], // PWA
["a", "32267:d6dc95542e18b8b7…d0593a0c:com.example.app"] // parent software application
],
"sig": "a9a4e2192eede77e…1294a96bd"
}
An app curation set
A kind 30267 set. Each a tag references one kind 32267 software application event.
{
"id": "d8037fa866eb5acd…2b431b611",
"pubkey": "78ce6faa72264387…f026307d",
"sig": "c1ce0a04521c020a…fae863d95",
"kind": 30267,
"created_at": 1729302793,
"content": "My nostr app selection",
"tags": [
["d", "nostr"],
["a", "32267:7579076d9aff0a4c…1bbfcb19:com.example.app1"],
["a", "32267:045f2486c7e5d8bc…9aff0a4cfdefa7e2:net.example.app2"],
["a", "32267:264387284e647ba6…725737e55130:pl.code.app3"]
]
}
7 Version History
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:
- 20262026-07Added kind 10011 favorite follow sets; clarified kind 10013 private relays with NIP-37.
- 20262026-03/05Added Blossom servers (10063), NIP-34 git authors and repositories (10017, 10018), and NIP-F4 podcast lists (10054, 10064). Profile badges moved to kind 10008; badge sets 30008 arrived.
- 20252025-08/12Switched private-item encryption to NIP-44 and deprecated NIP-04. Removed hashtag and URL tags from bookmarks. Added picture curation sets (30006); video curation sets (30005) switched to
etags. - 20252025-02/05Added starter packs (39089, 39092), relay feeds (10012), media follows (10020), and the kind 10002 relay list row.
- 20242024Added 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".
- 20232023-11The 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.
- 20232023-04/08Typo fixes and an extended kind 30001 description, later removed.
- Origin2023-03-09monlovesmango opened NIP-51 "Lists" (PR #183). The same day fiatjaf merged the separate 51x list NIPs into this single document.
Original Proposal - Credits
| Author | monlovesmango |
| First commit | 2023-03-09 — “NIP-51 Lists (#183)” |
| Pull request | nostr-protocol/nips#183 |
| Status | draft - optional |
| Source | 51.md on GitHub - full change history |
8 See Also
- NIP-01 — replaceable and addressable events; the storage classes lists depend on.
- NIP-02 — the kind 3 follow list, the oldest standard list.
- NIP-44 — the encryption scheme for private list items.
- NIP-04 — the deprecated legacy encryption still found in old lists.
- NIP-65 — the kind 10002 read/write relay list in detail.
- NIP-17 — direct messages and the kind 10050 DM relay list.
- NIP-58 — badges, shown through the kind 10008 profile badges list.
- NIP-52 — calendar events, collected by the kind 31924 calendar set.