NIP-91: AND operator for filters (Formerly NIP-119) (#1365)

Co-authored-by: dskvr <dskvr@users.noreply.github.com>
This commit is contained in:
Sandwich
2026-03-03 17:36:57 +01:00
committed by GitHub
parent eeb532b5ff
commit 7ec4271908
2 changed files with 30 additions and 0 deletions

18
91.md Normal file
View File

@@ -0,0 +1,18 @@
# 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": ["black", "white"]
}
// returns kind `1` events with `t` tags that have both "meme" and "cat" that have the tag "black" or "white"
```
## Rules
- `AND` **MUST** take precedence over `OR`
- Tag values used in `AND` **SHOULD NOT** be used in standard `OR` tags [`#`]
- Any tag value used in `AND` **SHOULD** be ignored in `OR`

View File

@@ -98,6 +98,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
- [NIP-88: Polls](88.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) --- **unrecommended**: replaced by blossom APIs
@@ -316,6 +317,17 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
[marmot]: https://github.com/marmot-protocol/marmot
## 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