Home

Awesome

NIPs

NIPs stand for Nostr Implementation Possibilities.

They exist to document what may be implemented by Nostr-compatible relay and client software.



List

Event Kinds

kinddescriptionNIP
0User Metadata01
1Short Text Note01
2Recommend Relay01 (deprecated)
3Follows02
4Encrypted Direct Messages04
5Event Deletion Request09
6Repost18
7Reaction25
8Badge Award58
9Group Chat Message29
10Group Chat Threaded Reply29
11Group Thread29
12Group Thread Reply29
13Seal59
14Direct Message17
16Generic Repost18
17Reaction to a website25
40Channel Creation28
41Channel Metadata28
42Channel Message28
43Channel Hide Message28
44Channel Mute User28
64Chess (PGN)64
818Merge Requests54
1021Bid15
1022Bid confirmation15
1040OpenTimestamps03
1059Gift Wrap59
1063File Metadata94
1311Live Chat Message53
1617Patches34
1621Issues34
1622Replies34
1630-1633Status34
1971Problem Trackernostrocket
1984Reporting56
1985Label32
1986Relay reviews
1987AI Embeddings / Vector listsNKBIP-02
2003Torrent35
2004Torrent Comment35
2022Coinjoin Pooljoinstr
4550Community Post Approval72
5000-5999Job Request90
6000-6999Job Result90
7000Job Feedback90
9000-9030Group Control Events29
9041Zap Goal75
9467Tidal loginTidal-nostr
9734Zap Request57
9735Zap57
9802Highlights84
10000Mute list51
10001Pin list51
10002Relay List Metadata65
10003Bookmark list51
10004Communities list51
10005Public chats list51
10006Blocked relays list51
10007Search relays list51
10009User groups51, 29
10015Interests list51
10030User emoji list51
10050Relay list to receive DMs51, 17
10063User server listblossom
10096File storage server list96
13194Wallet Info47
21000Lightning Pub RPCLightning.Pub
22242Client Authentication42
23194Wallet Request47
23195Wallet Response47
24133Nostr Connect46
24242Blobs stored on mediaserversblossom
27235HTTP Auth98
30000Follow sets51
30001Generic lists51
30002Relay sets51
30003Bookmark sets51
30004Curation sets51
30005Video sets51
30007Kind mute sets51
30008Profile Badges58
30009Badge Definition58
30015Interest sets51
30017Create or update a stall15
30018Create or update a product15
30019Marketplace UI/UX15
30020Product sold as an auction15
30023Long-form Content23
30024Draft Long-form Content23
30030Emoji sets51
30040Modular Article HeaderNKBIP-01
30041Modular Article ContentNKBIP-01
30063Release artifact sets51
30078Application-specific Data78
30311Live Event53
30315User Statuses38
30402Classified Listing99
30403Draft Classified Listing99
30617Repository announcements34
30618Repository state announcements34
30818Wiki article54
30819Redirects54
31890FeedNUD: Custom Feeds
31922Date-Based Calendar Event52
31923Time-Based Calendar Event52
31924Calendar52
31925Calendar Event RSVP52
31989Handler recommendation89
31990Handler information89
34235Video Event71
34236Short-form Portrait Video Event71
34237Video View Event71
34550Community Definition72
39000-9Group metadata events29

Message types

Client to Relay

typedescriptionNIP
EVENTused to publish events01
REQused to request events and subscribe to new updates01
CLOSEused to stop previous subscriptions01
AUTHused to send authentication events42
COUNTused to request event counts45

Relay to Client

typedescriptionNIP
EOSEused to notify clients all stored events have been sent01
EVENTused to send events requested to clients01
NOTICEused to send human-readable messages to clients01
OKused to notify clients if an EVENT was successful01
CLOSEDused to notify clients that a REQ was ended and why01
AUTHused to send authentication challenges42
COUNTused to send requested event counts to clients45

Standardized Tags

namevalueother parametersNIP
eevent id (hex)relay URL, marker, pubkey (hex)01, 10
ppubkey (hex)relay URL, petname01, 02
acoordinates to an eventrelay URL01
didentifier--01
-----70
ggeohash--52
hgroup id--29
iexternal identityproof, url hint39, 73
kkind number (string)--18, 25, 72
llabel, label namespace--32
Llabel namespace--32
mMIME type--94
qevent id (hex)relay URL18
ra reference (URL, etc)--24, 25
rrelay urlmarker65
thashtag--24
altsummary--31
amountmillisatoshis, stringified--57
bolt11bolt11 invoice--57
challengechallenge string--42
clientname, addressrelay URL89
clonegit clone URL--34
content-warningreason--36
delegationpubkey, conditions, delegation token--26
descriptiondescription--34, 57, 58
emojishortcode, image URL--30
encrypted----90
expirationunix timestamp (string)--40
goalevent id (hex)relay URL75
imageimage URLdimensions in pixels23, 52, 58
imetainline metadata--92
lnurlbech32 encoded lnurl--57
locationlocation string--52, 99
namename--34, 58, 72
noncerandomdifficulty13
preimagehash of bolt11 invoice--57
pricepricecurrency, frequency99
proxyexternal IDprotocol48
published_atunix timestamp (string)--23
relayrelay url--42, 17
relaysrelay list--57
serverfile storage server url--96
subjectsubject--14, 17
summarysummary--23, 52
thumbbadge thumbnaildimensions in pixels58
titlearticle title--23
webwebpage URL--34
zappubkey (hex), relay URLweight57

Please update these lists when proposing new NIPs.

Criteria for acceptance of NIPs

  1. They should be fully implemented in at least two clients and one relay -- when applicable.
  2. They should make sense.
  3. They should be optional and backwards-compatible: care must be taken such that clients and relays that choose to not implement them do not stop working when interacting with the ones that choose to.
  4. There should be no more than one way of doing the same thing.
  5. Other rules will be made up when necessary.

Is this repository a centralizing factor?

To promote interoperability, we standards that everybody can follow, and we need them to define a single way of doing each thing without ever hurting backwards-compatibility, and for that purpose there is no way around getting everybody to agree on the same thing and keep a centralized index of these standards. However the fact that such index exists doesn't hurt the decentralization of Nostr. At any point the central index can be challenged if it is failing to fulfill the needs of the protocol and it can migrate to other places and be maintained by other people.

It can even fork into multiple and then some clients would go one way, others would go another way, and some clients would adhere to both competing standards. This would hurt the simplicity, openness and interoperability of Nostr a little, but everything would still work in the short term.

There is a list of notable Nostr software developers who have commit access to this repository, but that exists mostly for practical reasons, as by the nature of the thing we're dealing with the repository owner can revoke membership and rewrite history as they want -- and if these actions are unjustified or perceived as bad or evil the community must react.

How this repository works

Standards may emerge in two ways: the first way is that someone starts doing something, then others copy it; the second way is that someone has an idea of a new standard that could benefit multiple clients and the protocol in general without breaking backwards-compatibility and the principle of having a single way of doing things, then they write that idea and submit it to this repository, other interested parties read it and give their feedback, then once most people reasonably agree we codify that in a NIP which client and relay developers that are interested in the feature can proceed to implement.

These two ways of standardizing things are supported by this repository. Although the second is preferred, an effort will be made to codify standards emerged outside this repository into NIPs that can be later referenced and easily understood and implemented by others -- but obviously as in any human system discretion may be applied when standards are considered harmful.

Breaking Changes

Breaking Changes

License

All NIPs are public domain.

Contributors

<a align="center" href="https://github.com/nostr-protocol/nips/graphs/contributors"> <img src="https://contrib.rocks/image?repo=nostr-protocol/nips" /> </a>