diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 247 |
1 files changed, 144 insertions, 103 deletions
| @@ -1,18 +1,20 @@ | |||
| 1 | # NIPs | 1 | # NIPs |
| 2 | 2 | ||
| 3 | NIPs stand for **Nostr Implementation Possibilities**. | 3 | NIPs stand for **Nostr Implementation Possibilities**. |
| 4 | |||
| 4 | They exist to document what may be implemented by [Nostr](https://github.com/nostr-protocol/nostr)-compatible _relay_ and _client_ software. | 5 | They exist to document what may be implemented by [Nostr](https://github.com/nostr-protocol/nostr)-compatible _relay_ and _client_ software. |
| 5 | 6 | ||
| 6 | --- | 7 | --- |
| 7 | 8 | ||
| 8 | - [List](#list) | 9 | - [List](#list) |
| 9 | - [Event Kinds](#event-kinds) | 10 | - [Event Kinds](#event-kinds) |
| 10 | - [Event Kind Ranges](#event-kind-ranges) | ||
| 11 | - [Message Types](#message-types) | 11 | - [Message Types](#message-types) |
| 12 | - [Client to Relay](#client-to-relay) | 12 | - [Client to Relay](#client-to-relay) |
| 13 | - [Relay to Client](#relay-to-client) | 13 | - [Relay to Client](#relay-to-client) |
| 14 | - [Standardized Tags](#standardized-tags) | 14 | - [Standardized Tags](#standardized-tags) |
| 15 | - [Criteria for acceptance of NIPs](#criteria-for-acceptance-of-nips) | 15 | - [Criteria for acceptance of NIPs](#criteria-for-acceptance-of-nips) |
| 16 | - [Is this repository a centralizing factor?](#is-this-repository-a-centralizing-factor) | ||
| 17 | - [How this repository works](#how-this-repository-works) | ||
| 16 | - [License](#license) | 18 | - [License](#license) |
| 17 | 19 | ||
| 18 | --- | 20 | --- |
| @@ -30,17 +32,15 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | |||
| 30 | - [NIP-09: Event Deletion](09.md) | 32 | - [NIP-09: Event Deletion](09.md) |
| 31 | - [NIP-10: Conventions for clients' use of `e` and `p` tags in text events](10.md) | 33 | - [NIP-10: Conventions for clients' use of `e` and `p` tags in text events](10.md) |
| 32 | - [NIP-11: Relay Information Document](11.md) | 34 | - [NIP-11: Relay Information Document](11.md) |
| 33 | - [NIP-12: Generic Tag Queries](12.md) | ||
| 34 | - [NIP-13: Proof of Work](13.md) | 35 | - [NIP-13: Proof of Work](13.md) |
| 35 | - [NIP-14: Subject tag in text events.](14.md) | 36 | - [NIP-14: Subject tag in text events](14.md) |
| 36 | - [NIP-15: Nostr Marketplace (for resilient marketplaces)](15.md) | 37 | - [NIP-15: Nostr Marketplace (for resilient marketplaces)](15.md) |
| 37 | - [NIP-16: Event Treatment](16.md) | ||
| 38 | - [NIP-18: Reposts](18.md) | 38 | - [NIP-18: Reposts](18.md) |
| 39 | - [NIP-19: bech32-encoded entities](19.md) | 39 | - [NIP-19: bech32-encoded entities](19.md) |
| 40 | - [NIP-20: Command Results](20.md) | 40 | - [NIP-21: `nostr:` URI scheme](21.md) |
| 41 | - [NIP-21: `nostr:` URL scheme](21.md) | ||
| 42 | - [NIP-22: Event `created_at` Limits](22.md) | 41 | - [NIP-22: Event `created_at` Limits](22.md) |
| 43 | - [NIP-23: Long-form Content](23.md) | 42 | - [NIP-23: Long-form Content](23.md) |
| 43 | - [NIP-24: Extra metadata fields and tags](24.md) | ||
| 44 | - [NIP-25: Reactions](25.md) | 44 | - [NIP-25: Reactions](25.md) |
| 45 | - [NIP-26: Delegated Event Signing](26.md) | 45 | - [NIP-26: Delegated Event Signing](26.md) |
| 46 | - [NIP-27: Text Note References](27.md) | 46 | - [NIP-27: Text Note References](27.md) |
| @@ -48,77 +48,94 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | |||
| 48 | - [NIP-30: Custom Emoji](30.md) | 48 | - [NIP-30: Custom Emoji](30.md) |
| 49 | - [NIP-31: Dealing with Unknown Events](31.md) | 49 | - [NIP-31: Dealing with Unknown Events](31.md) |
| 50 | - [NIP-32: Labeling](32.md) | 50 | - [NIP-32: Labeling](32.md) |
| 51 | - [NIP-33: Parameterized Replaceable Events](33.md) | ||
| 52 | - [NIP-36: Sensitive Content](36.md) | 51 | - [NIP-36: Sensitive Content](36.md) |
| 52 | - [NIP-38: User Statuses](38.md) | ||
| 53 | - [NIP-39: External Identities in Profiles](39.md) | 53 | - [NIP-39: External Identities in Profiles](39.md) |
| 54 | - [NIP-40: Expiration Timestamp](40.md) | 54 | - [NIP-40: Expiration Timestamp](40.md) |
| 55 | - [NIP-42: Authentication of clients to relays](42.md) | 55 | - [NIP-42: Authentication of clients to relays](42.md) |
| 56 | - [NIP-45: Counting results](45.md) | 56 | - [NIP-45: Counting results](45.md) |
| 57 | - [NIP-46: Nostr Connect](46.md) | 57 | - [NIP-46: Nostr Connect](46.md) |
| 58 | - [NIP-47: Wallet Connect](47.md) | 58 | - [NIP-47: Wallet Connect](47.md) |
| 59 | - [NIP-50: Keywords filter](50.md) | 59 | - [NIP-48: Proxy Tags](48.md) |
| 60 | - [NIP-50: Search Capability](50.md) | ||
| 60 | - [NIP-51: Lists](51.md) | 61 | - [NIP-51: Lists](51.md) |
| 62 | - [NIP-52: Calendar Events](52.md) | ||
| 63 | - [NIP-53: Live Activities](53.md) | ||
| 61 | - [NIP-56: Reporting](56.md) | 64 | - [NIP-56: Reporting](56.md) |
| 62 | - [NIP-57: Lightning Zaps](57.md) | 65 | - [NIP-57: Lightning Zaps](57.md) |
| 63 | - [NIP-58: Badges](58.md) | 66 | - [NIP-58: Badges](58.md) |
| 64 | - [NIP-65: Relay List Metadata](65.md) | 67 | - [NIP-65: Relay List Metadata](65.md) |
| 68 | - [NIP-72: Moderated Communities](72.md) | ||
| 69 | - [NIP-75: Zap Goals](75.md) | ||
| 65 | - [NIP-78: Application-specific data](78.md) | 70 | - [NIP-78: Application-specific data](78.md) |
| 71 | - [NIP-84: Highlights](84.md) | ||
| 66 | - [NIP-89: Recommended Application Handlers](89.md) | 72 | - [NIP-89: Recommended Application Handlers](89.md) |
| 73 | - [NIP-90: Data Vending Machines](90.md) | ||
| 67 | - [NIP-94: File Metadata](94.md) | 74 | - [NIP-94: File Metadata](94.md) |
| 68 | - [NIP-98: HTTP Auth](98.md) | 75 | - [NIP-98: HTTP Auth](98.md) |
| 76 | - [NIP-99: Classified Listings](99.md) | ||
| 69 | 77 | ||
| 70 | ## Event Kinds | 78 | ## Event Kinds |
| 71 | 79 | | kind | description | NIP | | |
| 72 | | kind | description | NIP | | 80 | | ------------- | -------------------------- | ----------- | |
| 73 | | ------- | -------------------------- | ----------- | | 81 | | `0` | Metadata | [1](01.md) | |
| 74 | | `0` | Metadata | [1](01.md) | | 82 | | `1` | Short Text Note | [1](01.md) | |
| 75 | | `1` | Short Text Note | [1](01.md) | | 83 | | `2` | Recommend Relay | | |
| 76 | | `2` | Recommend Relay | [1](01.md) | | 84 | | `3` | Contacts | [2](02.md) | |
| 77 | | `3` | Contacts | [2](02.md) | | 85 | | `4` | Encrypted Direct Messages | [4](04.md) | |
| 78 | | `4` | Encrypted Direct Messages | [4](04.md) | | 86 | | `5` | Event Deletion | [9](09.md) | |
| 79 | | `5` | Event Deletion | [9](09.md) | | 87 | | `6` | Repost | [18](18.md) | |
| 80 | | `6` | Repost | [18](18.md) | | 88 | | `7` | Reaction | [25](25.md) | |
| 81 | | `7` | Reaction | [25](25.md) | | 89 | | `8` | Badge Award | [58](58.md) | |
| 82 | | `8` | Badge Award | [58](58.md) | | 90 | | `16` | Generic Repost | [18](18.md) | |
| 83 | | `16` | Generic Repost | [18](18.md) | | 91 | | `40` | Channel Creation | [28](28.md) | |
| 84 | | `40` | Channel Creation | [28](28.md) | | 92 | | `41` | Channel Metadata | [28](28.md) | |
| 85 | | `41` | Channel Metadata | [28](28.md) | | 93 | | `42` | Channel Message | [28](28.md) | |
| 86 | | `42` | Channel Message | [28](28.md) | | 94 | | `43` | Channel Hide Message | [28](28.md) | |
| 87 | | `43` | Channel Hide Message | [28](28.md) | | 95 | | `44` | Channel Mute User | [28](28.md) | |
| 88 | | `44` | Channel Mute User | [28](28.md) | | 96 | | `1063` | File Metadata | [94](94.md) | |
| 89 | | `1063` | File Metadata | [94](94.md) | | 97 | | `1311` | Live Chat Message | [53](53.md) | |
| 90 | | `1984` | Reporting | [56](56.md) | | 98 | | `1040` | OpenTimestamps | [03](03.md) | |
| 91 | | `1985` | Label | [32](32.md) | | 99 | | `1971` | Problem Tracker | [1971](https://github.com/nostrocket/NIPS/blob/main/Problems.md) | |
| 92 | | `9734` | Zap Request | [57](57.md) | | 100 | | `1984` | Reporting | [56](56.md) | |
| 93 | | `9735` | Zap | [57](57.md) | | 101 | | `1985` | Label | [32](32.md) | |
| 94 | | `10000` | Mute List | [51](51.md) | | 102 | | `4550` | Community Post Approval | [72](72.md) | |
| 95 | | `10001` | Pin List | [51](51.md) | | 103 | | `5000`-`5999` | Job Request | [90](90.md) | |
| 96 | | `10002` | Relay List Metadata | [65](65.md) | | 104 | | `6000`-`6999` | Job Result | [90](90.md) | |
| 97 | | `13194` | Wallet Info | [47](47.md) | | 105 | | `7000` | Job Feedback | [90](90.md) | |
| 98 | | `22242` | Client Authentication | [42](42.md) | | 106 | | `9041` | Zap Goal | [75](75.md) | |
| 99 | | `23194` | Wallet Request | [47](47.md) | | 107 | | `9734` | Zap Request | [57](57.md) | |
| 100 | | `23195` | Wallet Response | [47](47.md) | | 108 | | `9735` | Zap | [57](57.md) | |
| 101 | | `24133` | Nostr Connect | [46](46.md) | | 109 | | `9802` | Highlights | [84](84.md) | |
| 102 | | `27235` | HTTP Auth | [98](98.md) | | 110 | | `10000` | Mute List | [51](51.md) | |
| 103 | | `30000` | Categorized People List | [51](51.md) | | 111 | | `10001` | Pin List | [51](51.md) | |
| 104 | | `30001` | Categorized Bookmark List | [51](51.md) | | 112 | | `10002` | Relay List Metadata | [65](65.md) | |
| 105 | | `30008` | Profile Badges | [58](58.md) | | 113 | | `13194` | Wallet Info | [47](47.md) | |
| 106 | | `30009` | Badge Definition | [58](58.md) | | 114 | | `22242` | Client Authentication | [42](42.md) | |
| 107 | | `30017` | Create or update a stall | [15](15.md) | | 115 | | `23194` | Wallet Request | [47](47.md) | |
| 108 | | `30018` | Create or update a product | [15](15.md) | | 116 | | `23195` | Wallet Response | [47](47.md) | |
| 109 | | `30023` | Long-form Content | [23](23.md) | | 117 | | `24133` | Nostr Connect | [46](46.md) | |
| 110 | | `30078` | Application-specific Data | [78](78.md) | | 118 | | `27235` | HTTP Auth | [98](98.md) | |
| 111 | | `31989` | Handler recommendation | [89](89.md) | | 119 | | `30000` | Categorized People List | [51](51.md) | |
| 112 | | `31990` | Handler information | [89](89.md) | | 120 | | `30001` | Categorized Bookmark List | [51](51.md) | |
| 113 | 121 | | `30008` | Profile Badges | [58](58.md) | | |
| 114 | ### Event Kind Ranges | 122 | | `30009` | Badge Definition | [58](58.md) | |
| 115 | 123 | | `30017` | Create or update a stall | [15](15.md) | | |
| 116 | | range | description | NIP | | 124 | | `30018` | Create or update a product | [15](15.md) | |
| 117 | | ---------------- | -------------------------------- | ----------- | | 125 | | `30023` | Long-form Content | [23](23.md) | |
| 118 | | `1000`--`9999` | Regular Events | [16](16.md) | | 126 | | `30024` | Draft Long-form Content | [23](23.md) | |
| 119 | | `10000`--`19999` | Replaceable Events | [16](16.md) | | 127 | | `30078` | Application-specific Data | [78](78.md) | |
| 120 | | `20000`--`29999` | Ephemeral Events | [16](16.md) | | 128 | | `30311` | Live Event | [53](53.md) | |
| 121 | | `30000`--`39999` | Parameterized Replaceable Events | [33](33.md) | | 129 | | `30315` | User Statuses | [38](38.md) | |
| 130 | | `30402` | Classified Listing | [99](99.md) | | ||
| 131 | | `30403` | Draft Classified Listing | [99](99.md) | | ||
| 132 | | `31922` | Date-Based Calendar Event | [52](52.md) | | ||
| 133 | | `31923` | Time-Based Calendar Event | [52](52.md) | | ||
| 134 | | `31924` | Calendar | [52](52.md) | | ||
| 135 | | `31925` | Calendar Event RSVP | [52](52.md) | | ||
| 136 | | `31989` | Handler recommendation | [89](89.md) | | ||
| 137 | | `31990` | Handler information | [89](89.md) | | ||
| 138 | | `34550` | Community Definition | [72](72.md) | | ||
| 122 | 139 | ||
| 123 | ## Message types | 140 | ## Message types |
| 124 | 141 | ||
| @@ -126,64 +143,68 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | |||
| 126 | 143 | ||
| 127 | | type | description | NIP | | 144 | | type | description | NIP | |
| 128 | | ------- | --------------------------------------------------- | ----------- | | 145 | | ------- | --------------------------------------------------- | ----------- | |
| 146 | | `EVENT` | used to publish events | [01](01.md) | | ||
| 147 | | `REQ` | used to request events and subscribe to new updates | [01](01.md) | | ||
| 148 | | `CLOSE` | used to stop previous subscriptions | [01](01.md) | | ||
| 129 | | `AUTH` | used to send authentication events | [42](42.md) | | 149 | | `AUTH` | used to send authentication events | [42](42.md) | |
| 130 | | `CLOSE` | used to stop previous subscriptions | [1](01.md) | | ||
| 131 | | `COUNT` | used to request event counts | [45](45.md) | | 150 | | `COUNT` | used to request event counts | [45](45.md) | |
| 132 | | `EVENT` | used to publish events | [1](01.md) | | ||
| 133 | | `REQ` | used to request events and subscribe to new updates | [1](01.md) | | ||
| 134 | 151 | ||
| 135 | ### Relay to Client | 152 | ### Relay to Client |
| 136 | 153 | ||
| 137 | | type | description | NIP | | 154 | | type | description | NIP | |
| 138 | | -------- | ------------------------------------------------------- | ----------- | | 155 | | -------- | ------------------------------------------------------- | ----------- | |
| 156 | | `EOSE` | used to notify clients all stored events have been sent | [01](01.md) | | ||
| 157 | | `EVENT` | used to send events requested to clients | [01](01.md) | | ||
| 158 | | `NOTICE` | used to send human-readable messages to clients | [01](01.md) | | ||
| 159 | | `OK` | used to notify clients if an EVENT was successful | [01](01.md) | | ||
| 139 | | `AUTH` | used to send authentication challenges | [42](42.md) | | 160 | | `AUTH` | used to send authentication challenges | [42](42.md) | |
| 140 | | `COUNT` | used to send requested event counts to clients | [45](45.md) | | 161 | | `COUNT` | used to send requested event counts to clients | [45](45.md) | |
| 141 | | `EOSE` | used to notify clients all stored events have been sent | [1](01.md) | | ||
| 142 | | `EVENT` | used to send events requested to clients | [1](01.md) | | ||
| 143 | | `NOTICE` | used to send human-readable messages to clients | [1](01.md) | | ||
| 144 | | `OK` | used to notify clients if an EVENT was successful | [20](20.md) | | ||
| 145 | 162 | ||
| 146 | Please update these lists when proposing NIPs introducing new event kinds. | 163 | Please update these lists when proposing NIPs introducing new event kinds. |
| 147 | 164 | ||
| 148 | When experimenting with kinds, keep in mind the classification introduced by [NIP-16](16.md) and [NIP-33](33.md). | ||
| 149 | |||
| 150 | ## Standardized Tags | 165 | ## Standardized Tags |
| 151 | 166 | ||
| 152 | | name | value | other parameters | NIP | | 167 | | name | value | other parameters | NIP | |
| 153 | | ----------------- | ------------------------------------ | -------------------- | ------------------------ | | 168 | | ----------------- | ------------------------------------ | -------------------- | ------------------------------------- | |
| 154 | | `a` | coordinates to an event | relay URL | [33](33.md), [23](23.md) | | 169 | | `e` | event id (hex) | relay URL, marker | [01](01.md), [10](10.md) | |
| 155 | | `alt` | Alt tag | -- | [31](31.md) | | 170 | | `p` | pubkey (hex) | relay URL, petname | [01](01.md), [02](02.md) | |
| 156 | | `d` | identifier | -- | [33](33.md) | | 171 | | `a` | coordinates to an event | relay URL | [01](01.md) | |
| 157 | | `e` | event id (hex) | relay URL, marker | [1](01.md), [10](10.md) | | 172 | | `d` | identifier | -- | [01](01.md) | |
| 158 | | `g` | geohash | -- | [12](12.md) | | 173 | | `alt` | summary | -- | [31](31.md) | |
| 159 | | `i` | identity | proof | [39](39.md) | | 174 | | `g` | geohash | -- | [52](52.md) | |
| 160 | | `l` | label, label namespace | annotations | [32](32.md) | | 175 | | `i` | identity | proof | [39](39.md) | |
| 161 | | `L` | label namespace | -- | [32](32.md) | | 176 | | `k` | kind number (string) | -- | [18](18.md), [25](25.md), [72](72.md) | |
| 162 | | `p` | pubkey (hex) | relay URL | [1](01.md) | | 177 | | `l` | label, label namespace | annotations | [32](32.md) | |
| 163 | | `r` | a reference (URL, etc) | -- | [12](12.md) | | 178 | | `L` | label namespace | -- | [32](32.md) | |
| 164 | | `t` | hashtag | -- | [12](12.md) | | 179 | | `m` | MIME type | -- | [94](94.md) | |
| 165 | | `amount` | millisats | -- | [57](57.md) | | 180 | | `r` | a reference (URL, etc) | petname | | |
| 166 | | `bolt11` | `bolt11` invoice | -- | [57](57.md) | | 181 | | `r` | relay url | marker | [65](65.md) | |
| 167 | | `challenge` | challenge string | -- | [42](42.md) | | 182 | | `t` | hashtag | -- | | |
| 168 | | `content-warning` | reason | -- | [36](36.md) | | 183 | | `amount` | millisatoshis, stringified | -- | [57](57.md) | |
| 169 | | `delegation` | pubkey, conditions, delegation token | -- | [26](26.md) | | 184 | | `bolt11` | `bolt11` invoice | -- | [57](57.md) | |
| 170 | | `description` | badge description | -- | [58](58.md) | | 185 | | `challenge` | challenge string | -- | [42](42.md) | |
| 171 | | `description` | invoice description | -- | [57](57.md) | | 186 | | `content-warning` | reason | -- | [36](36.md) | |
| 172 | | `emoji` | shortcode | image URL | [30](30.md) | | 187 | | `delegation` | pubkey, conditions, delegation token | -- | [26](26.md) | |
| 173 | | `expiration` | unix timestamp (string) | -- | [40](40.md) | | 188 | | `description` | invoice/badge description | -- | [57](57.md), [58](58.md) | |
| 174 | | `image` | image URL | dimensions in pixels | [23](23.md), [58](58.md) | | 189 | | `emoji` | shortcode, image URL | -- | [30](30.md) | |
| 175 | | `lnurl` | `bech32` encoded `lnurl` | -- | [57](57.md) | | 190 | | `expiration` | unix timestamp (string) | -- | [40](40.md) | |
| 176 | | `name` | badge name | -- | [58](58.md) | | 191 | | `goal` | event id (hex) | relay URL | [75](75.md) | |
| 177 | | `nonce` | random | -- | [13](13.md) | | 192 | | `image` | image URL | dimensions in pixels | [23](23.md), [58](58.md) | |
| 178 | | `preimage` | hash of `bolt11` invoice | -- | [57](57.md) | | 193 | | `lnurl` | `bech32` encoded `lnurl` | -- | [57](57.md) | |
| 179 | | `published_at` | unix timestamp (string) | -- | [23](23.md) | | 194 | | `location` | location string | -- | [52](52.md), [99](99.md) | |
| 180 | | `relay` | relay url | -- | [42](42.md) | | 195 | | `name` | badge name | -- | [58](58.md) | |
| 181 | | `relays` | relay list | -- | [57](57.md) | | 196 | | `nonce` | random | -- | [13](13.md) | |
| 182 | | `subject` | subject | -- | [14](14.md) | | 197 | | `preimage` | hash of `bolt11` invoice | -- | [57](57.md) | |
| 183 | | `summary` | article summary | -- | [23](23.md) | | 198 | | `price` | price | currency, frequency | [99](99.md) | |
| 184 | | `thumb` | badge thumbnail | dimensions in pixels | [58](58.md) | | 199 | | `proxy` | external ID | protocol | [48](48.md) | |
| 185 | | `title` | article title | -- | [23](23.md) | | 200 | | `published_at` | unix timestamp (string) | -- | [23](23.md) | |
| 186 | | `zap` | profile name | type of value | [57](57.md) | | 201 | | `relay` | relay url | -- | [42](42.md) | |
| 202 | | `relays` | relay list | -- | [57](57.md) | | ||
| 203 | | `subject` | subject | -- | [14](14.md) | | ||
| 204 | | `summary` | article summary | -- | [23](23.md) | | ||
| 205 | | `thumb` | badge thumbnail | dimensions in pixels | [58](58.md) | | ||
| 206 | | `title` | article title | -- | [23](23.md) | | ||
| 207 | | `zap` | pubkey (hex), relay URL | weight | [57](57.md) | | ||
| 187 | 208 | ||
| 188 | ## Criteria for acceptance of NIPs | 209 | ## Criteria for acceptance of NIPs |
| 189 | 210 | ||
| @@ -193,6 +214,26 @@ When experimenting with kinds, keep in mind the classification introduced by [NI | |||
| 193 | 4. There should be no more than one way of doing the same thing. | 214 | 4. There should be no more than one way of doing the same thing. |
| 194 | 5. Other rules will be made up when necessary. | 215 | 5. Other rules will be made up when necessary. |
| 195 | 216 | ||
| 217 | ## Is this repository a centralizing factor? | ||
| 218 | |||
| 219 | 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. | ||
| 220 | |||
| 221 | 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. | ||
| 222 | |||
| 223 | 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. | ||
| 224 | |||
| 225 | ## How this repository works | ||
| 226 | |||
| 227 | 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. | ||
| 228 | |||
| 229 | 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. | ||
| 230 | |||
| 196 | ## License | 231 | ## License |
| 197 | 232 | ||
| 198 | All NIPs are public domain. | 233 | All NIPs are public domain. |
| 234 | |||
| 235 | ## Contributors | ||
| 236 | |||
| 237 | <a align="center" href="https://github.com/nostr-protocol/nips/graphs/contributors"> | ||
| 238 | <img src="https://contrib.rocks/image?repo=nostr-protocol/nips" /> | ||
| 239 | </a> | ||