Nostr Implementation Possibilities
Go to file
2024-07-17 09:57:27 +01:00
01.md More precisely document since/until bounds. (#1284) 2024-07-06 01:31:23 +09:00
02.md small nitpicks 2024-05-28 10:13:12 -03:00
03.md NIP-03: explain why a single attestation is recommended. 2023-11-18 08:22:42 -03:00
04.md NIP-17 (old 24) Sealed Gift-Wrapped Messages for Private DMs and Small Group Chats (#686) 2024-04-24 16:31:45 -03:00
05.md "user metadata" and fix table on readme. 2024-06-17 12:38:57 -03:00
06.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
07.md Merge pull request #518 from vivganes/patch-2 2024-07-15 09:50:25 -07:00
08.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
09.md NIP-09: clarify "a" tag deletions 2024-06-07 12:37:29 -05:00
10.md pubkey on e tags 2024-05-20 17:26:56 -03:00
11.md NIP-17 (old 24) Sealed Gift-Wrapped Messages for Private DMs and Small Group Chats (#686) 2024-04-24 16:31:45 -03:00
12.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
13.md Fix of otherwise unverifiable event 2024-05-24 16:20:25 +02:00
14.md reformat a bunch of json things and small nitpicks. 2023-11-18 09:13:12 -03:00
15.md Fix some minor nitpicks in NIP-15 and NIP-51 2024-01-16 12:37:47 -03:00
16.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
17.md nip17: relay considerations and implementation details. 2024-04-24 20:46:39 -03:00
18.md Use q instead of e tags for quote reposts 2024-02-22 11:40:58 -08:00
19.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
20.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
21.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
23.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
24.md NIP-24: fix missing rename 2024-06-13 21:02:35 +09:00
25.md Revert "Simplifying reactions" 2024-06-06 08:57:41 -03:00
26.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
27.md NIP-27: fix broken link, use njump 2024-07-03 15:51:20 -03:00
28.md NIP-28: simplify and fix kind 41 2024-06-21 12:52:26 +09:00
29.md nip29: create-group event kind. 2024-07-04 09:57:40 -03:00
30.md NIP-30: add supported kinds 2024-01-25 22:52:13 +09:00
31.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
32.md Merge pull request #1129 from coracle-social/relax-nip32 2024-06-07 11:37:04 -05:00
33.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
34.md all: minor spelling fixes 2024-05-11 11:52:32 -05:00
35.md update tag keys 2024-05-16 15:28:08 +01:00
36.md reformat a bunch of json things and small nitpicks. 2023-11-18 09:13:12 -03:00
38.md NIP-38: move description of content to Live Statuses section 2024-05-29 13:08:31 +09:00
39.md remove pgp identity from NIP-39 temporarily 2024-02-15 01:32:38 +03:00
40.md reformat a bunch of json things and small nitpicks. 2023-11-18 09:13:12 -03:00
42.md nip-42 phrasing. 2023-12-07 21:18:45 -03:00
44.md fix typo 44.md 2024-01-06 09:47:07 +08:00
45.md CLOSED messages for relays that want to reject REQs and NIP-42 AUTH integration (#902) 2023-12-06 12:01:27 -03:00
46.md all: minor spelling fixes 2024-05-11 11:52:32 -05:00
47.md Fix connection string protocol description. (#1243) 2024-05-18 04:02:21 +09:00
48.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
49.md NIP-46, NIP-49, NIP-65: fix typos 2024-02-22 09:50:12 -03:00
50.md Update 50.md 2024-06-07 11:53:06 -04:00
51.md NIP-54: decentralized wikis (#787) 2024-05-02 11:04:55 -03:00
52.md use jsonc in some places. 2024-01-21 16:08:45 -03:00
53.md small nitpicks 2024-05-28 10:13:12 -03:00
54.md nip54: clarify wikilink format. 2024-05-25 09:46:46 -03:00
55.md fix broken nip number. 2024-06-05 15:24:43 -03:00
56.md fixed typo 2024-05-01 23:29:14 -03:00
57.md NIP-57: Clarify description tag 2024-06-07 18:44:33 -03:00
58.md NIP-58: minor JSON fix 2024-04-03 13:09:22 +09:00
59.md Add missing comma in the example gift wrap JSON for NIP-59 2024-05-17 08:13:02 -04:00
60.md move over p2pk appendix 2024-07-17 09:57:27 +01:00
61.md move over p2pk appendix 2024-07-17 09:57:27 +01:00
65.md NIP-65: fix typo 2024-07-11 18:35:12 -03:00
70.md relay-based event access-control with the ["-"] tag (#1030) 2024-07-10 09:00:26 -03:00
71.md NIP-71: remove aes-256-gcm tag 2024-05-24 22:02:13 -03:00
72.md all: minor spelling fixes 2024-05-11 11:52:32 -05:00
75.md [NIP-75] add optional 'image' and 'summary' tags (#890) 2023-11-23 19:17:28 +01:00
78.md remove all NIP authors. 2023-11-16 10:24:53 -03:00
84.md reformat a bunch of json things and small nitpicks. 2023-11-18 09:13:12 -03:00
89.md NIP-89: fix REQ examples 2024-06-25 12:17:39 -03:00
90.md nip90: fix links 2024-05-11 12:41:23 -05:00
92.md NIP-92: Clarify that imeta tag can be ignored 2024-02-23 12:26:19 -03:00
94.md Add imeta tag 2024-02-01 13:09:24 -08:00
96.md update list response 2024-05-29 14:26:00 +01:00
98.md Fix Authorization header string 2023-12-08 13:19:54 -03:00
99.md Add status to nip 99 2024-02-05 11:48:25 -03:00
BREAKING.md BREAKING.md: add changes 2024-06-09 23:19:04 +09:00
README.md README: add NIP-70 and "-" tag 2024-07-10 22:40:44 +09:00

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

kind description NIP
0 User Metadata 01
1 Short Text Note 01
2 Recommend Relay 01 (deprecated)
3 Follows 02
4 Encrypted Direct Messages 04
5 Event Deletion 09
6 Repost 18
7 Reaction 25
8 Badge Award 58
9 Group Chat Message 29
10 Group Chat Threaded Reply 29
11 Group Thread 29
12 Group Thread Reply 29
13 Seal 59
14 Direct Message 17
16 Generic Repost 18
40 Channel Creation 28
41 Channel Metadata 28
42 Channel Message 28
43 Channel Hide Message 28
44 Channel Mute User 28
818 Merge Requests 54
1021 Bid 15
1022 Bid confirmation 15
1040 OpenTimestamps 03
1059 Gift Wrap 59
1063 File Metadata 94
1311 Live Chat Message 53
1617 Patches 34
1621 Issues 34
1622 Replies 34
1630-1633 Status 34
1971 Problem Tracker nostrocket
1984 Reporting 56
1985 Label 32
2003 Torrent 35
2004 Torrent Comment 35
2022 Coinjoin Pool joinstr
4550 Community Post Approval 72
5000-5999 Job Request 90
6000-6999 Job Result 90
7000 Job Feedback 90
9000-9030 Group Control Events 29
9041 Zap Goal 75
9734 Zap Request 57
9735 Zap 57
9802 Highlights 84
10000 Mute list 51
10001 Pin list 51
10002 Relay List Metadata 65
10003 Bookmark list 51
10004 Communities list 51
10005 Public chats list 51
10006 Blocked relays list 51
10007 Search relays list 51
10009 User groups 51, 29
10015 Interests list 51
10030 User emoji list 51
10050 Relay list to receive DMs 17
10096 File storage server list 96
13194 Wallet Info 47
21000 Lightning Pub RPC Lightning.Pub
22242 Client Authentication 42
23194 Wallet Request 47
23195 Wallet Response 47
24133 Nostr Connect 46
27235 HTTP Auth 98
30000 Follow sets 51
30001 Generic lists 51
30002 Relay sets 51
30003 Bookmark sets 51
30004 Curation sets 51
30005 Video sets 51
30008 Profile Badges 58
30009 Badge Definition 58
30015 Interest sets 51
30017 Create or update a stall 15
30018 Create or update a product 15
30019 Marketplace UI/UX 15
30020 Product sold as an auction 15
30023 Long-form Content 23
30024 Draft Long-form Content 23
30030 Emoji sets 51
30063 Release artifact sets 51
30078 Application-specific Data 78
30311 Live Event 53
30315 User Statuses 38
30402 Classified Listing 99
30403 Draft Classified Listing 99
30617 Repository announcements 34
30818 Wiki article 54
30819 Redirects 54
31890 Feed NUD: Custom Feeds
31922 Date-Based Calendar Event 52
31923 Time-Based Calendar Event 52
31924 Calendar 52
31925 Calendar Event RSVP 52
31989 Handler recommendation 89
31990 Handler information 89
34235 Video Event 71
34236 Short-form Portrait Video Event 71
34237 Video View Event 71
34550 Community Definition 72
39000-9 Group metadata events 29

Message types

Client to Relay

type description NIP
EVENT used to publish events 01
REQ used to request events and subscribe to new updates 01
CLOSE used to stop previous subscriptions 01
AUTH used to send authentication events 42
COUNT used to request event counts 45

Relay to Client

type description NIP
EOSE used to notify clients all stored events have been sent 01
EVENT used to send events requested to clients 01
NOTICE used to send human-readable messages to clients 01
OK used to notify clients if an EVENT was successful 01
CLOSED used to notify clients that a REQ was ended and why 01
AUTH used to send authentication challenges 42
COUNT used to send requested event counts to clients 45

Standardized Tags

name value other parameters NIP
e event id (hex) relay URL, marker, pubkey (hex) 01, 10
p pubkey (hex) relay URL, petname 01, 02
a coordinates to an event relay URL 01
d identifier -- 01
- -- -- 70
g geohash -- 52
h group id -- 29
i identity proof 39
k kind number (string) -- 18, 25, 72
l label, label namespace -- 32
L label namespace -- 32
m MIME type -- 94
q event id (hex) relay URL 18
r a reference (URL, etc) petname 24
r relay url marker 65
t hashtag --
alt summary -- 31
amount millisatoshis, stringified -- 57
bolt11 bolt11 invoice -- 57
challenge challenge string -- 42
client name, address relay URL 89
clone git clone URL -- 34
content-warning reason -- 36
delegation pubkey, conditions, delegation token -- 26
description description -- 34, 57, 58
emoji shortcode, image URL -- 30
encrypted -- -- 90
expiration unix timestamp (string) -- 40
goal event id (hex) relay URL 75
image image URL dimensions in pixels 23, 58
imeta inline metadata -- 92
lnurl bech32 encoded lnurl -- 57
location location string -- 52, 99
name name -- 34, 58
nonce random difficulty 13
preimage hash of bolt11 invoice -- 57
price price currency, frequency 99
proxy external ID protocol 48
published_at unix timestamp (string) -- 23
relay relay url -- 42, 17
relays relay list -- 57
server file storage server url -- 96
subject subject -- 14, 17
summary article summary -- 23
thumb badge thumbnail dimensions in pixels 58
title article title -- 23
web webpage URL -- 34
zap pubkey (hex), relay URL weight 57

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