Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions 91.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# NIP-91: AND Operator in Filters

Enable `AND` within a single tag filter by using an `&` modifier in filters for indexable tags.

```
filters: {
"kinds": [1],
"&t": ["meme", "cat"],
"#t": ["meme", "cat", "black", "white"]
}
// returns kind `1` events with `t` tags that have both "meme" and "cat" that have the tag "black" or "white" by NIP-91 relays, whereas relays without NIP-91 return entire result for local intersection.
```

## Rules

- `AND` **MUST** take precedence over `OR` by relays
- Any tag value used in `AND` **SHOULD** be ignored in `OR` by relays supporting NIP-91
- Tag values used in `AND` by libraries and clients **MUST** include standard `OR` tags [`#`] for compatibility with relays that do not support NIP-91.
- libraries and clients `SHOULD` run `&` post-filters after recieving results from relays; already standard practice.

12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
- [NIP-84: Highlights](84.md)
- [NIP-89: Recommended Application Handlers](89.md)
- [NIP-90: Data Vending Machines](90.md)
- [NIP-91: AND filters](91.md)
- [NIP-92: Media Attachments](92.md)
- [NIP-94: File Metadata](94.md)
- [NIP-96: HTTP File Storage Integration](96.md)
Expand Down Expand Up @@ -201,6 +202,17 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
[lnpub]: https://github.com/shocknet/Lightning.Pub/blob/master/proto/autogenerated/client.md
[joinstr]: https://gitlab.com/1440000bytes/joinstr/-/blob/main/NIP.md

## Filters

| kind | description | NIP |
| --------------- | -------------------------- | ------------------------ |
| `authors` | by pubkey | [01](01.md) |
| `ids` | by ids | [01](01.md) |
| `kinds` | by kinds | [01](01.md) |
| `#{}` | by indexable tag (OR) | [01](01.md) |
| `&{}` | by indexable tag (AND) | [91](91.md) |
| `search` | by search times | [50](50.md) |

## Message types

### Client to Relay
Expand Down