Go Relay Architecture for Implementing Nostr 🌾
Go to file
2024-07-19 21:24:34 -04:00
db code seperated, kind 1 insert working, not validating 2024-07-19 21:09:42 -04:00
events kind 0 implemented, not validating 2024-07-19 21:12:06 -04:00
requests remove unneeded code 2024-07-19 21:23:13 -04:00
utils code seperated, kind 1 insert working, not validating 2024-07-19 21:09:42 -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 code seperated, kind 1 insert working, not validating 2024-07-19 21:09:42 -04:00
go.sum code seperated, kind 1 insert working, not validating 2024-07-19 21:09:42 -04:00
license first commit 2024-07-19 18:07:04 -04:00
main.go remove unneeded code 2024-07-19 21:24:34 -04:00
readme.md readme todo 2024-07-19 20:38:35 -04:00

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

  1. Clone the repository:

    git clone https://github.com/oceanslim/grain.git
    cd grain
    
  2. 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:

  1. Fork the repository.
  2. Create a new branch:
git checkout -b feature-branch
  1. Make your changes.
  2. Commit your changes:
git commit -m "Description of changes"
  1. Push to the branch:
git push origin feature-branch
  1. 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!