Go to file
2022-01-26 21:48:44 -06:00
src feat: allow whitelisting of pubkeys for new events 2022-01-26 21:39:03 -06:00
.gitignore feat: store events in SQLite and allow querying 2021-12-11 15:48:59 -06:00
Cargo.lock build: bump version to 0.4.1 2022-01-26 21:48:44 -06:00
Cargo.toml build: bump version to 0.4.1 2022-01-26 21:48:44 -06:00
config.toml feat: allow whitelisting of pubkeys for new events 2022-01-26 21:39:03 -06:00
Dockerfile fix: docker run references the correct database file 2021-12-31 14:05:11 -06:00
LICENSE docs: add MIT license 2021-12-11 15:52:25 -06:00
README.md feat: allow whitelisting of pubkeys for new events 2022-01-26 21:39:03 -06:00
reverse-proxy.md docs: add timeout for reverse-proxy example 2022-01-19 21:19:12 -06:00
rustfmt.toml feat: cargo build files and expected dependencies 2021-12-05 08:42:28 -06:00

nostr-rs-relay

This is a nostr relay, written in Rust. It currently supports the entire relay protocol, and has a SQLite persistence layer.

The project master repository is available on sourcehut, and is mirrored on GitHub.

Features

NIPs with a relay-specific implementation are listed here.

  • NIP-01: Core event model
  • NIP-01: Hide old metadata events
  • NIP-01: Id/Author prefix search (experimental)
  • NIP-02: Hide old contact list events
  • NIP-03: OpenTimestamps
  • NIP-05: Mapping Nostr keys to DNS identifiers
  • NIP-09: Event deletion
  • NIP-11: Relay information document
  • NIP-12: Generic tag search (experimental)

Quick Start

The provided Dockerfile will compile and build the server application. Use a bind mount to store the SQLite database outside of the container image, and map the container's 8080 port to a host port (7000 in the example below).

$ docker build -t nostr-rs-relay .

$ docker run -it -p 7000:8080 \
  --mount src=$(pwd)/data,target=/usr/src/app/db,type=bind nostr-rs-relay

[2021-12-31T19:58:31Z INFO  nostr_rs_relay] listening on: 0.0.0.0:8080
[2021-12-31T19:58:31Z INFO  nostr_rs_relay::db] opened database "/usr/src/app/db/nostr.db" for writing
[2021-12-31T19:58:31Z INFO  nostr_rs_relay::db] DB version = 2

Use a nostr client such as noscl to publish and query events.

$ noscl publish "hello world"
Sent to 'ws://localhost:8090'.
Seen it on 'ws://localhost:8090'.
$ noscl home
Text Note [81cf...2652] from 296a...9b92 5 seconds ago
  hello world

A pre-built container is also available on DockerHub: https://hub.docker.com/r/scsibug/nostr-rs-relay

Configuration

The sample config.toml file demonstrates the configuration available to the relay. This file is optional, but may be mounted into a docker container like so:

$ docker run -it -p 7000:8080 \
  --mount src=$(pwd)/config.toml,target=/usr/src/app/config.toml,type=bind \
  --mount src=$(pwd)/data,target=/usr/src/app/db,type=bind \
  nostr-rs-relay

Options include rate-limiting, event size limits, and network address settings.

Reverse Proxy Configuration

For examples of putting the relay behind a reverse proxy (for TLS termination, load balancing, and other features), see Reverse Proxy.

Dev Channel

The current dev discussions for this project is happening at https://discord.gg/ufG6fH52Vk. Drop in to query any development related questions.

License

This project is MIT licensed.