Dec 18, 2025

laantungir/nips README

README documentation for laantungir/nips

NIPs

NIPs stand for Nostr Implementation Possibilities.

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



List

  • --- unrecommended: deprecated in favor of
  • --- unrecommended: deprecated in favor of
  • --- unrecommended: adds unnecessary burden for little gain
  • --- unrecommended: replaced by blossom APIs
  • --- unrecommended: superseded by the Marmot Protocol

Event Kinds

kinddescriptionNIP
0User Metadata
1Short Text Note
2Recommend Relay01 (deprecated)
3Follows
4Encrypted Direct Messages
5Event Deletion Request
6Repost
7Reaction
8Badge Award
9Chat Message
10Group Chat Threaded Reply29 (deprecated)
11Thread
12Group Thread Reply29 (deprecated)
13Seal
14Direct Message
15File Message
16Generic Repost
17Reaction to a website
20Picture
21Video Event
22Short-form Portrait Video Event
30internal referenceNKBIP-03
31external web referenceNKBIP-03
32hardcopy referenceNKBIP-03
33prompt referenceNKBIP-03
40Channel Creation
41Channel Metadata
42Channel Message
43Channel Hide Message
44Channel Mute User
62Request to Vanish
64Chess (PGN)
443KeyPackage
444Welcome Message
445Group Event
818Merge Requests
1018Poll Response
1021Bid
1022Bid confirmation
1040OpenTimestamps
1059Gift Wrap
1063File Metadata
1068Poll
1111Comment
1222Voice Message
1244Voice Message Comment
1311Live Chat Message
1337Code Snippet
1617Patches
1618Pull Requests
1619Pull Request Updates
1621Issues
1622Git Replies (deprecated)
1630-1633Status
1971Problem Trackernostrocket
1984Reporting
1985Label
1986Relay reviews
1987AI Embeddings / Vector listsNKBIP-02
2003Torrent
2004Torrent Comment
2022Coinjoin Pooljoinstr
4550Community Post Approval
5000-5999Job Request
6000-6999Job Result
7000Job Feedback
7374Reserved Cashu Wallet Tokens
7375Cashu Wallet Tokens
7376Cashu Wallet History
7516Geocache loggeocaching
7517Geocache proof of findgeocaching
8000Add User
8001Remove User
9000-9030Group Control Events
9041Zap Goal
9321Nutzap
9467Tidal loginTidal-nostr
9734Zap Request
9735Zap
9802Highlights
10000Mute list
10001Pin list
10002Relay List Metadata,
10003Bookmark list
10004Communities list
10005Public chats list
10006Blocked relays list
10007Search relays list
10009User groups,
10012Favorite relays list
10013Private event relay list
10015Interests list
10019Nutzap Mint Recommendation
10020Media follows
10030User emoji list
10050Relay list to receive DMs,
10051KeyPackage Relays List
10063User server listBlossom
10096File storage server list (deprecated)
10166Relay Monitor Announcement
10312Room Presence
10377Proxy AnnouncementNostr Epoxy
11111Transport Method AnnouncementNostr Epoxy
13194Wallet Info
13534Membership Lists
14388User Sound Effect ListsCorny Chat
17375Cashu Wallet Event
21000Lightning Pub RPCLightning.Pub
22242Client Authentication
23194Wallet Request
23195Wallet Response
24133Nostr Connect
24242Blobs stored on mediaserversBlossom
27235HTTP Auth
28934Join Request
28935Invite Request
28936Leave Request
30000Follow sets
30001Generic lists51 (deprecated)
30002Relay sets
30003Bookmark sets
30004Curation sets
30005Video sets
30007Kind mute sets
30008Profile Badges
30009Badge Definition
30015Interest sets
30017Create or update a stall
30018Create or update a product
30019Marketplace UI/UX
30020Product sold as an auction
30023Long-form Content
30024Draft Long-form Content
30030Emoji sets
30040Curated Publication IndexNKBIP-01
30041Curated Publication ContentNKBIP-01
30063Release artifact sets
30078Application-specific Data
30166Relay Discovery
30267App curation sets
30311Live Event
30312Interactive Room
30313Conference Event
30315User Statuses
30388Slide SetCorny Chat
30402Classified Listing
30403Draft Classified Listing
30617Repository announcements
30618Repository state announcements
30818Wiki article
30819Redirects
31234Draft Event
31388Link SetCorny Chat
31890FeedNUD: Custom Feeds
31922Date-Based Calendar Event
31923Time-Based Calendar Event
31924Calendar
31925Calendar Event RSVP
31989Handler recommendation
31990Handler information
32267Software Application
32388User Room FavoritesCorny Chat
33388High ScoresCorny Chat
34388Sound EffectsCorny Chat
34550Community Definition
38172Cashu Mint Announcement
38173Fedimint Announcement
37516Geocache listing
38383Peer-to-peer Order events
39000-9Group metadata events
39089Starter packs
39092Media starter packs
39701Web bookmarks

Message types

Client to Relay

typedescriptionNIP
EVENTused to publish events
REQused to request events and subscribe to new updates
CLOSEused to stop previous subscriptions
AUTHused to send authentication events
COUNTused to request event counts

Relay to Client

typedescriptionNIP
EOSEused to notify clients all stored events have been sent
EVENTused to send events requested to clients
NOTICEused to send human-readable messages to clients
OKused to notify clients if an EVENT was successful
CLOSEDused to notify clients that a REQ was ended and why
AUTHused to send authentication challenges
COUNTused to send requested event counts to clients

Common Tags

namevalueother parametersNIP
acoordinates to an eventrelay URL
Aroot addressrelay URL
ccommit id
didentifier--
eevent id (hex)relay URL, marker, pubkey (hex),
Eroot event idrelay URL
fcurrency code--
ggeohash--
hgroup id--
iexternal identityproof, url hint, ,
Iroot external identity--
kkind--, , ,
Kroot scope--
llabel, label namespace, language name--,
Llabel namespace--
mMIME type--
ppubkey (hex)relay URL, petname, ,
Ppubkey (hex)--,
qevent id (hex)relay URL, pubkey (hex)
ra reference (URL, etc)--,
rrelay urlmarker
sstatus--
thashtag--, ,
uurl--,
xhash--,
yplatform--
zorder number--
-----
altsummary--
amountmillisatoshis, stringified--
bolt11bolt11 invoice--
branch-namebranch name suggestion--
challengechallenge string--
clientname, addressrelay URL
clonegit clone URL--
content-warningreason--
delegationpubkey, conditions, delegation token--
depRequired dependency--
descriptiondescription--, , ,
emojishortcode, image URL--
encrypted----
extensionFile extension--
expirationunix timestamp (string)--
filefull path (string)--
goalevent id (hex)relay URL
merge-basecommit id
HEADref: refs/heads/<branch-name>
imageimage URLdimensions in pixels, ,
imetainline metadata--
licenseLicense of the shared content--
lnurlbech32 encoded lnurl--
locationlocation string--,
namename--, , ,
noncerandomdifficulty
preimagehash of bolt11 invoice--
pricepricecurrency, frequency
proxyexternal IDprotocol
published_atunix timestamp (string)--,
relayrelay url--,
relaysrelay list--
repoReference to the origin repository--
runtimeRuntime or environment specification--
serverfile storage server url--
soundshortcode, sound url, image url--
subjectsubject--, ,
summarysummary--,
thumbbadge thumbnaildimensions in pixels
titletitle--,
trackertorrent tracker URL--
webwebpage URL--
zappubkey (hex), relay URLweight

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 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.

Contributors