74376d94e5
Adding addr2line v0.20.0 Updating aes v0.8.2 -> v0.8.3 Adding ahash v0.8.3 Updating aho-corasick v0.7.20 -> v1.0.2 Adding allocator-api2 v0.2.16 Adding android-tzdata v0.1.1 Adding anstream v0.3.2 Adding anstyle v1.0.1 Adding anstyle-parse v0.2.1 Adding anstyle-query v1.0.0 Adding anstyle-wincon v1.0.1 Updating anyhow v1.0.69 -> v1.0.72 Updating async-channel v1.8.0 -> v1.9.0 Updating async-executor v1.5.0 -> v1.5.1 Updating async-io v1.12.0 -> v1.13.0 Updating async-lock v2.6.0 -> v2.7.0 Updating async-stream v0.3.3 -> v0.3.5 Updating async-stream-impl v0.3.3 -> v0.3.5 Updating async-task v4.3.0 -> v4.4.0 Updating async-trait v0.1.64 -> v0.1.72 Updating atomic-waker v1.1.0 -> v1.1.1 Updating axum v0.6.6 -> v0.6.20 Updating axum-core v0.3.2 -> v0.3.4 Adding backtrace v0.3.68 Updating base64 v0.21.0 -> v0.21.2 Adding bitflags v2.3.3 Updating block-buffer v0.10.3 -> v0.10.4 Updating block-padding v0.3.2 -> v0.3.3 Updating blocking v1.3.0 -> v1.3.1 Updating bumpalo v3.12.0 -> v3.13.0 Updating cc v1.0.79 -> v1.0.81 Updating chrono v0.4.23 -> v0.4.26 Updating cipher v0.4.3 -> v0.4.4 Updating clap v4.1.4 -> v4.3.19 Adding clap_builder v4.3.19 Updating clap_derive v4.1.0 -> v4.3.12 Updating clap_lex v0.3.1 -> v0.5.0 Removing codespan-reporting v0.11.1 Adding colorchoice v1.0.0 Updating concurrent-queue v2.1.0 -> v2.2.0 Updating console v0.15.5 -> v0.15.7 Updating console-api v0.4.0 -> v0.5.0 Updating console-subscriber v0.1.8 -> v0.1.10 Updating const_format v0.2.30 -> v0.2.31 Updating const_format_proc_macros v0.2.29 -> v0.2.31 Updating core-foundation-sys v0.8.3 -> v0.8.4 Updating cpufeatures v0.2.5 -> v0.2.9 Updating crossbeam-channel v0.5.6 -> v0.5.8 Updating crossbeam-utils v0.8.14 -> v0.8.16 Removing ctor v0.1.26 Removing cxx v1.0.90 Removing cxx-build v1.0.90 Removing cxxbridge-flags v1.0.90 Removing cxxbridge-macro v1.0.90 Updating dashmap v5.4.0 -> v5.5.0 Adding deranged v0.3.7 Updating digest v0.10.6 -> v0.10.7 Updating dotenvy v0.15.6 -> v0.15.7 Updating either v1.8.1 -> v1.9.0 Adding equivalent v1.0.1 Updating errno v0.2.8 -> v0.3.2 Removing fastrand v1.8.0 Adding fastrand v1.9.0 Adding fastrand v2.0.0 Updating flate2 v1.0.25 -> v1.0.26 Updating form_urlencoded v1.1.0 -> v1.2.0 Updating futures v0.3.26 -> v0.3.28 Updating futures-channel v0.3.26 -> v0.3.28 Updating futures-core v0.3.26 -> v0.3.28 Updating futures-executor v0.3.26 -> v0.3.28 Updating futures-io v0.3.26 -> v0.3.28 Updating futures-lite v1.12.0 -> v1.13.0 Updating futures-macro v0.3.26 -> v0.3.28 Updating futures-sink v0.3.26 -> v0.3.28 Updating futures-task v0.3.26 -> v0.3.28 Updating futures-util v0.3.26 -> v0.3.28 Updating generic-array v0.14.6 -> v0.14.7 Updating getrandom v0.2.8 -> v0.2.10 Adding gimli v0.27.3 Updating h2 v0.3.15 -> v0.3.20 Adding hashbrown v0.14.0 Updating hashlink v0.8.1 -> v0.8.3 Removing hermit-abi v0.2.6 Removing hermit-abi v0.3.1 Adding hermit-abi v0.3.2 Updating http v0.2.8 -> v0.2.9 Removing http-range-header v0.3.0 Updating hyper v0.14.24 -> v0.14.27 Updating iana-time-zone v0.1.53 -> v0.1.57 Updating iana-time-zone-haiku v0.1.1 -> v0.1.2 Updating idna v0.3.0 -> v0.4.0 Removing indexmap v1.9.2 Adding indexmap v1.9.3 Adding indexmap v2.0.0 Updating indicatif v0.17.3 -> v0.17.6 Updating io-lifetimes v1.0.5 -> v1.0.11 Updating is-terminal v0.4.3 -> v0.4.9 Updating itoa v1.0.5 -> v1.0.9 Updating js-sys v0.3.61 -> v0.3.64 Updating libc v0.2.139 -> v0.2.147 Removing link-cplusplus v1.0.8 Removing linux-raw-sys v0.1.4 Adding linux-raw-sys v0.3.8 Adding linux-raw-sys v0.4.5 Updating lock_api v0.4.9 -> v0.4.10 Updating log v0.4.17 -> v0.4.19 Updating matchit v0.7.0 -> v0.7.2 Updating mime v0.3.16 -> v0.3.17 Updating miniz_oxide v0.6.2 -> v0.7.1 Updating mio v0.8.5 -> v0.8.8 Updating nostr v0.18.0 -> v0.18.1 Updating nostr-rs-relay v0.8.9 -> v0.8.10 Updating num-traits v0.2.15 -> v0.2.16 Updating num_cpus v1.15.0 -> v1.16.0 Adding object v0.31.1 Updating once_cell v1.17.0 -> v1.18.0 Updating openssl v0.10.45 -> v0.10.55 Updating openssl-macros v0.1.0 -> v0.1.1 Updating openssl-sys v0.9.80 -> v0.9.90 Removing os_str_bytes v6.4.1 Updating parking v2.0.0 -> v2.1.0 Updating parking_lot_core v0.9.7 -> v0.9.8 Updating paste v1.0.11 -> v1.0.14 Updating percent-encoding v2.2.0 -> v2.3.0 Updating pest v2.5.5 -> v2.7.2 Updating pest_derive v2.5.5 -> v2.7.2 Updating pest_generator v2.5.5 -> v2.7.2 Updating pest_meta v2.5.5 -> v2.7.2 Updating pin-project v1.0.12 -> v1.1.2 Updating pin-project-internal v1.0.12 -> v1.1.2 Updating pin-project-lite v0.2.9 -> v0.2.10 Updating pkg-config v0.3.26 -> v0.3.27 Updating polling v2.5.2 -> v2.8.0 Updating portable-atomic v0.3.19 -> v1.4.2 Updating prettyplease v0.1.23 -> v0.1.25 Removing proc-macro-error v1.0.4 Removing proc-macro-error-attr v1.0.4 Updating proc-macro2 v1.0.51 -> v1.0.66 Updating prost v0.11.6 -> v0.11.9 Updating prost-build v0.11.6 -> v0.11.9 Updating prost-derive v0.11.6 -> v0.11.9 Updating prost-types v0.11.6 -> v0.11.9 Updating quote v1.0.23 -> v1.0.32 Updating raw-cpuid v10.6.1 -> v10.7.0 Adding redox_syscall v0.3.5 Updating regex v1.7.1 -> v1.9.1 Adding regex-automata v0.3.4 Removing regex-syntax v0.6.28 Adding regex-syntax v0.6.29 Adding regex-syntax v0.7.4 Removing remove_dir_all v0.5.3 Adding rustc-demangle v0.1.23 Removing rustix v0.36.8 Adding rustix v0.37.23 Adding rustix v0.38.6 Updating rustls-pemfile v1.0.2 -> v1.0.3 Updating rustversion v1.0.11 -> v1.0.14 Updating ryu v1.0.12 -> v1.0.15 Updating schannel v0.1.21 -> v0.1.22 Updating scheduled-thread-pool v0.2.6 -> v0.2.7 Updating scopeguard v1.1.0 -> v1.2.0 Removing scratch v1.0.3 Updating security-framework v2.8.2 -> v2.9.2 Updating security-framework-sys v2.8.0 -> v2.9.1 Updating serde v1.0.152 -> v1.0.181 Updating serde_derive v1.0.152 -> v1.0.181 Updating serde_json v1.0.93 -> v1.0.104 Updating sha2 v0.10.6 -> v0.10.7 Updating slab v0.4.7 -> v0.4.8 Updating smallvec v1.10.0 -> v1.11.0 Updating socket2 v0.4.7 -> v0.4.9 Updating sqlx v0.6.2 -> v0.6.3 Updating sqlx-core v0.6.2 -> v0.6.3 Updating sqlx-macros v0.6.2 -> v0.6.3 Updating sqlx-rt v0.6.2 -> v0.6.3 Updating stringprep v0.1.2 -> v0.1.3 Updating subtle v2.4.1 -> v2.5.0 Removing syn v1.0.107 Adding syn v1.0.109 Adding syn v2.0.28 Updating tempfile v3.3.0 -> v3.7.0 Removing termcolor v1.2.0 Updating thiserror v1.0.38 -> v1.0.44 Updating thiserror-impl v1.0.38 -> v1.0.44 Updating tikv-jemalloc-sys v0.5.3+5.3.0-patched -> v0.5.4+5.3.0-patched Updating tikv-jemallocator v0.5.0 -> v0.5.4 Updating time v0.3.20 -> v0.3.25 Updating time-core v0.1.0 -> v0.1.1 Updating time-macros v0.2.8 -> v0.2.11 Updating tokio v1.25.0 -> v1.29.1 Updating tokio-macros v1.8.2 -> v2.1.0 Updating tokio-stream v0.1.11 -> v0.1.14 Updating tokio-util v0.7.7 -> v0.7.8 Adding tonic v0.9.2 Removing tower-http v0.3.5 Updating tracing-attributes v0.1.23 -> v0.1.26 Updating tracing-core v0.1.30 -> v0.1.31 Updating tracing-subscriber v0.3.16 -> v0.3.17 Updating ucd-trie v0.1.5 -> v0.1.6 Updating unicode-bidi v0.3.10 -> v0.3.13 Updating unicode-ident v1.0.6 -> v1.0.11 Updating url v2.3.1 -> v2.4.0 Adding utf8parse v0.2.1 Updating uuid v1.3.0 -> v1.4.1 Updating value-bag v1.0.0-alpha.9 -> v1.4.1 Updating want v0.3.0 -> v0.3.1 Updating wasm-bindgen v0.2.84 -> v0.2.87 Updating wasm-bindgen-backend v0.2.84 -> v0.2.87 Updating wasm-bindgen-futures v0.4.34 -> v0.4.37 Updating wasm-bindgen-macro v0.2.84 -> v0.2.87 Updating wasm-bindgen-macro-support v0.2.84 -> v0.2.87 Updating wasm-bindgen-shared v0.2.84 -> v0.2.87 Updating web-sys v0.3.61 -> v0.3.64 Removing wepoll-ffi v0.1.2 Updating whoami v1.3.0 -> v1.4.1 Removing winapi-util v0.1.5 Adding windows v0.48.0 Updating windows-sys v0.42.0 -> v0.48.0 Removing windows-targets v0.42.1 Adding windows-targets v0.42.2 Adding windows-targets v0.48.1 Removing windows_aarch64_gnullvm v0.42.1 Adding windows_aarch64_gnullvm v0.42.2 Adding windows_aarch64_gnullvm v0.48.0 Removing windows_aarch64_msvc v0.42.1 Adding windows_aarch64_msvc v0.42.2 Adding windows_aarch64_msvc v0.48.0 Removing windows_i686_gnu v0.42.1 Adding windows_i686_gnu v0.42.2 Adding windows_i686_gnu v0.48.0 Removing windows_i686_msvc v0.42.1 Adding windows_i686_msvc v0.42.2 Adding windows_i686_msvc v0.48.0 Removing windows_x86_64_gnu v0.42.1 Adding windows_x86_64_gnu v0.42.2 Adding windows_x86_64_gnu v0.48.0 Removing windows_x86_64_gnullvm v0.42.1 Adding windows_x86_64_gnullvm v0.42.2 Adding windows_x86_64_gnullvm v0.48.0 Removing windows_x86_64_msvc v0.42.1 Adding windows_x86_64_msvc v0.42.2 Adding windows_x86_64_msvc v0.48.0 |
||
---|---|---|
.cargo | ||
.github/workflows | ||
contrib | ||
docs | ||
examples/nauthz | ||
proto | ||
src | ||
tests | ||
.build.yml | ||
.gitignore | ||
.pre-commit-config.yaml | ||
build.rs | ||
Cargo.lock | ||
Cargo.toml | ||
config.toml | ||
Dockerfile | ||
LICENSE | ||
README.md | ||
rustfmt.toml |
nostr-rs-relay
This is a nostr relay, written in Rust. It currently supports the entire relay protocol, and persists data with SQLite. There is experimental support for Postgresql.
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-20: Command Results
- NIP-22: Event
created_at
limits (future-dated events only) - NIP-26: Event Delegation (implemented, but currently disabled)
- NIP-28: Public Chat
- NIP-33: Parameterized Replaceable Events
- NIP-40: Expiration Timestamp
- NIP-42: Authentication of clients to relays
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).
The examples below start a rootless podman container, mapping a local data directory and config file.
$ podman build -t nostr-rs-relay .
$ mkdir data
$ podman unshare chown 100:100 data
$ podman run -it --rm -p 7000:8080 \
--user=100:100 \
-v $(pwd)/data:/usr/src/app/db:Z \
-v $(pwd)/config.toml:/usr/src/app/config.toml:ro,Z \
--name nostr-relay nostr-rs-relay:latest
Nov 19 15:31:15.013 INFO nostr_rs_relay: Starting up from main
Nov 19 15:31:15.017 INFO nostr_rs_relay::server: listening on: 0.0.0.0:8080
Nov 19 15:31:15.019 INFO nostr_rs_relay::server: db writer created
Nov 19 15:31:15.019 INFO nostr_rs_relay::server: control message listener started
Nov 19 15:31:15.019 INFO nostr_rs_relay::db: Built a connection pool "event writer" (min=1, max=4)
Nov 19 15:31:15.019 INFO nostr_rs_relay::db: opened database "/usr/src/app/db/nostr.db" for writing
Nov 19 15:31:15.019 INFO nostr_rs_relay::schema: DB version = 0
Nov 19 15:31:15.054 INFO nostr_rs_relay::schema: database pragma/schema initialized to v7, and ready
Nov 19 15:31:15.054 INFO nostr_rs_relay::schema: All migration scripts completed successfully. Welcome to v7.
Nov 19 15:31:15.521 INFO nostr_rs_relay::db: Built a connection pool "client query" (min=4, max=128)
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
Build and Run (without Docker)
Building nostr-rs-relay
requires an installation of Cargo & Rust: https://www.rust-lang.org/tools/install
The following OS packages will be helpful; on Debian/Ubuntu:
$ sudo apt-get install build-essential cmake protobuf-compiler pkg-config libssl-dev
Clone this repository, and then build a release version of the relay:
$ git clone -q https://git.sr.ht/\~gheartsfield/nostr-rs-relay
$ cd nostr-rs-relay
$ cargo build -q -r
The relay executable is now located in
target/release/nostr-rs-relay
. In order to run it with logging
enabled, execute it with the RUST_LOG
variable set:
$ RUST_LOG=warn,nostr_rs_relay=info ./target/release/nostr-rs-relay
Dec 26 10:31:56.455 INFO nostr_rs_relay: Starting up from main
Dec 26 10:31:56.464 INFO nostr_rs_relay::server: listening on: 0.0.0.0:8080
Dec 26 10:31:56.466 INFO nostr_rs_relay::server: db writer created
Dec 26 10:31:56.466 INFO nostr_rs_relay::db: Built a connection pool "event writer" (min=1, max=2)
Dec 26 10:31:56.466 INFO nostr_rs_relay::db: opened database "./nostr.db" for writing
Dec 26 10:31:56.466 INFO nostr_rs_relay::schema: DB version = 11
Dec 26 10:31:56.467 INFO nostr_rs_relay::db: Built a connection pool "maintenance writer" (min=1, max=2)
Dec 26 10:31:56.467 INFO nostr_rs_relay::server: control message listener started
Dec 26 10:31:56.468 INFO nostr_rs_relay::db: Built a connection pool "client query" (min=4, max=8)
You now have a running relay, on port 8080
. Use a nostr
client or
websocat
to connect and send/query for events.
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.