81045ad3d0
Updating anyhow v1.0.64 -> v1.0.65 Adding codespan-reporting v0.11.1 Updating const_format v0.2.28 -> v0.2.30 Updating const_format_proc_macros v0.2.22 -> v0.2.29 Updating crossbeam-utils v0.8.11 -> v0.8.12 Adding cxx v1.0.79 Adding cxx-build v1.0.79 Adding cxxbridge-flags v1.0.79 Adding cxxbridge-macro v1.0.79 Updating digest v0.10.3 -> v0.10.5 Updating hdrhistogram v7.5.1 -> v7.5.2 Updating iana-time-zone v0.1.50 -> v0.1.51 Adding iana-time-zone-haiku v0.1.1 Updating itertools v0.10.3 -> v0.10.5 Updating itoa v1.0.3 -> v1.0.4 Updating js-sys v0.3.59 -> v0.3.60 Updating libc v0.2.132 -> v0.2.135 Adding link-cplusplus v1.0.7 Updating lock_api v0.4.8 -> v0.4.9 Updating once_cell v1.14.0 -> v1.15.0 Updating openssl v0.10.41 -> v0.10.42 Updating openssl-sys v0.9.75 -> v0.9.76 Updating pest v2.3.0 -> v2.4.0 Updating pest_derive v2.3.0 -> v2.4.0 Updating pest_generator v2.3.0 -> v2.4.0 Updating pest_meta v2.3.0 -> v2.4.0 Updating proc-macro2 v1.0.43 -> v1.0.47 Updating rand_core v0.6.3 -> v0.6.4 Updating raw-cpuid v10.5.0 -> v10.6.0 Adding scratch v1.0.2 Updating serde v1.0.144 -> v1.0.145 Updating serde_derive v1.0.144 -> v1.0.145 Updating serde_json v1.0.85 -> v1.0.86 Adding sha1 v0.10.5 Updating smallvec v1.9.0 -> v1.10.0 Updating syn v1.0.99 -> v1.0.102 Adding termcolor v1.1.3 Updating thiserror v1.0.34 -> v1.0.37 Updating thiserror-impl v1.0.34 -> v1.0.37 Updating tokio v1.21.0 -> v1.21.2 Updating tokio-stream v0.1.9 -> v0.1.11 Updating tonic v0.8.1 -> v0.8.2 Updating tower-layer v0.3.1 -> v0.3.2 Updating tracing v0.1.36 -> v0.1.37 Updating tracing-attributes v0.1.22 -> v0.1.23 Updating tracing-core v0.1.29 -> v0.1.30 Updating tracing-subscriber v0.3.15 -> v0.3.16 Updating unicode-ident v1.0.3 -> v1.0.5 Updating unicode-normalization v0.1.21 -> v0.1.22 Adding unicode-width v0.1.10 Updating uuid v1.1.2 -> v1.2.1 Updating wasm-bindgen v0.2.82 -> v0.2.83 Updating wasm-bindgen-backend v0.2.82 -> v0.2.83 Updating wasm-bindgen-macro v0.2.82 -> v0.2.83 Updating wasm-bindgen-macro-support v0.2.82 -> v0.2.83 Updating wasm-bindgen-shared v0.2.82 -> v0.2.83 Updating web-sys v0.3.59 -> v0.3.60 Adding winapi-util v0.1.5 |
||
---|---|---|
.cargo | ||
docs | ||
src | ||
tests | ||
.build.yml | ||
.gitignore | ||
.pre-commit-config.yaml | ||
Cargo.lock | ||
Cargo.toml | ||
config.toml | ||
Dockerfile | ||
LICENSE | ||
mk-platform-agnostic-dockerfile.sh | ||
README.md | ||
reverse-proxy.md | ||
rustfmt.toml |
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: Basic protocol flow description
- Core event model
- Hide old metadata events
- Id/Author prefix search
- NIP-02: Contact List and Petnames
- NIP-03: OpenTimestamps Attestations for Events
- NIP-05: Mapping Nostr keys to DNS-based internet identifiers
- NIP-09: Event Deletion
- NIP-11: Relay Information Document
- NIP-12: Generic Tag Queries
- NIP-15: End of Stored Events Notice
- NIP-16: Event Treatment
- NIP-22: Event
created_at
limits (future-dated events only) - NIP-26: Event Delegation
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.