relay | ||
tests | ||
web | ||
.gitignore | ||
config.example.yml | ||
go.mod | ||
go.sum | ||
license | ||
main.go | ||
readme.md | ||
relay_metadata.example.json |
GRAIN 🌾
Go Relay Archetecture for Implementing Nostr
GRAIN is an open-source Nostr relay implementation written in Go. This project aims to provide a robust and efficient Nostr relay that currently supports the NIP-01 of the nostr protocol.
Features
- NIP-01 Protocol Support: GRAIN (nearly)fully supports NIP-01 for WebSocket communication.
- Event Processing: Handles all events by category and kind.
- MongoDB 🍃: Utilizes MongoDB to store and manage events efficiently.
- Scalability: Built with Go, ensuring high performance and scalability.
- Open Source: Licensed under the MIT License, making it free to use and modify.
Configuration
Configuration options can be set through a configuration file.
There is an example config in this repo. Copy the example config to config.yml to get started
cp config.example.yml config.yml
Additionally, you may set metadata Information for your relay with relay_matadata.json
cp relay_metadata.example.json relay_metadata.json
TODO
- configurable event purging
- by category
- by kind
- by time since latest
- create whitelist/blacklist functionality
for:
- valid nip05 domain
- pubkey
- npub
- kind int
- kind 1 wordlist
Development
To contribute to GRAIN, follow these steps:
-
Fork the repository.
-
Make your changes.
-
Commit your changes:
git commit -m "Description of changes"
-
Push to the repo:
git push
-
Create a Pull Request.
License
This project is Open Source and licensed under the MIT License. See the LICENSE file for details.
Acknowledgments
Special thanks to the Nostr community for their continuous support and contributions.
Feel free to reach out with any questions or issues you encounter while using GRAIN. Happy coding!