5bcc63bd56
Updating async-trait v0.1.56 -> v0.1.57 Removing block-buffer v0.7.3 Removing block-padding v0.1.5 Updating bumpalo v3.10.0 -> v3.11.0 Removing byte-tools v0.3.1 Updating bytes v1.1.0 -> v1.2.1 Updating cpufeatures v0.2.2 -> v0.2.3 Updating crossbeam-utils v0.8.10 -> v0.8.11 Updating crypto-common v0.1.4 -> v0.1.6 Removing digest v0.8.1 Removing fake-simd v0.1.2 Updating fastrand v1.7.0 -> v1.8.0 Updating futures v0.3.21 -> v0.3.23 Updating futures-channel v0.3.21 -> v0.3.23 Updating futures-core v0.3.21 -> v0.3.23 Updating futures-executor v0.3.21 -> v0.3.23 Updating futures-io v0.3.21 -> v0.3.23 Updating futures-macro v0.3.21 -> v0.3.23 Updating futures-sink v0.3.21 -> v0.3.23 Updating futures-task v0.3.21 -> v0.3.23 Updating futures-util v0.3.21 -> v0.3.23 Removing generic-array v0.12.4 Removing generic-array v0.14.5 Adding generic-array v0.14.6 Updating h2 v0.3.13 -> v0.3.14 Updating hashbrown v0.12.1 -> v0.12.3 Updating hyper v0.14.19 -> v0.14.20 Updating itoa v1.0.2 -> v1.0.3 Updating js-sys v0.3.58 -> v0.3.59 Updating libc v0.2.126 -> v0.2.132 Removing maplit v1.0.2 Updating once_cell v1.12.1 -> v1.13.1 Removing opaque-debug v0.2.3 Updating openssl v0.10.40 -> v0.10.41 Updating openssl-sys v0.9.74 -> v0.9.75 Updating pest v2.1.3 -> v2.2.1 Updating pest_derive v2.1.0 -> v2.2.1 Updating pest_generator v2.1.3 -> v2.2.1 Updating pest_meta v2.1.3 -> v2.2.1 Updating proc-macro2 v1.0.40 -> v1.0.43 Updating quote v1.0.20 -> v1.0.21 Updating raw-cpuid v10.3.0 -> v10.5.0 Updating redox_syscall v0.2.13 -> v0.2.16 Updating regex v1.5.6 -> v1.6.0 Updating regex-syntax v0.6.26 -> v0.6.27 Updating ryu v1.0.10 -> v1.0.11 Updating security-framework v2.6.1 -> v2.7.0 Updating serde v1.0.138 -> v1.0.143 Updating serde_derive v1.0.138 -> v1.0.143 Updating serde_json v1.0.82 -> v1.0.83 Removing sha-1 v0.8.2 Updating slab v0.4.6 -> v0.4.7 Updating syn v1.0.98 -> v1.0.99 Updating thiserror v1.0.31 -> v1.0.32 Updating thiserror-impl v1.0.31 -> v1.0.32 Updating tokio v1.19.2 -> v1.20.1 Updating tokio-tungstenite v0.17.1 -> v0.17.2 Updating tracing v0.1.35 -> v0.1.36 Updating tracing-core v0.1.28 -> v0.1.29 Updating tungstenite v0.17.2 -> v0.17.3 Updating ucd-trie v0.1.3 -> v0.1.4 Updating unicode-ident v1.0.1 -> v1.0.3 Updating wasm-bindgen v0.2.81 -> v0.2.82 Updating wasm-bindgen-backend v0.2.81 -> v0.2.82 Updating wasm-bindgen-macro v0.2.81 -> v0.2.82 Updating wasm-bindgen-macro-support v0.2.81 -> v0.2.82 Updating wasm-bindgen-shared v0.2.81 -> v0.2.82 Updating web-sys v0.3.58 -> v0.3.59 |
||
---|---|---|
docs | ||
src | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
config.toml | ||
Dockerfile | ||
LICENSE | ||
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: 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)
- NIP-15: End of stored events notice
- NIP-16: Replaceable and ephemeral events
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.
License
This project is MIT licensed.