db | ||
events | ||
requests | ||
utils | ||
.gitignore | ||
config.example.yml | ||
go.mod | ||
go.sum | ||
license | ||
main.go | ||
readme.md |
GRAIN 🌾 WIP
TODO:
- Handling kind 0 and kind 1 EVENTS
- Validation Checking
- updating (replacing replacable notes)
- Handle REQs (requests)
- Handle CLOSE
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 supports the NIP-01 protocol, focusing on processing user metadata and text notes.
Features
- NIP-01 Protocol Support: GRAIN fully supports the NIP-01 protocol for WebSocket communication.
- Event Processing: Handles events of kind 0 (user metadata) and kind 1 (text note).
- 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.
Installation
-
Clone the repository:
git clone https://github.com/oceanslim/grain.git cd grain
-
Build the executable:
go build -o grain.exe
The
grain.exe
will be placed in a temporary directory within...\appdata\local\temp\go-build
and subdirectories.
Usage
To run the GRAIN relay:
./grain.exe
Configuration 🍃
Configuration options can be set through environment variables or a configuration file. Example configuration:
server:
port: 8080
database:
type: mongodb
connection_string: mongodb://localhost:27017
database_name: grain
logging:
level: info
WebSocket Endpoints
- Connect: / - Clients can connect to this endpoint to start a WebSocket session.
- Publish Event: Send events of kind 0 (user metadata) or kind 1 (text note) to the relay.
Development
To contribute to GRAIN, follow these steps:
- Fork the repository.
- Create a new branch:
git checkout -b feature-branch
- Make your changes.
- Commit your changes:
git commit -m "Description of changes"
- Push to the branch:
git push origin feature-branch
- Create a Pull Request.
Contributing
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!