NIPs
NIPs stand for Nostr Implementation Possibilities.
They exist to document what may be implemented by Nostr-compatible relay and client software.
List
NIP-04: Encrypted Direct Message --- unrecommended: deprecated in favor of NIP-17
NIP-05: Mapping Nostr keys to DNS-based internet identifiers
NIP-07:
window.nostrcapability for web browsersNIP-08: Handling Mentions --- unrecommended: deprecated in favor of NIP-27
NIP-21:
nostr:URI schemeNIP-26: Delegated Event Signing --- unrecommended: adds unnecessary burden for little gain
NIP-96: HTTP File Storage Integration --- unrecommended: replaced by blossom APIs
NIP-A0: Voice Messages
NIP-B0: Web Bookmarks
NIP-B7: Blossom
NIP-C0: Code Snippets
NIP-C7: Chats
Event Kinds
kinddescriptionNIP0User Metadata011Short Text Note102Recommend Relay01 (deprecated)3Follows024Encrypted Direct Messages045Event Deletion Request096Repost187Reaction258Badge Award589Chat MessageC710Group Chat Threaded Reply29 (deprecated)11Thread7D12Group Thread Reply29 (deprecated)13Seal5914Direct Message1715File Message1716Generic Repost1817Reaction to a website2520Picture6821Video Event7122Short-form Portrait Video Event7130internal referenceNKBIP-0331external web referenceNKBIP-0332hardcopy referenceNKBIP-0333prompt referenceNKBIP-0340Channel Creation2841Channel Metadata2842Channel Message2843Channel Hide Message2844Channel Mute User2862Request to Vanish6264Chess (PGN)64443KeyPackageEE444Welcome MessageEE445Group EventEE818Merge Requests541018Poll Response881021Bid151022Bid confirmation151040OpenTimestamps031059Gift Wrap591063File Metadata941068Poll881111Comment221222Voice MessageA01244Voice Message CommentA01311Live Chat Message531337Code SnippetC01617Patches341618Pull Requests341619Pull Request Updates341621Issues341622Git Replies (deprecated)341630-1633Status341971Problem Trackernostrocket1984Reporting561985Label321986Relay reviews1987AI Embeddings / Vector listsNKBIP-022003Torrent352004Torrent Comment352022Coinjoin Pooljoinstr4550Community Post Approval725000-5999Job Request906000-6999Job Result907000Job Feedback907374Reserved Cashu Wallet Tokens607375Cashu Wallet Tokens607376Cashu Wallet History607516Geocache loggeocaching7517Geocache proof of findgeocaching8000Add User438001Remove User439000-9030Group Control Events299041Zap Goal759321Nutzap619467Tidal loginTidal-nostr9734Zap Request579735Zap579802Highlights8410000Mute list5110001Pin list5110002Relay List Metadata65, 5110003Bookmark list5110004Communities list5110005Public chats list5110006Blocked relays list5110007Search relays list5110009User groups51, 2910012Favorite relays list5110013Private event relay list3710015Interests list5110019Nutzap Mint Recommendation6110020Media follows5110030User emoji list5110050Relay list to receive DMs51, 1710051KeyPackage Relays ListEE10063User server listBlossom10096File storage server list96 (deprecated)10166Relay Monitor Announcement6610312Room Presence5310377Proxy AnnouncementNostr Epoxy11111Transport Method AnnouncementNostr Epoxy13194Wallet Info4713534Membership Lists4317375Cashu Wallet Event6021000Lightning Pub RPCLightning.Pub22242Client Authentication4223194Wallet Request4723195Wallet Response4724133Nostr Connect4624242Blobs stored on mediaserversBlossom27235HTTP Auth9828934Join Request4328935Invite Request4328936Leave Request4330000Follow sets5130001Generic lists51 (deprecated)30002Relay sets5130003Bookmark sets5130004Curation sets5130005Video sets5130007Kind mute sets5130008Profile Badges5830009Badge Definition5830015Interest sets5130017Create or update a stall1530018Create or update a product1530019Marketplace UI/UX1530020Product sold as an auction1530023Long-form Content2330024Draft Long-form Content2330030Emoji sets5130040Curated Publication IndexNKBIP-0130041Curated Publication ContentNKBIP-0130063Release artifact sets5130078Application-specific Data7830166Relay Discovery6630267App curation sets5130311Live Event5330312Interactive Room5330313Conference Event5330315User Statuses3830388Slide SetCorny Chat30402Classified Listing9930403Draft Classified Listing9930617Repository announcements3430618Repository state announcements3430818Wiki article5430819Redirects5431234Draft Event3731388Link SetCorny Chat31890FeedNUD: Custom Feeds31922Date-Based Calendar Event5231923Time-Based Calendar Event5231924Calendar5231925Calendar Event RSVP5231989Handler recommendation8931990Handler information8932267Software Application34550Community Definition7238172Cashu Mint Announcement8738173Fedimint Announcement8737516Geocache listinggeocaching38383Peer-to-peer Order events6939000-9Group metadata events2939089Starter packs5139092Media starter packs5139701Web bookmarksB0
Message types
Client to Relay
typedescriptionNIPEVENTused to publish events01REQused to request events and subscribe to new updates01CLOSEused to stop previous subscriptions01AUTHused to send authentication events42COUNTused to request event counts45
Relay to Client
typedescriptionNIPEOSEused to notify clients all stored events have been sent01EVENTused to send events requested to clients01NOTICEused to send human-readable messages to clients01OKused to notify clients if an EVENT was successful01CLOSEDused to notify clients that a REQ was ended and why01AUTHused to send authentication challenges42COUNTused to send requested event counts to clients45
Common Tags
namevalueother parametersNIPacoordinates to an eventrelay URL01Aroot addressrelay URL22ccommit id34didentifier--01eevent id (hex)relay URL, marker, pubkey (hex)01, 10Eroot event idrelay URL22fcurrency code--69ggeohash--52hgroup id--29iexternal identityproof, url hint35, 39, 73Iroot external identity--22kkind--18, 25, 72, 73Kroot scope--22llabel, label namespace, language name--32, C0Llabel namespace--32mMIME type--94ppubkey (hex)relay URL, petname01, 02, 22Ppubkey (hex)--22, 57qevent id (hex)relay URL, pubkey (hex)18ra reference (URL, etc)--24, 25rrelay urlmarker65sstatus--69thashtag--24, 34, 35uurl--61, 98xhash--35, 56yplatform--69zorder number--69-----70altsummary--31amountmillisatoshis, stringified--57bolt11bolt11 invoice--57branch-namebranch name suggestion--34challengechallenge string--42clientname, addressrelay URL89clonegit clone URL--34content-warningreason--36delegationpubkey, conditions, delegation token--26depRequired dependency--C0descriptiondescription--34, 57, 58, C0emojishortcode, image URL--30encrypted----90extensionFile extension--C0expirationunix timestamp (string)--40filefull path (string)--35goalevent id (hex)relay URL75merge-basecommit id34HEADref: refs/heads/<branch-name>34imageimage URLdimensions in pixels23, 52, 58imetainline metadata--92licenseLicense of the shared content--C0lnurlbech32 encoded lnurl--57locationlocation string--52, 99namename--34, 58, 72, C0noncerandomdifficulty13preimagehash of bolt11 invoice--57pricepricecurrency, frequency99proxyexternal IDprotocol48published_atunix timestamp (string)--23, B0relayrelay url--42, 17relaysrelay list--57repoReference to the origin repository--C0runtimeRuntime or environment specification--C0serverfile storage server url--96subjectsubject--14, 17, 34summarysummary--23, 52thumbbadge thumbnaildimensions in pixels58titletitle--23, B0trackertorrent tracker URL--35webwebpage URL--34zappubkey (hex), relay URLweight57
Please update these lists when proposing new NIPs.
Criteria for acceptance of NIPs
They should be fully implemented in at least two clients and one relay -- when applicable.
They should make sense.
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.
There should be no more than one way of doing the same thing.
Other rules will be made up when necessary.
Is this repository a centralizing factor?
To promote interoperability, we need 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 an 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 versions, 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.
License
All NIPs are public domain.