Rnostr
A high-performance and scalable nostr relay written in Rust.
Features
- Most NIPs support
- Easy to use, no third-party service dependencies
- High performance, Events is stored in LMDB, Inspired by strfry
- Most configurations can be hot reloaded
- Scalability, can be used as a library to create custom relays
NIPs
- NIP-01: Basic protocol flow description
- NIP-02: Contact list and petnames
- NIP-04: Encrypted Direct Message
- NIP-09: Event deletion
- NIP-11: Relay information document
- NIP-12: Generic tag queries
- NIP-13: Proof of Work
- NIP-15: End of Stored Events Notice
- NIP-16: Event Treatment
- NIP-20: Command Results
- NIP-22: Event
created_atLimits - NIP-26: Delegated Event Signing
- NIP-28: Public Chat
- NIP-33: Parameterized Replaceable Events
- NIP-40: Expiration Timestamp
- NIP-42: Authentication of clients to relays
- NIP-45: Counting results
- NIP-50: Keywords filter
Usage
Prepare source and config
git clone https://github.com/rnostr/rnostr.git
cd rnostr
mkdir config
cp ./rnostr.example.toml ./config/rnostr.toml
Edit the ./config/rnostr.toml, remember to modify network.host to 0.0.0.0 for public access.
Build and run
# Build
cargo build --release
# Show help
./target/release/rnostr relay --help
# Run with config hot reload
./target/release/rnostr relay -c ./config/rnostr.toml --watch
Docker
# Create data dir
mkdir ./data
# Build
docker build . -t rnostr/rnostr
# Build in China need to configure the mirror.
docker build . -t rnostr/rnostr --build-arg BASE=mirror_cn
# Run
docker run -it --rm -p 8080:8080 \
--user=$(id -u) \
-v $(pwd)/data:/rnostr/data \
-v $(pwd)/config:/rnostr/config \
--name rnostr rnostr/rnostr:latest
See docker compose example
Commands
rnostr provides other commands such as import and export.
./target/release/rnostr --help
# Usage: rnostr <COMMAND>
# Commands:
# import Import data from jsonl file
# export Export data to jsonl file
# bench Benchmark filter
# relay Start nostr relay server
# help Print this message or the help of the given subcommand(s)
# Options:
# -h, --help Print help
# -V, --version Print version