From 7ec427190822b0c61446b678b37c86c98c9beea6 Mon Sep 17 00:00:00 2001 From: Sandwich <299465+dskvr@users.noreply.github.com> Date: Tue, 3 Mar 2026 17:36:57 +0100 Subject: NIP-91: AND operator for filters (Formerly NIP-119) (#1365) Co-authored-by: dskvr --- 91.md | 18 ++++++++++++++++++ README.md | 12 ++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 91.md diff --git a/91.md b/91.md new file mode 100644 index 0000000..7ac15ae --- /dev/null +++ b/91.md @@ -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` diff --git a/README.md b/README.md index c094d47..e8a21f0 100644 --- a/README.md +++ b/README.md @@ -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 -- cgit v1.2.3