Go to file
2022-09-11 11:01:36 -05:00
docs feat: limit event publishing to NIP-05 verified users 2022-02-12 09:29:25 -06:00
src improvement: do not create NIP-05 thread if feature is disabled 2022-09-11 11:01:36 -05:00
.build.yml build: add release flags, save artifacts 2022-09-11 10:21:29 -05:00
.gitignore feat: store events in SQLite and allow querying 2021-12-11 15:48:59 -06:00
.pre-commit-config.yaml build: add pre-commit config 2022-09-06 05:44:22 -05:00
Cargo.lock improvement: upgrade multiple dependencies 2022-09-10 22:42:52 -05:00
Cargo.toml improvement: upgrade uuid dependency 2022-09-02 12:37:11 -05:00
config.toml feat(NIP-22): advertise support for event created_at limits 2022-09-10 20:40:10 -05:00
Dockerfile build: bump version to 0.6.2 2022-08-18 17:52:16 -07:00
LICENSE docs: add MIT license 2021-12-11 15:52:25 -06:00
README.md docs: show build status for master branch only 2022-09-10 22:53:41 -05:00
reverse-proxy.md docs: add NGINX configuration example 2022-08-20 09:35:01 -07:00
rustfmt.toml chore: formatting 2022-08-21 09:51:34 -07: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.

builds.sr.ht status

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
  • 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
  • NIP-15: End of stored events notice
  • NIP-16: Replaceable and ephemeral events
  • NIP-22: Event created_at limits (future-dated events only)

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

For development discussions, please feel free to use the sourcehut mailing list. Or, drop by the Nostr Telegram Channel.

To chat about nostr-rs-relay on nostr itself; visit our channel on anigma or another client that supports NIP-28 chats:

  • 2ad246a094fee48c6e455dd13d759d5f41b5a233120f5719d81ebc1935075194

License

This project is MIT licensed.