505b0cb71f
Updating anyhow v1.0.65 -> v1.0.66 Updating async-trait v0.1.57 -> v0.1.58 Updating axum v0.5.16 -> v0.5.17 Updating axum-core v0.2.8 -> v0.2.9 Updating base64 v0.13.0 -> v0.13.1 Updating bumpalo v3.11.0 -> v3.11.1 Updating cc v1.0.73 -> v1.0.74 Updating cxx v1.0.79 -> v1.0.80 Updating cxx-build v1.0.79 -> v1.0.80 Updating cxxbridge-flags v1.0.79 -> v1.0.80 Updating cxxbridge-macro v1.0.79 -> v1.0.80 Updating futures v0.3.24 -> v0.3.25 Updating futures-channel v0.3.24 -> v0.3.25 Updating futures-core v0.3.24 -> v0.3.25 Updating futures-executor v0.3.24 -> v0.3.25 Updating futures-io v0.3.24 -> v0.3.25 Updating futures-macro v0.3.24 -> v0.3.25 Updating futures-sink v0.3.24 -> v0.3.25 Updating futures-task v0.3.24 -> v0.3.25 Updating futures-util v0.3.24 -> v0.3.25 Updating getrandom v0.2.7 -> v0.2.8 Updating h2 v0.3.14 -> v0.3.15 Updating hyper v0.14.20 -> v0.14.22 Updating iana-time-zone v0.1.51 -> v0.1.53 Updating libc v0.2.135 -> v0.2.137 Updating mio v0.8.4 -> v0.8.5 Updating native-tls v0.2.10 -> v0.2.11 Updating num_cpus v1.13.1 -> v1.14.0 Updating once_cell v1.15.0 -> v1.16.0 Updating openssl-sys v0.9.76 -> v0.9.77 Updating parking_lot_core v0.9.3 -> v0.9.4 Updating pest v2.4.0 -> v2.4.1 Updating pest_derive v2.4.0 -> v2.4.1 Updating pest_generator v2.4.0 -> v2.4.1 Updating pest_meta v2.4.0 -> v2.4.1 Updating pkg-config v0.3.25 -> v0.3.26 Updating ppv-lite86 v0.2.16 -> v0.2.17 Updating prost v0.11.0 -> v0.11.2 Updating prost-derive v0.11.0 -> v0.11.2 Updating prost-types v0.11.1 -> v0.11.2 Updating serde v1.0.145 -> v1.0.147 Updating serde_derive v1.0.145 -> v1.0.147 Updating serde_json v1.0.86 -> v1.0.87 Updating syn v1.0.102 -> v1.0.103 Adding windows-sys v0.42.0 Adding windows_aarch64_gnullvm v0.42.0 Adding windows_aarch64_msvc v0.42.0 Adding windows_i686_gnu v0.42.0 Adding windows_i686_msvc v0.42.0 Adding windows_x86_64_gnu v0.42.0 Adding windows_x86_64_gnullvm v0.42.0 Adding windows_x86_64_msvc v0.42.0 |
||
---|---|---|
.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.