Is Grain missing any core features that every nostr relay should have? #asknostr #dev
Grain 🌾 Core Features
1. Flexible Event Handling
Supports all event kinds defined by the Nostr protocol.
Handles:
REQ Messages for client data requests.
Configurable size and rate limits for different event kinds and categories.
2. Authentication (NIP-42 AUTH)
Configurable authentication support, allowing authenticated communication between clients and the relay.
Can be toggled on or off, with support for specifying the relay URL for AUTH.
3. Server Configuration
Easily configurable server options, including:
Port: Define which port the server listens on.
Timeouts: Set read, write, and idle timeouts for connections.
Connection Limits: Control the maximum number of simultaneous connections and subscriptions per client.
4. Resource Management
Set resource limits for optimal performance:
CPU core and memory usage limits.
Heap size for controlling Go's garbage collector.
Limit the number of concurrent goroutines for better stability.
5. Rate and Size Limiting
WebSocket and Event Rate Limiting: Manage the rate and burst limits for WebSocket messages and events.
Size Limits: Define maximum payload sizes for events, with specific limits for different event kinds.
Category-Based Limits: Tailor rate limits for various event categories like ephemeral, replaceable, and regular.
6. Whitelisting and Blacklisting
Pubkey Whitelist: Allow only specific pubkeys or npubs to interact with the relay.
Kind Whitelist: Control which event kinds are permitted.
Domain Whitelist: Specify domains for fetching .well-known/nostr.json pubkey lists.
Blacklist: Manage permanent and temporary bans with:
Automatic bans for messages containing specific words.
Permanent bans after a certain number of temporary bans.
7. Event Purging
Configurable event purging to maintain storage efficiency.
Define how long events are kept and set purge intervals.
Fine-tune purging by event category or event kind.
Optionally exclude whitelisted pubkeys from being purged.
Repo here:
https://github.com/0ceanSlim/grain