GRAIN Relay v0.3.0: Nostr Login & Profile Page, User Sync Functionality
GRAIN is an open-source Nostr relay implementation written in Go, aiming to provide a highly efficient and configurable Nostr relay.

"GM 🌞 New Grain Release, finally. 🌾 Appreciate any support I receive!" announced OceanSlim.
- Version 0.3.0 of GRAIN introduces Nostr login and profile page, allowing users to manage their relay data, experimental user sync functionality for syncing user events from their outboxes, and bug fixes and related improvements.
- The upcoming release will prioritize improvements in logging and debugging, specifically by enhancing error reporting, improving user sync tracking, and optimizing the entire relay process.
"Thanks for your patience on this release! Most of the work is done by a single dev, so feedback and testing are always appreciated," said the developer.
What's new
- Nostr login and profile page. Added Nostr login to the front end for authentication via Nostr key. After logging in, users access a profile page showing their Kind 0 metadata if available on the relay.
- Upcoming updates will enhance the front end with features like event management, delete requests, relay configuration for operators, and a dashboard displaying relay statistics.
- Experimental: User sync functionality. It allows the relay to sync events for its users from their outboxes. The feature supports configurable sync options for defining which event kinds to sync, limits on how many events to retrieve, and excluding non-whitelisted users.
- NOTE: May not sync all events immediately. A patch to allow disabling the initial sync on startup is coming soon, along with enhanced logging for better tracking of sync behavior.
- Fix: Live config reloading. The relay now automatically reloads its configuration when changes are detected, laying groundwork for a future admin control panel.
- WebSocket client handling overhaul to ensure more reliable request handling and event processing.
- Fixed fragmented event assembly. GRAIN relay now properly handles long events split across multiple messages before passing them to the handler.
- Database improvements. Users can now configure the database name instead of being locked to the default name, allowing for running multiple Grain instances with different configs while using the same MongoDB backend.
- Rafactoring:
- Renamed all instances of parameterized replaceable event to correctly read the addressable event.
- Removed manual max goroutine configuration—now dynamically managed based on heap, CPU cores, and memory usage.
Full Changelog: v0.2.1...v0.3.0
Announcement / Archive
GitHub Repo
- Do you want more? Subscribe and get No Bullshit GM report straight to your mailbox and No Bullshit Bitcoin on Nostr.
- Feedback or tips? Drop it here.
- #FREESAMOURAI