Pain Points / design limitations
- Limit is useless for subscriptions with multiple filters (as how to prioritise which filter results are most important? Left to right?)
- Hard to do pagination (using since/until, but what limit to use? What if older events shared after you fetch, you’ve now missed it)
- Race condition between EOSE and CLOSE subscription when you don’t want to stream (option to only return existing data only, without newer broadcast results)
- Events from new pubkeys are missing basic kind0 data (ideally embed name/display_name for first pubkey event)
- Websocket congestion control and bottlenecks (single event streamed at a time, blocked by larger events FIFO)
- Unable to query for ranges of kinds (e.g. {"kinds": [30000-39999]})
- More?
Missing Features
- Option to request metadata for events (like reaction or reply counts, etc)
- Reverse sorting capability
- Ability to query with POW minimum (today only starts with N zeros, and support for that looks to be EOL as a supported query)
- Unable to request related events be included in the same request (e.g. include all replies to event with depth x)
- Relay pre-filtering (clients should enforce filter checks locally, however this can reduce data usage)
- Keyword filtering (we have NIP-50, however I think we can improve if we review a new request structure)
- Tag filtering (e.g. without "content-warning")
- Pubkey muting (eg. share cuckoo filter of pubkeys to skip/ignore)
- Ability to share cuckoo filters of received events (maybe per relay session - eg. only send profile kind 0 once, no need to send again unless replaced)
- More?
Questions
- How much caching or deduping logic in server side vs client side - how do we balance and perhaps allow disable server logic?
- Can we perhaps pre-can some common client app queries so relays can cache the data for better performance? Perhaps in areas like DMs, notifications, etc.
- Do we need to consider relay indexers/aggregators and any needs they may have?
- Potential for perhaps client config (e.g. a mobile client can request more data saving features be enabled)