mirror of
https://github.com/nostr-protocol/nips.git
synced 2025-12-09 00:28:51 +00:00
Compare commits
45 Commits
kind-follo
...
mints
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cbd5cbee45 | ||
|
|
4ced60ba68 | ||
|
|
561059ff85 | ||
|
|
a1ca7a194b | ||
|
|
e942427f8f | ||
|
|
624b989f9f | ||
|
|
b35dd7d294 | ||
|
|
b94ad00ac7 | ||
|
|
d71887a8e2 | ||
|
|
33cad5108e | ||
|
|
b04922586e | ||
|
|
d857cfb1b8 | ||
|
|
a2be191ecd | ||
|
|
936616b3c0 | ||
|
|
a92d2e2edd | ||
|
|
6d16019e9e | ||
|
|
2ac43aa3f1 | ||
|
|
2776a2aa14 | ||
|
|
5ec59fd70c | ||
|
|
33efff81a6 | ||
|
|
54c0c1352d | ||
|
|
fe1fe75cae | ||
|
|
e9f4cf52f5 | ||
|
|
2ffd8ec363 | ||
|
|
0352f8487d | ||
|
|
aa2342bd9d | ||
|
|
3d1a34de91 | ||
|
|
6acf1c780a | ||
|
|
e4cc95ea32 | ||
|
|
06dc14c9c1 | ||
|
|
821614aee1 | ||
|
|
64624a62ea | ||
|
|
73f65133fc | ||
|
|
e145577b0b | ||
|
|
0e44178961 | ||
|
|
43767e1e53 | ||
|
|
4d47b38dbc | ||
|
|
d09b51246d | ||
|
|
7976f8ab77 | ||
|
|
dfd2c2b8ca | ||
|
|
a8dfdff753 | ||
|
|
82291c6afd | ||
|
|
5c7aad212e | ||
|
|
9517ac6f5d | ||
|
|
66c5cc637f |
2
17.md
2
17.md
@@ -133,7 +133,7 @@ When sending a message to anyone, clients must then connect to the relays in the
|
|||||||
|
|
||||||
This example sends the message `Hola, que tal?` from `nsec1w8udu59ydjvedgs3yv5qccshcj8k05fh3l60k9x57asjrqdpa00qkmr89m` to `nsec12ywtkplvyq5t6twdqwwygavp5lm4fhuang89c943nf2z92eez43szvn4dt`.
|
This example sends the message `Hola, que tal?` from `nsec1w8udu59ydjvedgs3yv5qccshcj8k05fh3l60k9x57asjrqdpa00qkmr89m` to `nsec12ywtkplvyq5t6twdqwwygavp5lm4fhuang89c943nf2z92eez43szvn4dt`.
|
||||||
|
|
||||||
The two final GiftWraps, one to the receiver and the other to the sender, are:
|
The two final GiftWraps, one to the receiver and the other to the sender, respectively, are:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|||||||
14
29.md
14
29.md
@@ -22,15 +22,13 @@ Relays are supposed to generate the events that describe group metadata and grou
|
|||||||
|
|
||||||
A group may be identified by a string in the format `<host>'<group-id>`. For example, a group with _id_ `abcdef` hosted at the relay `wss://groups.nostr.com` would be identified by the string `groups.nostr.com'abcdef`.
|
A group may be identified by a string in the format `<host>'<group-id>`. For example, a group with _id_ `abcdef` hosted at the relay `wss://groups.nostr.com` would be identified by the string `groups.nostr.com'abcdef`.
|
||||||
|
|
||||||
Group identifiers must be strings restricted to the characters `a-z0-9-_`.
|
Group identifiers must be strings restricted to the characters `a-z0-9-_`, and SHOULD be random in order to avoid name collisions.
|
||||||
|
|
||||||
When encountering just the `<host>` without the `'<group-id>`, clients can choose to connect to the group with id `_`, which is a special top-level group dedicated to relay-local discussions.
|
When encountering just the `<host>` without the `'<group-id>`, clients MAY infer `_` as the group id, which is a special top-level group dedicated to relay-local discussions.
|
||||||
|
|
||||||
Group identifiers in most cases should be random or pseudo-random, as that mitigates message replay confusion and ensures they can be migrated or forked to other relays easily without risking conflicting with other groups using the same id in these new relays. This isn't a hard rule, as, for example, in `unmanaged` and/or ephemeral relays groups might not want to migrate ever, so they might not care about this. Notably, the `_` relay-local group isn't expected to be migrated ever.
|
|
||||||
|
|
||||||
## The `h` tag
|
## The `h` tag
|
||||||
|
|
||||||
Events sent by users to groups (chat messages, text notes, moderation events etc) must have an `h` tag with the value set to the group _id_.
|
Events sent by users to groups (chat messages, text notes, moderation events etc) MUST have an `h` tag with the value set to the group _id_.
|
||||||
|
|
||||||
## Timeline references
|
## Timeline references
|
||||||
|
|
||||||
@@ -72,7 +70,7 @@ These are events that can be sent by users to manage their situation in a group,
|
|||||||
|
|
||||||
- *join request* (`kind:9021`)
|
- *join request* (`kind:9021`)
|
||||||
|
|
||||||
Any user can send one of these events to the relay in order to be automatically or manually added to the group. If the group is `open` the relay will automatically issue a `kind:9000` in response adding this user. Otherwise group admins may choose to query for these requests and act upon them.
|
Any user can send a kind `9021` event to the relay in order to request admission to the group. Relays MUST reject the request if the user has not been added to the group. The accompanying error message SHOULD explain whether the rejection is final, if the request is pending review, or if some other special handling is relevant (e.g. if payment is required). If a user is already a member, the event MUST be rejected with `duplicate: ` as the error message prefix.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -241,4 +239,6 @@ A definition for `kind:10009` was included in [NIP-51](51.md) that allows client
|
|||||||
|
|
||||||
### Using `unmanaged` relays
|
### Using `unmanaged` relays
|
||||||
|
|
||||||
To prevent event leakage, replay and confusion, when using `unmanaged` relays, clients should include the [NIP-70](70.md) `-` tag, as just the `previous` tag won't be checked by other `unmanaged` relays.
|
To prevent event leakage, when using `unmanaged` relays, clients should include the [NIP-70](70.md) `-` tag, as just the `previous` tag won't be checked by other `unmanaged` relays.
|
||||||
|
|
||||||
|
Groups MAY be named without relay support by adding a `name` to the corresponding tag in a user's `kind 10009` group list.
|
||||||
|
|||||||
8
44.md
8
44.md
@@ -63,7 +63,7 @@ NIP-44 version 2 has the following design characteristics:
|
|||||||
- SHA256 is used instead of SHA3 or BLAKE because it is already used in nostr. Also BLAKE's speed advantage
|
- SHA256 is used instead of SHA3 or BLAKE because it is already used in nostr. Also BLAKE's speed advantage
|
||||||
is smaller in non-parallel environments.
|
is smaller in non-parallel environments.
|
||||||
- A custom padding scheme is used instead of padmé because it provides better leakage reduction for small messages.
|
- A custom padding scheme is used instead of padmé because it provides better leakage reduction for small messages.
|
||||||
- Base64 encoding is used instead of another compression algorithm because it is widely available, and is already used in nostr.
|
- Base64 encoding is used instead of another encoding algorithm because it is widely available, and is already used in nostr.
|
||||||
|
|
||||||
### Encryption
|
### Encryption
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ NIP-44 version 2 has the following design characteristics:
|
|||||||
- Content must be encoded from UTF-8 into byte array
|
- Content must be encoded from UTF-8 into byte array
|
||||||
- Validate plaintext length. Minimum is 1 byte, maximum is 65535 bytes
|
- Validate plaintext length. Minimum is 1 byte, maximum is 65535 bytes
|
||||||
- Padding format is: `[plaintext_length: u16][plaintext][zero_bytes]`
|
- Padding format is: `[plaintext_length: u16][plaintext][zero_bytes]`
|
||||||
- Padding algorithm is related to powers-of-two, with min padded msg size of 32
|
- Padding algorithm is related to powers-of-two, with min padded msg size of 32bytes
|
||||||
- Plaintext length is encoded in big-endian as first 2 bytes of the padded blob
|
- Plaintext length is encoded in big-endian as first 2 bytes of the padded blob
|
||||||
5. Encrypt padded content
|
5. Encrypt padded content
|
||||||
- Use ChaCha20, with key and nonce from step 3
|
- Use ChaCha20, with key and nonce from step 3
|
||||||
@@ -148,8 +148,8 @@ validation rules, refer to BIP-340.
|
|||||||
- `x[i:j]`, where `x` is a byte array and `i, j <= 0` returns a `(j - i)`-byte array with a copy of the
|
- `x[i:j]`, where `x` is a byte array and `i, j <= 0` returns a `(j - i)`-byte array with a copy of the
|
||||||
`i`-th byte (inclusive) to the `j`-th byte (exclusive) of `x`.
|
`i`-th byte (inclusive) to the `j`-th byte (exclusive) of `x`.
|
||||||
- Constants `c`:
|
- Constants `c`:
|
||||||
- `min_plaintext_size` is 1. 1b msg is padded to 32b.
|
- `min_plaintext_size` is 1. 1bytes msg is padded to 32bytes.
|
||||||
- `max_plaintext_size` is 65535 (64kb - 1). It is padded to 65536.
|
- `max_plaintext_size` is 65535 (64kB - 1). It is padded to 65536bytes.
|
||||||
- Functions
|
- Functions
|
||||||
- `base64_encode(string)` and `base64_decode(bytes)` are Base64 ([RFC 4648](https://datatracker.ietf.org/doc/html/rfc4648), with padding)
|
- `base64_encode(string)` and `base64_decode(bytes)` are Base64 ([RFC 4648](https://datatracker.ietf.org/doc/html/rfc4648), with padding)
|
||||||
- `concat` refers to byte array concatenation
|
- `concat` refers to byte array concatenation
|
||||||
|
|||||||
30
46.md
30
46.md
@@ -49,11 +49,21 @@ _user_ passes this token to _client_, which then sends `connect` request to _rem
|
|||||||
|
|
||||||
### Direct connection initiated by the _client_
|
### Direct connection initiated by the _client_
|
||||||
|
|
||||||
_client_ provides a connection token in the form:
|
_client_ provides a connection token using `nostrconnect://` as the protocol, and `client-pubkey` as the origin. Additional information should be passed as query parameters:
|
||||||
|
|
||||||
|
- `relay` (required) - one or more relay urls on which the _client_ is listening for responses from the _remote-signer_.
|
||||||
|
- `secret` (required) - a short random string that the _remote-signer_ should return as the `result` field of its response.
|
||||||
|
- `perms` (optional) - a comma-separated list of permissions the _client_ is requesting be approved by the _remote-signer_
|
||||||
|
- `name` (optional) - the name of the _client_ application
|
||||||
|
- `url` (optional) - the canonical url of the _client_ application
|
||||||
|
- `image` (optional) - a small image representing the _client_ application
|
||||||
|
|
||||||
|
Here's an example:
|
||||||
|
|
||||||
```
|
```
|
||||||
nostrconnect://<client-pubkey>?relay=<wss://relay-to-connect-on>&metadata=<json metadata: {"name":"...", "url": "...", "description": "...", "perms": "..."}>&secret=<required-secret-value>
|
nostrconnect://83f3b2ae6aa368e8275397b9c26cf550101d63ebaab900d19dd4a4429f5ad8f5?relay=wss%3A%2F%2Frelay1.example.com&perms=nip44_encrypt%2Cnip44_decrypt%2Csign_event%3A13%2Csign_event%3A14%2Csign_event%3A1059&name=My+Client&secret=0s8j2djs&relay=wss%3A%2F%2Frelay2.example2.com
|
||||||
```
|
```
|
||||||
|
|
||||||
_user_ passes this token to _remote-signer_, which then sends `connect` *response* event to the `client-pubkey` via the specified relays. Client discovers `remote-signer-pubkey` from connect response author. `secret` value MUST be provided to avoid connection spoofing, _client_ MUST validate the `secret` returned by `connect` response.
|
_user_ passes this token to _remote-signer_, which then sends `connect` *response* event to the `client-pubkey` via the specified relays. Client discovers `remote-signer-pubkey` from connect response author. `secret` value MUST be provided to avoid connection spoofing, _client_ MUST validate the `secret` returned by `connect` response.
|
||||||
|
|
||||||
## Request Events `kind: 24133`
|
## Request Events `kind: 24133`
|
||||||
@@ -62,12 +72,12 @@ _user_ passes this token to _remote-signer_, which then sends `connect` *respons
|
|||||||
{
|
{
|
||||||
"kind": 24133,
|
"kind": 24133,
|
||||||
"pubkey": <local_keypair_pubkey>,
|
"pubkey": <local_keypair_pubkey>,
|
||||||
"content": <nip04(<request>)>,
|
"content": <nip44(<request>)>,
|
||||||
"tags": [["p", <remote-signer-pubkey>]],
|
"tags": [["p", <remote-signer-pubkey>]],
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The `content` field is a JSON-RPC-like message that is [NIP-04](04.md) encrypted and has the following structure:
|
The `content` field is a JSON-RPC-like message that is [NIP-44](44.md) encrypted and has the following structure:
|
||||||
|
|
||||||
```jsonc
|
```jsonc
|
||||||
{
|
{
|
||||||
@@ -99,7 +109,7 @@ Each of the following are methods that the _client_ sends to the _remote-signer_
|
|||||||
|
|
||||||
### Requested permissions
|
### Requested permissions
|
||||||
|
|
||||||
The `connect` method may be provided with `optional_requested_permissions` for user convenience. The permissions are a comma-separated list of `method[:params]`, i.e. `nip04_encrypt,sign_event:4` meaning permissions to call `nip04_encrypt` and to call `sign_event` with `kind:4`. Optional parameter for `sign_event` is the kind number, parameters for other methods are to be defined later. Same permission format may be used for `perms` field of `metadata` in `nostrconnect://` string.
|
The `connect` method may be provided with `optional_requested_permissions` for user convenience. The permissions are a comma-separated list of `method[:params]`, i.e. `nip44_encrypt,sign_event:4` meaning permissions to call `nip44_encrypt` and to call `sign_event` with `kind:4`. Optional parameter for `sign_event` is the kind number, parameters for other methods are to be defined later. Same permission format may be used for `perms` field of `metadata` in `nostrconnect://` string.
|
||||||
|
|
||||||
## Response Events `kind:24133`
|
## Response Events `kind:24133`
|
||||||
|
|
||||||
@@ -108,13 +118,13 @@ The `connect` method may be provided with `optional_requested_permissions` for u
|
|||||||
"id": <id>,
|
"id": <id>,
|
||||||
"kind": 24133,
|
"kind": 24133,
|
||||||
"pubkey": <remote-signer-pubkey>,
|
"pubkey": <remote-signer-pubkey>,
|
||||||
"content": <nip04(<response>)>,
|
"content": <nip44(<response>)>,
|
||||||
"tags": [["p", <client-pubkey>]],
|
"tags": [["p", <client-pubkey>]],
|
||||||
"created_at": <unix timestamp in seconds>
|
"created_at": <unix timestamp in seconds>
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The `content` field is a JSON-RPC-like message that is [NIP-04](04.md) encrypted and has the following structure:
|
The `content` field is a JSON-RPC-like message that is [NIP-44](44.md) encrypted and has the following structure:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -140,7 +150,7 @@ The `content` field is a JSON-RPC-like message that is [NIP-04](04.md) encrypted
|
|||||||
{
|
{
|
||||||
"kind": 24133,
|
"kind": 24133,
|
||||||
"pubkey": "eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86",
|
"pubkey": "eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86",
|
||||||
"content": nip04({
|
"content": nip44({
|
||||||
"id": <random_string>,
|
"id": <random_string>,
|
||||||
"method": "sign_event",
|
"method": "sign_event",
|
||||||
"params": [json_stringified(<{
|
"params": [json_stringified(<{
|
||||||
@@ -160,7 +170,7 @@ The `content` field is a JSON-RPC-like message that is [NIP-04](04.md) encrypted
|
|||||||
{
|
{
|
||||||
"kind": 24133,
|
"kind": 24133,
|
||||||
"pubkey": "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52",
|
"pubkey": "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52",
|
||||||
"content": nip04({
|
"content": nip44({
|
||||||
"id": <random_string>,
|
"id": <random_string>,
|
||||||
"result": json_stringified(<signed-event>)
|
"result": json_stringified(<signed-event>)
|
||||||
}),
|
}),
|
||||||
@@ -203,7 +213,7 @@ _remote-signer_ MAY publish it's metadata by using [NIP-05](05.md) and [NIP-89](
|
|||||||
},
|
},
|
||||||
"nip46": {
|
"nip46": {
|
||||||
"relays": ["wss://relay1","wss://relay2"...],
|
"relays": ["wss://relay1","wss://relay2"...],
|
||||||
"nostrconnect_url": "https://remote-signer-domain.com/<nostrconnect>"
|
"nostrconnect_url": "https://remote-signer-domain.example/<nostrconnect>"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
2
47.md
2
47.md
@@ -175,7 +175,7 @@ Request:
|
|||||||
Response:
|
Response:
|
||||||
|
|
||||||
For every invoice in the request, a separate response event is sent. To differentiate between the responses, each
|
For every invoice in the request, a separate response event is sent. To differentiate between the responses, each
|
||||||
response event contains an `d` tag with the id of the invoice it is responding to, if no id was given, then the
|
response event contains a `d` tag with the id of the invoice it is responding to, if no id was given, then the
|
||||||
payment hash of the invoice should be used.
|
payment hash of the invoice should be used.
|
||||||
|
|
||||||
```jsonc
|
```jsonc
|
||||||
|
|||||||
10
51.md
10
51.md
@@ -14,7 +14,7 @@ When new items are added to an existing list, clients SHOULD append them to the
|
|||||||
|
|
||||||
## Types of lists
|
## Types of lists
|
||||||
|
|
||||||
## Standard lists
|
### Standard lists
|
||||||
|
|
||||||
Standard lists use normal replaceable events, meaning users may only have a single list of each kind. They have special meaning and clients may rely on them to augment a user's profile or browsing experience.
|
Standard lists use normal replaceable events, meaning users may only have a single list of each kind. They have special meaning and clients may rely on them to augment a user's profile or browsing experience.
|
||||||
|
|
||||||
@@ -29,14 +29,16 @@ For example, _mute list_ can contain the public keys of spammers and bad actors
|
|||||||
| Public chats | 10005 | [NIP-28](28.md) chat channels the user is in | `"e"` (kind:40 channel definitions) |
|
| Public chats | 10005 | [NIP-28](28.md) chat channels the user is in | `"e"` (kind:40 channel definitions) |
|
||||||
| Blocked relays | 10006 | relays clients should never connect to | `"relay"` (relay URLs) |
|
| Blocked relays | 10006 | relays clients should never connect to | `"relay"` (relay URLs) |
|
||||||
| Search relays | 10007 | relays clients should use when performing search queries | `"relay"` (relay URLs) |
|
| Search relays | 10007 | relays clients should use when performing search queries | `"relay"` (relay URLs) |
|
||||||
| Simple groups | 10009 | [NIP-29](29.md) groups the user is in | `"group"` ([NIP-29](29.md) group ids + mandatory relay URL) |
|
| Simple groups | 10009 | [NIP-29](29.md) groups the user is in | `"group"` ([NIP-29](29.md) group id + relay URL + optional group name), `"r"` for each relay in use |
|
||||||
| Interests | 10015 | topics a user may be interested in and pointers | `"t"` (hashtags) and `"a"` (kind:30015 interest set) |
|
| Interests | 10015 | topics a user may be interested in and pointers | `"t"` (hashtags) and `"a"` (kind:30015 interest set) |
|
||||||
|
| Nutzap mints | 10019 | mints the user accepts nutzaps in | `"mint"` (mint URL) (see [NIP-61](61.md) for more) |
|
||||||
|
| Blocked mints | 10020 | mints the user doesn't want to use | `"u"` (mint URL) |
|
||||||
| Emojis | 10030 | user preferred emojis and pointers to emoji sets | `"emoji"` (see [NIP-30](30.md)) and `"a"` (kind:30030 emoji set) |
|
| Emojis | 10030 | user preferred emojis and pointers to emoji sets | `"emoji"` (see [NIP-30](30.md)) and `"a"` (kind:30030 emoji set) |
|
||||||
| DM relays | 10050 | Where to receive [NIP-17](17.md) direct messages | `"relay"` (see [NIP-17](17.md)) |
|
| DM relays | 10050 | Where to receive [NIP-17](17.md) direct messages | `"relay"` (see [NIP-17](17.md)) |
|
||||||
| Good wiki authors | 10101 | [NIP-54](54.md) user recommended wiki authors | `"p"` (pubkeys) |
|
| Good wiki authors | 10101 | [NIP-54](54.md) user recommended wiki authors | `"p"` (pubkeys) |
|
||||||
| Good wiki relays | 10102 | [NIP-54](54.md) relays deemed to only host useful articles | `"relay"` (relay URLs) |
|
| Good wiki relays | 10102 | [NIP-54](54.md) relays deemed to only host useful articles | `"relay"` (relay URLs) |
|
||||||
|
|
||||||
## Sets
|
### Sets
|
||||||
|
|
||||||
Sets are lists with well-defined meaning that can enhance the functionality and the UI of clients that rely on them. Unlike standard lists, users are expected to have more than one set of each kind, therefore each of them must be assigned a different `"d"` identifier.
|
Sets are lists with well-defined meaning that can enhance the functionality and the UI of clients that rely on them. Unlike standard lists, users are expected to have more than one set of each kind, therefore each of them must be assigned a different `"d"` identifier.
|
||||||
|
|
||||||
@@ -56,7 +58,7 @@ Aside from their main identifier, the `"d"` tag, sets can optionally have a `"ti
|
|||||||
| Emoji sets | 30030 | categorized emoji groups | `"emoji"` (see [NIP-30](30.md)) |
|
| Emoji sets | 30030 | categorized emoji groups | `"emoji"` (see [NIP-30](30.md)) |
|
||||||
| Release artifact sets | 30063 | groups of files of a software release | `"e"` (kind:1063 [file metadata](94.md) events), `"i"` (application identifier, typically reverse domain notation), `"version"` |
|
| Release artifact sets | 30063 | groups of files of a software release | `"e"` (kind:1063 [file metadata](94.md) events), `"i"` (application identifier, typically reverse domain notation), `"version"` |
|
||||||
|
|
||||||
## Deprecated standard lists
|
### Deprecated standard lists
|
||||||
|
|
||||||
Some clients have used these lists in the past, but they should work on transitioning to the [standard formats](#standard-lists) above.
|
Some clients have used these lists in the past, but they should work on transitioning to the [standard formats](#standard-lists) above.
|
||||||
|
|
||||||
|
|||||||
92
68.md
Normal file
92
68.md
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
NIP-68
|
||||||
|
======
|
||||||
|
|
||||||
|
Picture-first feeds
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
`draft` `optional`
|
||||||
|
|
||||||
|
This NIP defines event kind `20` for picture-first clients. Images must be self-contained. They are hosted externally and referenced using `imeta` tags.
|
||||||
|
|
||||||
|
The idea is for this type of event to cater to Nostr clients resembling platforms like Instagram, Flickr, Snapchat, or 9GAG, where the picture itself takes center stage in the user experience.
|
||||||
|
|
||||||
|
## Picture Events
|
||||||
|
|
||||||
|
Picture events contain a `title` tag and description in the `.content`.
|
||||||
|
|
||||||
|
They may contain multiple images to be displayed as a single post.
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
{
|
||||||
|
"id": <32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>,
|
||||||
|
"pubkey": <32-bytes lowercase hex-encoded public key of the event creator>,
|
||||||
|
"created_at": <Unix timestamp in seconds>,
|
||||||
|
"kind": 20,
|
||||||
|
"content": "<description of post>",
|
||||||
|
"tags": [
|
||||||
|
["title", "<short title of post>"],
|
||||||
|
|
||||||
|
// Picture Data
|
||||||
|
[
|
||||||
|
"imeta",
|
||||||
|
"url https://nostr.build/i/my-image.jpg",
|
||||||
|
"m image/jpeg",
|
||||||
|
"blurhash eVF$^OI:${M{o#*0-nNFxakD-?xVM}WEWB%iNKxvR-oetmo#R-aen$",
|
||||||
|
"dim 3024x4032",
|
||||||
|
"alt A scenic photo overlooking the coast of Costa Rica",
|
||||||
|
"x <sha256 hash as specified in NIP 94>",
|
||||||
|
"fallback https://nostrcheck.me/alt1.jpg",
|
||||||
|
"fallback https://void.cat/alt1.jpg"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"imeta",
|
||||||
|
"url https://nostr.build/i/my-image2.jpg",
|
||||||
|
"m image/jpeg",
|
||||||
|
"blurhash eVF$^OI:${M{o#*0-nNFxakD-?xVM}WEWB%iNKxvR-oetmo#R-aen$",
|
||||||
|
"dim 3024x4032",
|
||||||
|
"alt Another scenic photo overlooking the coast of Costa Rica",
|
||||||
|
"x <sha256 hash as specified in NIP 94>",
|
||||||
|
"fallback https://nostrcheck.me/alt2.jpg",
|
||||||
|
"fallback https://void.cat/alt2.jpg",
|
||||||
|
|
||||||
|
"annotate-user <32-bytes hex of a pubkey>:<posX>:<posY>" // Tag users in specific locations in the picture
|
||||||
|
],
|
||||||
|
|
||||||
|
["content-warning", "<reason>"], // if NSFW
|
||||||
|
|
||||||
|
// Tagged users
|
||||||
|
["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>"],
|
||||||
|
["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>"],
|
||||||
|
|
||||||
|
// Specify the media type for filters to allow clients to filter by supported kinds
|
||||||
|
["m", "image/jpeg"],
|
||||||
|
|
||||||
|
// Hashes of each image to make them queryable
|
||||||
|
["x", "<sha256>"]
|
||||||
|
|
||||||
|
// Hashtags
|
||||||
|
["t", "<tag>"],
|
||||||
|
["t", "<tag>"],
|
||||||
|
|
||||||
|
// location
|
||||||
|
["location", "<location>"], // city name, state, country
|
||||||
|
["g", "<geohash>"],
|
||||||
|
|
||||||
|
// When text is written in the image, add the tag to represent the language
|
||||||
|
["L", "ISO-639-1"],
|
||||||
|
["l", "en", "ISO-639-1"]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `imeta` tag `annotate-user` places a user link in the specific position in the image.
|
||||||
|
|
||||||
|
Only the following media types are accepted:
|
||||||
|
- `image/apng`: Animated Portable Network Graphics (APNG)
|
||||||
|
- `image/avif`: AV1 Image File Format (AVIF)
|
||||||
|
- `image/gif`: Graphics Interchange Format (GIF)
|
||||||
|
- `image/jpeg`: Joint Photographic Expert Group image (JPEG)
|
||||||
|
- `image/png`: Portable Network Graphics (PNG)
|
||||||
|
- `image/webp`: Web Picture format (WEBP)
|
||||||
|
|
||||||
|
Picture events might be used with [NIP-71](71.md)'s kind `34236` to display short vertical videos in the same feed.
|
||||||
90
86.md
Normal file
90
86.md
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
NIP-86
|
||||||
|
======
|
||||||
|
|
||||||
|
Relay Management API
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
`draft` `optional`
|
||||||
|
|
||||||
|
Relays may provide an API for performing management tasks. This is made available as a JSON-RPC-like request-response protocol over HTTP, on the same URI as the relay's websocket.
|
||||||
|
|
||||||
|
When a relay receives an HTTP(s) request with a `Content-Type` header of `application/nostr+json+rpc` to a URI supporting WebSocket upgrades, it should parse the request as a JSON document with the following fields:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"method": "<method-name>",
|
||||||
|
"params": ["<array>", "<of>", "<parameters>"]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then it should return a response in the format
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result": {"<arbitrary>": "<value>"},
|
||||||
|
"error": "<optional error message, if the call has errored>"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This is the list of **methods** that may be supported:
|
||||||
|
|
||||||
|
* `supportedmethods`:
|
||||||
|
- params: `[]`
|
||||||
|
- result: `["<method-name>", "<method-name>", ...]` (an array with the names of all the other supported methods)
|
||||||
|
* `banpubkey`:
|
||||||
|
- params: `["<32-byte-hex-public-key>", "<optional-reason>"]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `listbannedpubkeys`:
|
||||||
|
- params: `[]`
|
||||||
|
- result: `[{"pubkey": "<32-byte-hex>", "reason": "<optional-reason>"}, ...]`, an array of objects
|
||||||
|
* `allowpubkey`:
|
||||||
|
- params: `["<32-byte-hex-public-key>", "<optional-reason>"]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `listallowedpubkeys`:
|
||||||
|
- params: `[]`
|
||||||
|
- result: `[{"pubkey": "<32-byte-hex>", "reason": "<optional-reason>"}, ...]`, an array of objects
|
||||||
|
* `listeventsneedingmoderation`:
|
||||||
|
- params: `[]`
|
||||||
|
- result: `[{"id": "<32-byte-hex>", "reason": "<optional-reason>"}]`, an array of objects
|
||||||
|
* `allowevent`:
|
||||||
|
- params: `["<32-byte-hex-event-id>", "<optional-reason>"]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `banevent`:
|
||||||
|
- params: `["<32-byte-hex-event-id>", "<optional-reason>"]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `listbannedevents`:
|
||||||
|
- params: `[]`
|
||||||
|
- result: `[{"id": "<32-byte hex>", "reason": "<optional-reason>"}, ...]`, an array of objects
|
||||||
|
* `changerelayname`:
|
||||||
|
- params: `["<new-name>"]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `changerelaydescription`:
|
||||||
|
- params: `["<new-description>"]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `changerelayicon`:
|
||||||
|
- params: `["<new-icon-url>"]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `allowkind`:
|
||||||
|
- params: `[<kind-number>]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `disallowkind`:
|
||||||
|
- params: `[<kind-number>]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `listallowedkinds`:
|
||||||
|
- params: `[]`
|
||||||
|
- result: `[<kind-number>, ...]`, an array of numbers
|
||||||
|
* `blockip`:
|
||||||
|
- params: `["<ip-address>", "<optional-reason>"]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `unblockip`:
|
||||||
|
- params: `["<ip-address>"]`
|
||||||
|
- result: `true` (a boolean always set to `true`)
|
||||||
|
* `listblockedips`:
|
||||||
|
- params: `[]`
|
||||||
|
- result: `[{"ip": "<ip-address>", "reason": "<optional-reason>"}, ...]`, an array of objects
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
The request must contain an `Authorization` header with a valid [NIP-98](./98.md) event, except the `payload` tag is required. The `u` tag is the relay URL.
|
||||||
|
|
||||||
|
If `Authorization` is not provided or is invalid, the endpoint should return a 401 response.
|
||||||
2
90.md
2
90.md
@@ -185,7 +185,7 @@ Any job feedback event MIGHT include results in the `.content` field, as describ
|
|||||||
* Customer publishes a job request (e.g. `kind:5000` speech-to-text).
|
* Customer publishes a job request (e.g. `kind:5000` speech-to-text).
|
||||||
* Service Providers MAY submit `kind:7000` job-feedback events (e.g. `payment-required`, `processing`, `error`, etc.).
|
* Service Providers MAY submit `kind:7000` job-feedback events (e.g. `payment-required`, `processing`, `error`, etc.).
|
||||||
* Upon completion, the service provider publishes the result of the job with a `kind:6000` job-result event.
|
* Upon completion, the service provider publishes the result of the job with a `kind:6000` job-result event.
|
||||||
* At any point, if there is an `amount` pending to be paid as instructed by the service provider, the user can pay the included `bolt11` or zap the job result event the service provider has sent to the user
|
* At any point, if there is an `amount` pending to be paid as instructed by the service provider, the user can pay the included `bolt11` or zap the job result event the service provider has sent to the user.
|
||||||
|
|
||||||
Job feedback (`kind:7000`) and Job Results (`kind:6000-6999`) events MAY include an `amount` tag, this can be interpreted as a suggestion to pay. Service Providers MUST use the `payment-required` feedback event to signal that a payment is required and no further actions will be performed until the payment is sent.
|
Job feedback (`kind:7000`) and Job Results (`kind:6000-6999`) events MAY include an `amount` tag, this can be interpreted as a suggestion to pay. Service Providers MUST use the `payment-required` feedback event to signal that a payment is required and no further actions will be performed until the payment is sent.
|
||||||
|
|
||||||
|
|||||||
100
BREAKING.md
100
BREAKING.md
@@ -5,54 +5,57 @@ reverse chronological order.
|
|||||||
|
|
||||||
| Date | Commit | NIP | Change |
|
| Date | Commit | NIP | Change |
|
||||||
| ----------- | --------- | -------- | ------ |
|
| ----------- | --------- | -------- | ------ |
|
||||||
| 2024-10-15 | [1cda2dcc](https://github.com/nostr-protocol/nips/commit/1cda2dcc) | [NIP-71](71.md) | some tags were replaced with `imeta` tag |
|
| 2024-12-05 | [6d16019e](https://github.com/nostr-protocol/nips/commit/6d16019e) | [46](46.md) | message encryption was changed to NIP-44 |
|
||||||
| 2024-10-15 | [1cda2dcc](https://github.com/nostr-protocol/nips/commit/1cda2dcc) | [NIP-71](71.md) | `kind: 34237` was dropped |
|
| 2024-11-12 | [2838e3bd](https://github.com/nostr-protocol/nips/commit/2838e3bd) | [29](29.md) | `kind: 12` and `kind: 10` were removed (use `kind: 1111` instead) |
|
||||||
| 2024-10-07 | [7bb8997b](https://github.com/nostr-protocol/nips/commit/7bb8997b) | [NIP-55](55.md) | some fields and passing data were changed |
|
| 2024-11-12 | [926a51e7](https://github.com/nostr-protocol/nips/commit/926a51e7) | [46](46.md) | NIP-05 login was removed |
|
||||||
| 2024-08-18 | [3aff37bd](https://github.com/nostr-protocol/nips/commit/3aff37bd) | [NIP-54](54.md) | content should be Asciidoc |
|
| 2024-11-12 | [926a51e7](https://github.com/nostr-protocol/nips/commit/926a51e7) | [46](46.md) | `create_account` method was removed |
|
||||||
| 2024-07-31 | [3ea2f1a4](https://github.com/nostr-protocol/nips/commit/3ea2f1a4) | [NIP-45](45.md) | [444ad28d](https://github.com/nostr-protocol/nips/commit/444ad28d) was reverted |
|
| 2024-11-12 | [926a51e7](https://github.com/nostr-protocol/nips/commit/926a51e7) | [46](46.md) | `connect` params and result were changed |
|
||||||
| 2024-07-30 | [444ad28d](https://github.com/nostr-protocol/nips/commit/444ad28d) | [NIP-45](45.md) | NIP-45 was deprecated |
|
| 2024-10-29 | [f1e8d2c4](https://github.com/nostr-protocol/nips/commit/f1e8d2c4) | [46](46.md) | bunker URL should use `remote-signer-key` |
|
||||||
| 2024-07-26 | [ecee40df](https://github.com/nostr-protocol/nips/commit/ecee40df) | [NIP-19](19.md) | `nrelay` was deprecated |
|
| 2024-10-15 | [1cda2dcc](https://github.com/nostr-protocol/nips/commit/1cda2dcc) | [71](71.md) | some tags were replaced with `imeta` tag |
|
||||||
| 2024-07-23 | [0227a2cd](https://github.com/nostr-protocol/nips/commit/0227a2cd) | [NIP-01](01.md) | events should be sorted by id after created_at |
|
| 2024-10-15 | [1cda2dcc](https://github.com/nostr-protocol/nips/commit/1cda2dcc) | [71](71.md) | `kind: 34237` was dropped |
|
||||||
| 2024-06-06 | [58e94b20](https://github.com/nostr-protocol/nips/commit/58e94b20) | [NIP-25](25.md) | [8073c848](https://github.com/nostr-protocol/nips/commit/8073c848) was reverted |
|
| 2024-10-07 | [7bb8997b](https://github.com/nostr-protocol/nips/commit/7bb8997b) | [55](55.md) | some fields and passing data were changed |
|
||||||
| 2024-06-06 | [a6dfc7b5](https://github.com/nostr-protocol/nips/commit/a6dfc7b5) | [NIP-55](55.md) | NIP number was changed |
|
| 2024-08-18 | [3aff37bd](https://github.com/nostr-protocol/nips/commit/3aff37bd) | [54](54.md) | content should be Asciidoc |
|
||||||
| 2024-05-25 | [5d1d1c17](https://github.com/nostr-protocol/nips/commit/5d1d1c17) | [NIP-71](71.md) | 'aes-256-gcm' tag was removed |
|
| 2024-07-31 | [3ea2f1a4](https://github.com/nostr-protocol/nips/commit/3ea2f1a4) | [45](45.md) | [444ad28d](https://github.com/nostr-protocol/nips/commit/444ad28d) was reverted |
|
||||||
| 2024-05-07 | [8073c848](https://github.com/nostr-protocol/nips/commit/8073c848) | [NIP-25](25.md) | e-tags were changed to not include entire thread |
|
| 2024-07-30 | [444ad28d](https://github.com/nostr-protocol/nips/commit/444ad28d) | [45](45.md) | NIP-45 was deprecated |
|
||||||
| 2024-04-30 | [bad88262](https://github.com/nostr-protocol/nips/commit/bad88262) | [NIP-34](34.md) | 'earliest-unique-commit' tag was removed (use 'r' tag instead) |
|
| 2024-07-26 | [ecee40df](https://github.com/nostr-protocol/nips/commit/ecee40df) | [19](19.md) | `nrelay` was deprecated |
|
||||||
| 2024-02-25 | [4a171cb0](https://github.com/nostr-protocol/nips/commit/4a171cb0) | [NIP-18](18.md) | quote repost should use `q` tag |
|
| 2024-07-23 | [0227a2cd](https://github.com/nostr-protocol/nips/commit/0227a2cd) | [01](01.md) | events should be sorted by id after created_at |
|
||||||
| 2024-02-21 | [c6cd655c](https://github.com/nostr-protocol/nips/commit/c6cd655c) | [NIP-46](46.md) | Params were stringified |
|
| 2024-06-06 | [58e94b20](https://github.com/nostr-protocol/nips/commit/58e94b20) | [25](25.md) | [8073c848](https://github.com/nostr-protocol/nips/commit/8073c848) was reverted |
|
||||||
| 2024-02-16 | [cbec02ab](https://github.com/nostr-protocol/nips/commit/cbec02ab) | [NIP-49](49.md) | Password first normalized to NFKC |
|
| 2024-06-06 | [a6dfc7b5](https://github.com/nostr-protocol/nips/commit/a6dfc7b5) | [55](55.md) | NIP number was changed |
|
||||||
| 2024-02-15 | [afbb8dd0](https://github.com/nostr-protocol/nips/commit/afbb8dd0) | [NIP-39](39.md) | PGP identity was removed |
|
| 2024-05-25 | [5d1d1c17](https://github.com/nostr-protocol/nips/commit/5d1d1c17) | [71](71.md) | 'aes-256-gcm' tag was removed |
|
||||||
| 2024-02-07 | [d3dad114](https://github.com/nostr-protocol/nips/commit/d3dad114) | [NIP-46](46.md) | Connection token format was changed |
|
| 2024-05-07 | [8073c848](https://github.com/nostr-protocol/nips/commit/8073c848) | [25](25.md) | e-tags were changed to not include entire thread |
|
||||||
| 2024-01-30 | [1a2b21b6](https://github.com/nostr-protocol/nips/commit/1a2b21b6) | [NIP-59](59.md) | 'p' tag became optional |
|
| 2024-04-30 | [bad88262](https://github.com/nostr-protocol/nips/commit/bad88262) | [34](34.md) | 'earliest-unique-commit' tag was removed (use 'r' tag instead) |
|
||||||
| 2023-01-27 | [c2f34817](https://github.com/nostr-protocol/nips/commit/c2f34817) | [NIP-47](47.md) | optional expiration tag should be honored |
|
| 2024-02-25 | [4a171cb0](https://github.com/nostr-protocol/nips/commit/4a171cb0) | [18](18.md) | quote repost should use `q` tag |
|
||||||
| 2024-01-10 | [3d8652ea](https://github.com/nostr-protocol/nips/commit/3d8652ea) | [NIP-02](02.md) | list entries should be chronological |
|
| 2024-02-21 | [c6cd655c](https://github.com/nostr-protocol/nips/commit/c6cd655c) | [46](46.md) | Params were stringified |
|
||||||
| 2024-01-10 | [3d8652ea](https://github.com/nostr-protocol/nips/commit/3d8652ea) | [NIP-51](51.md) | list entries should be chronological |
|
| 2024-02-16 | [cbec02ab](https://github.com/nostr-protocol/nips/commit/cbec02ab) | [49](49.md) | Password first normalized to NFKC |
|
||||||
| 2023-12-30 | [29869821](https://github.com/nostr-protocol/nips/commit/29869821) | [NIP-52](52.md) | 'name' tag was removed (use 'title' tag instead) |
|
| 2024-02-15 | [afbb8dd0](https://github.com/nostr-protocol/nips/commit/afbb8dd0) | [39](39.md) | PGP identity was removed |
|
||||||
| 2023-12-27 | [17c67ef5](https://github.com/nostr-protocol/nips/commit/17c67ef5) | [NIP-94](94.md) | 'aes-256-gcm' tag was removed |
|
| 2024-02-07 | [d3dad114](https://github.com/nostr-protocol/nips/commit/d3dad114) | [46](46.md) | Connection token format was changed |
|
||||||
| 2023-12-03 | [0ba45895](https://github.com/nostr-protocol/nips/commit/0ba45895) | [NIP-01](01.md) | WebSocket status code `4000` was replaced by 'CLOSED' message |
|
| 2024-01-30 | [1a2b21b6](https://github.com/nostr-protocol/nips/commit/1a2b21b6) | [59](59.md) | 'p' tag became optional |
|
||||||
| 2023-11-28 | [6de35f9e](https://github.com/nostr-protocol/nips/commit/6de35f9e) | [NIP-89](89.md) | 'client' tag value was changed |
|
| 2023-01-27 | [c2f34817](https://github.com/nostr-protocol/nips/commit/c2f34817) | [47](47.md) | optional expiration tag should be honored |
|
||||||
| 2023-11-20 | [7822a8b1](https://github.com/nostr-protocol/nips/commit/7822a8b1) | [NIP-51](51.md) | `kind: 30000` and `kind: 30001` were deprecated |
|
| 2024-01-10 | [3d8652ea](https://github.com/nostr-protocol/nips/commit/3d8652ea) | [02](02.md), [51](51.md) | list entries should be chronological |
|
||||||
| 2023-11-11 | [cbdca1e9](https://github.com/nostr-protocol/nips/commit/cbdca1e9) | [NIP-84](84.md) | 'range' tag was removed |
|
| 2023-12-30 | [29869821](https://github.com/nostr-protocol/nips/commit/29869821) | [52](52.md) | 'name' tag was removed (use 'title' tag instead) |
|
||||||
| 2023-11-10 | [c945d8bd](https://github.com/nostr-protocol/nips/commit/c945d8bd) | [NIP-32](32.md) | 'l' tag annotations was removed |
|
| 2023-12-27 | [17c67ef5](https://github.com/nostr-protocol/nips/commit/17c67ef5) | [94](94.md) | 'aes-256-gcm' tag was removed |
|
||||||
| 2023-11-07 | [108b7f16](https://github.com/nostr-protocol/nips/commit/108b7f16) | [NIP-01](01.md) | 'OK' message must have 4 items |
|
| 2023-12-03 | [0ba45895](https://github.com/nostr-protocol/nips/commit/0ba45895) | [01](01.md) | WebSocket status code `4000` was replaced by 'CLOSED' message |
|
||||||
| 2023-10-17 | [cf672b76](https://github.com/nostr-protocol/nips/commit/cf672b76) | [NIP-03](03.md) | 'block' tag was removed |
|
| 2023-11-28 | [6de35f9e](https://github.com/nostr-protocol/nips/commit/6de35f9e) | [89](89.md) | 'client' tag value was changed |
|
||||||
| 2023-09-29 | [7dc6385f](https://github.com/nostr-protocol/nips/commit/7dc6385f) | [NIP-57](57.md) | optional 'a' tag was included in `zap receipt` |
|
| 2023-11-20 | [7822a8b1](https://github.com/nostr-protocol/nips/commit/7822a8b1) | [51](51.md) | `kind: 30001` was deprecated |
|
||||||
| 2023-08-21 | [89915e02](https://github.com/nostr-protocol/nips/commit/89915e02) | [NIP-11](11.md) | 'min_prefix' was removed |
|
| 2023-11-20 | [7822a8b1](https://github.com/nostr-protocol/nips/commit/7822a8b1) | [51](51.md) | the meaning of `kind: 30000` was changed |
|
||||||
| 2023-08-20 | [37c4375e](https://github.com/nostr-protocol/nips/commit/37c4375e) | [NIP-01](01.md) | replaceable events with same timestamp should be retained event with lowest id |
|
| 2023-11-11 | [cbdca1e9](https://github.com/nostr-protocol/nips/commit/cbdca1e9) | [84](84.md) | 'range' tag was removed |
|
||||||
| 2023-08-15 | [88ee873c](https://github.com/nostr-protocol/nips/commit/88ee873c) | [NIP-15](15.md) | 'countries' tag was renamed to 'regions' |
|
| 2023-11-10 | [c945d8bd](https://github.com/nostr-protocol/nips/commit/c945d8bd) | [32](32.md) | 'l' tag annotations was removed |
|
||||||
| 2023-08-14 | [72bb8a12](https://github.com/nostr-protocol/nips/commit/72bb8a12) | [NIP-12](12.md) | NIP-12, 16, 20 and 33 were merged into NIP-01 |
|
| 2023-11-07 | [108b7f16](https://github.com/nostr-protocol/nips/commit/108b7f16) | [01](01.md) | 'OK' message must have 4 items |
|
||||||
| 2023-08-14 | [72bb8a12](https://github.com/nostr-protocol/nips/commit/72bb8a12) | [NIP-16](16.md) | NIP-12, 16, 20 and 33 were merged into NIP-01 |
|
| 2023-10-17 | [cf672b76](https://github.com/nostr-protocol/nips/commit/cf672b76) | [03](03.md) | 'block' tag was removed |
|
||||||
| 2023-08-14 | [72bb8a12](https://github.com/nostr-protocol/nips/commit/72bb8a12) | [NIP-20](20.md) | NIP-12, 16, 20 and 33 were merged into NIP-01 |
|
| 2023-09-29 | [7dc6385f](https://github.com/nostr-protocol/nips/commit/7dc6385f) | [57](57.md) | optional 'a' tag was included in `zap receipt` |
|
||||||
| 2023-08-14 | [72bb8a12](https://github.com/nostr-protocol/nips/commit/72bb8a12) | [NIP-33](33.md) | NIP-12, 16, 20 and 33 were merged into NIP-01 |
|
| 2023-08-21 | [89915e02](https://github.com/nostr-protocol/nips/commit/89915e02) | [11](11.md) | 'min_prefix' was removed |
|
||||||
| 2023-08-11 | [d87f8617](https://github.com/nostr-protocol/nips/commit/d87f8617) | [NIP-25](25.md) | empty `content` should be considered as "+" |
|
| 2023-08-20 | [37c4375e](https://github.com/nostr-protocol/nips/commit/37c4375e) | [01](01.md) | replaceable events with same timestamp should be retained event with lowest id |
|
||||||
| 2023-08-01 | [5d63b157](https://github.com/nostr-protocol/nips/commit/5d63b157) | [NIP-57](57.md) | 'zap' tag was changed |
|
| 2023-08-15 | [88ee873c](https://github.com/nostr-protocol/nips/commit/88ee873c) | [15](15.md) | 'countries' tag was renamed to 'regions' |
|
||||||
| 2023-07-15 | [d1814405](https://github.com/nostr-protocol/nips/commit/d1814405) | [NIP-01](01.md) | `since` and `until` filters should be `since <= created_at <= until` |
|
| 2023-08-14 | [72bb8a12](https://github.com/nostr-protocol/nips/commit/72bb8a12) | [12](12.md), [16](16.md), [20](20.md), [33](33.md) | NIP-12, 16, 20 and 33 were merged into NIP-01 |
|
||||||
| 2023-07-12 | [a1cd2bd8](https://github.com/nostr-protocol/nips/commit/a1cd2bd8) | [NIP-25](25.md) | custom emoji was supported |
|
| 2023-08-11 | [d87f8617](https://github.com/nostr-protocol/nips/commit/d87f8617) | [25](25.md) | empty `content` should be considered as "+" |
|
||||||
| 2023-06-18 | [83cbd3e1](https://github.com/nostr-protocol/nips/commit/83cbd3e1) | [NIP-11](11.md) | 'image' was renamed to 'icon' |
|
| 2023-08-01 | [5d63b157](https://github.com/nostr-protocol/nips/commit/5d63b157) | [57](57.md) | 'zap' tag was changed |
|
||||||
| 2023-04-13 | [bf0a0da6](https://github.com/nostr-protocol/nips/commit/bf0a0da6) | [NIP-15](15.md) | different NIP was re-added as NIP-15 |
|
| 2023-07-15 | [d1814405](https://github.com/nostr-protocol/nips/commit/d1814405) | [01](01.md) | `since` and `until` filters should be `since <= created_at <= until` |
|
||||||
| 2023-04-09 | [fb5b7c73](https://github.com/nostr-protocol/nips/commit/fb5b7c73) | [NIP-15](15.md) | NIP-15 was merged into NIP-01 |
|
| 2023-07-12 | [a1cd2bd8](https://github.com/nostr-protocol/nips/commit/a1cd2bd8) | [25](25.md) | custom emoji was supported |
|
||||||
| 2023-03-29 | [599e1313](https://github.com/nostr-protocol/nips/commit/599e1313) | [NIP-18](18.md) | NIP-18 was bring back |
|
| 2023-06-18 | [83cbd3e1](https://github.com/nostr-protocol/nips/commit/83cbd3e1) | [11](11.md) | 'image' was renamed to 'icon' |
|
||||||
| 2023-03-15 | [e1004d3d](https://github.com/nostr-protocol/nips/commit/e1004d3d) | [NIP-19](19.md) | `1: relay` was changed to optionally |
|
| 2023-04-13 | [bf0a0da6](https://github.com/nostr-protocol/nips/commit/bf0a0da6) | [15](15.md) | different NIP was re-added as NIP-15 |
|
||||||
|
| 2023-04-09 | [fb5b7c73](https://github.com/nostr-protocol/nips/commit/fb5b7c73) | [15](15.md) | NIP-15 was merged into NIP-01 |
|
||||||
|
| 2023-03-29 | [599e1313](https://github.com/nostr-protocol/nips/commit/599e1313) | [18](18.md) | NIP-18 was bring back |
|
||||||
|
| 2023-03-15 | [e1004d3d](https://github.com/nostr-protocol/nips/commit/e1004d3d) | [19](19.md) | `1: relay` was changed to optionally |
|
||||||
|
|
||||||
Breaking changes prior to 2023-03-01 are not yet documented.
|
Breaking changes prior to 2023-03-01 are not yet documented.
|
||||||
|
|
||||||
@@ -60,4 +63,3 @@ Breaking changes prior to 2023-03-01 are not yet documented.
|
|||||||
|
|
||||||
- If it isn't clear that a change is breaking or not, we list it.
|
- If it isn't clear that a change is breaking or not, we list it.
|
||||||
- The date is the date it was merged, not necessarily the date of the commit.
|
- The date is the date it was merged, not necessarily the date of the commit.
|
||||||
|
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -78,6 +78,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
- [NIP-61: Nutzaps](61.md)
|
- [NIP-61: Nutzaps](61.md)
|
||||||
- [NIP-64: Chess (PGN)](64.md)
|
- [NIP-64: Chess (PGN)](64.md)
|
||||||
- [NIP-65: Relay List Metadata](65.md)
|
- [NIP-65: Relay List Metadata](65.md)
|
||||||
|
- [NIP-68: Picture-first feeds](68.md)
|
||||||
- [NIP-69: Peer-to-peer Order events](69.md)
|
- [NIP-69: Peer-to-peer Order events](69.md)
|
||||||
- [NIP-70: Protected Events](70.md)
|
- [NIP-70: Protected Events](70.md)
|
||||||
- [NIP-71: Video Events](71.md)
|
- [NIP-71: Video Events](71.md)
|
||||||
@@ -86,6 +87,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
- [NIP-75: Zap Goals](75.md)
|
- [NIP-75: Zap Goals](75.md)
|
||||||
- [NIP-78: Application-specific data](78.md)
|
- [NIP-78: Application-specific data](78.md)
|
||||||
- [NIP-84: Highlights](84.md)
|
- [NIP-84: Highlights](84.md)
|
||||||
|
- [NIP-86: Relay Management API](86.md)
|
||||||
- [NIP-89: Recommended Application Handlers](89.md)
|
- [NIP-89: Recommended Application Handlers](89.md)
|
||||||
- [NIP-90: Data Vending Machines](90.md)
|
- [NIP-90: Data Vending Machines](90.md)
|
||||||
- [NIP-92: Media Attachments](92.md)
|
- [NIP-92: Media Attachments](92.md)
|
||||||
@@ -93,6 +95,8 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
- [NIP-96: HTTP File Storage Integration](96.md)
|
- [NIP-96: HTTP File Storage Integration](96.md)
|
||||||
- [NIP-98: HTTP Auth](98.md)
|
- [NIP-98: HTTP Auth](98.md)
|
||||||
- [NIP-99: Classified Listings](99.md)
|
- [NIP-99: Classified Listings](99.md)
|
||||||
|
- [NIP-7D: Threads](7D.md)
|
||||||
|
- [NIP-C7: Chats](C7.md)
|
||||||
|
|
||||||
## Event Kinds
|
## Event Kinds
|
||||||
|
|
||||||
@@ -107,14 +111,15 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
| `6` | Repost | [18](18.md) |
|
| `6` | Repost | [18](18.md) |
|
||||||
| `7` | Reaction | [25](25.md) |
|
| `7` | Reaction | [25](25.md) |
|
||||||
| `8` | Badge Award | [58](58.md) |
|
| `8` | Badge Award | [58](58.md) |
|
||||||
| `9` | Group Chat Message | [29](29.md) |
|
| `9` | Chat Message | [C7](C7.md) |
|
||||||
| `10` | Group Chat Threaded Reply | 29 (deprecated) |
|
| `10` | Group Chat Threaded Reply | 29 (deprecated) |
|
||||||
| `11` | Group Thread | [29](29.md) |
|
| `11` | Thread | [7D](7D.md) |
|
||||||
| `12` | Group Thread Reply | 29 (deprecated) |
|
| `12` | Group Thread Reply | 29 (deprecated) |
|
||||||
| `13` | Seal | [59](59.md) |
|
| `13` | Seal | [59](59.md) |
|
||||||
| `14` | Direct Message | [17](17.md) |
|
| `14` | Direct Message | [17](17.md) |
|
||||||
| `16` | Generic Repost | [18](18.md) |
|
| `16` | Generic Repost | [18](18.md) |
|
||||||
| `17` | Reaction to a website | [25](25.md) |
|
| `17` | Reaction to a website | [25](25.md) |
|
||||||
|
| `20` | Picture | [68](68.md) |
|
||||||
| `40` | Channel Creation | [28](28.md) |
|
| `40` | Channel Creation | [28](28.md) |
|
||||||
| `41` | Channel Metadata | [28](28.md) |
|
| `41` | Channel Metadata | [28](28.md) |
|
||||||
| `42` | Channel Message | [28](28.md) |
|
| `42` | Channel Message | [28](28.md) |
|
||||||
@@ -179,7 +184,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
| `24242` | Blobs stored on mediaservers | [Blossom][blossom] |
|
| `24242` | Blobs stored on mediaservers | [Blossom][blossom] |
|
||||||
| `27235` | HTTP Auth | [98](98.md) |
|
| `27235` | HTTP Auth | [98](98.md) |
|
||||||
| `30000` | Follow sets | [51](51.md) |
|
| `30000` | Follow sets | [51](51.md) |
|
||||||
| `30001` | Generic lists | [51](51.md) |
|
| `30001` | Generic lists | 51 (deprecated) |
|
||||||
| `30002` | Relay sets | [51](51.md) |
|
| `30002` | Relay sets | [51](51.md) |
|
||||||
| `30003` | Bookmark sets | [51](51.md) |
|
| `30003` | Bookmark sets | [51](51.md) |
|
||||||
| `30004` | Curation sets | [51](51.md) |
|
| `30004` | Curation sets | [51](51.md) |
|
||||||
@@ -278,6 +283,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
|
|||||||
| `L` | label namespace | -- | [32](32.md) |
|
| `L` | label namespace | -- | [32](32.md) |
|
||||||
| `m` | MIME type | -- | [94](94.md) |
|
| `m` | MIME type | -- | [94](94.md) |
|
||||||
| `p` | pubkey (hex) | relay URL, petname | [01](01.md), [02](02.md) |
|
| `p` | pubkey (hex) | relay URL, petname | [01](01.md), [02](02.md) |
|
||||||
|
| `P` | pubkey (hex) | -- | [57](57.md) |
|
||||||
| `q` | event id (hex) | relay URL, pubkey (hex) | [18](18.md) |
|
| `q` | event id (hex) | relay URL, pubkey (hex) | [18](18.md) |
|
||||||
| `r` | a reference (URL, etc) | -- | [24](24.md), [25](25.md) |
|
| `r` | a reference (URL, etc) | -- | [24](24.md), [25](25.md) |
|
||||||
| `r` | relay url | marker | [65](65.md) |
|
| `r` | relay url | marker | [65](65.md) |
|
||||||
|
|||||||
Reference in New Issue
Block a user