Go Relay Architecture for Implementing Nostr 🌾
Go to file
2024-07-22 20:08:04 -04:00
db server is handling requests 2024-07-20 08:41:47 -04:00
events dynamically making events in database 2024-07-22 20:08:04 -04:00
server dynamically making events in database 2024-07-22 20:08:04 -04:00
utils dynamically making events in database 2024-07-22 20:08:04 -04:00
.gitignore code seperated, kind 1 insert working, not validating 2024-07-19 21:09:42 -04:00
config.example.yml code seperated, kind 1 insert working, not validating 2024-07-19 21:09:42 -04:00
go.mod readme updated 2024-07-22 15:33:54 -04:00
go.sum readme updated 2024-07-22 15:33:54 -04:00
license first commit 2024-07-19 18:07:04 -04:00
main.go dynamically making events in database 2024-07-22 20:08:04 -04:00
readme.md readme updated 2024-07-22 15:33:54 -04:00

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 fully supports the NIP-01 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.

Configuration 🍃

Configuration options can be set through environment variables or 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

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.

TODO

  • Handle more kinds
  • create whitelist/blacklist functionality for:
    • valid nip05 domain
    • pubkey
    • npub
    • kind int
    • kind 1 wordlist
  • Rate limit Events

Development

To contribute to GRAIN, follow these steps:

  1. Fork the repository.
  2. Make your changes.
  3. Commit your changes:
git commit -m "Description of changes"
  1. Push to the repo:
git push
  1. 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!