Go to file
Greg Heartsfield 4461648c64 improvement: update dependencies
Updating addr2line v0.21.0 -> v0.22.0
Adding adler2 v2.0.0
Updating allocator-api2 v0.2.16 -> v0.2.18
Updating anstream v0.6.13 -> v0.6.15
Updating anstyle v1.0.6 -> v1.0.8
Updating anstyle-parse v0.2.3 -> v0.2.5
Updating anstyle-query v1.0.2 -> v1.1.1
Updating anstyle-wincon v3.0.2 -> v3.0.4
Updating anyhow v1.0.81 -> v1.0.86
Updating async-channel v2.2.0 -> v2.3.1
Updating async-executor v1.8.0 -> v1.13.0
Updating async-io v2.3.2 -> v2.3.4
Updating async-lock v3.3.0 -> v3.4.0
Updating async-task v4.7.0 -> v4.7.1
Updating async-trait v0.1.79 -> v0.1.82
Updating autocfg v1.2.0 -> v1.3.0
Updating backtrace v0.3.71 -> v0.3.73
Updating bitflags v2.5.0 -> v2.6.0
Updating blocking v1.5.1 -> v1.6.1
Updating bumpalo v3.15.4 -> v3.16.0
Updating bytes v1.6.0 -> v1.7.1
Updating cc v1.0.90 -> v1.1.16
Updating chrono v0.4.37 -> v0.4.38
Updating clap v4.5.4 -> v4.5.17
Updating clap_builder v4.5.2 -> v4.5.17
Updating clap_derive v4.5.4 -> v4.5.13
Updating clap_lex v0.7.0 -> v0.7.2
Updating colorchoice v1.0.0 -> v1.0.2
Updating concurrent-queue v2.4.0 -> v2.5.0
Updating const_format v0.2.32 -> v0.2.33
Updating const_format_proc_macros v0.2.32 -> v0.2.33
Updating core-foundation-sys v0.8.6 -> v0.8.7
Updating cpufeatures v0.2.12 -> v0.2.14
Updating crc v3.0.1 -> v3.2.1
Updating crc32fast v1.4.0 -> v1.4.2
Updating crossbeam-channel v0.5.12 -> v0.5.13
Updating crossbeam-utils v0.8.19 -> v0.8.20
Updating either v1.10.0 -> v1.13.0
Updating errno v0.3.8 -> v0.3.9
Removing event-listener v4.0.3
Removing event-listener v5.2.0
Adding event-listener v5.3.1
Removing event-listener-strategy v0.4.0
Removing event-listener-strategy v0.5.0
Adding event-listener-strategy v0.5.2
Updating fastrand v2.0.2 -> v2.1.1
Removing finl_unicode v1.2.0
Updating flate2 v1.0.28 -> v1.0.33
Updating getrandom v0.2.12 -> v0.2.15
Updating gimli v0.28.1 -> v0.29.0
Updating h2 v0.3.25 -> v0.3.26
Updating hashbrown v0.14.3 -> v0.14.5
Adding hermit-abi v0.4.0
Updating httparse v1.8.0 -> v1.9.4
Updating hyper v0.14.28 -> v0.14.30
Updating indexmap v2.2.6 -> v2.5.0
Updating instant v0.1.12 -> v0.1.13
Adding is_terminal_polyfill v1.70.1
Removing itertools v0.12.1
Updating js-sys v0.3.69 -> v0.3.70
Updating lazy_static v1.4.0 -> v1.5.0
Updating libc v0.2.153 -> v0.2.158
Updating libredox v0.0.1 -> v0.1.3
Updating linux-raw-sys v0.4.13 -> v0.4.14
Updating lock_api v0.4.11 -> v0.4.12
Updating log v0.4.21 -> v0.4.22
Updating memchr v2.7.2 -> v2.7.4
Removing miniz_oxide v0.7.2
Adding miniz_oxide v0.7.4
Adding miniz_oxide v0.8.0
Updating mio v0.8.11 -> v1.0.2
Updating num-iter v0.1.44 -> v0.1.45
Updating num-traits v0.2.18 -> v0.2.19
Removing num_cpus v1.16.0
Updating object v0.32.2 -> v0.36.4
Updating parking_lot v0.12.1 -> v0.12.3
Updating parking_lot_core v0.9.9 -> v0.9.10
Updating paste v1.0.14 -> v1.0.15
Updating pest v2.7.8 -> v2.7.12
Updating pest_derive v2.7.8 -> v2.7.12
Updating pest_generator v2.7.8 -> v2.7.12
Updating pest_meta v2.7.8 -> v2.7.12
Updating petgraph v0.6.4 -> v0.6.5
Updating pin-project-lite v0.2.13 -> v0.2.14
Updating piper v0.2.1 -> v0.2.4
Updating polling v3.6.0 -> v3.7.3
Updating portable-atomic v1.6.0 -> v1.7.0
Updating ppv-lite86 v0.2.17 -> v0.2.20
Updating proc-macro2 v1.0.79 -> v1.0.86
Updating prometheus v0.13.3 -> v0.13.4
Updating quote v1.0.35 -> v1.0.37
Updating redox_syscall v0.4.1 -> v0.5.3
Updating redox_users v0.4.4 -> v0.4.6
Updating regex v1.10.4 -> v1.10.6
Updating regex-automata v0.4.6 -> v0.4.7
Updating regex-syntax v0.8.3 -> v0.8.4
Updating rustc-demangle v0.1.23 -> v0.1.24
Updating rustix v0.38.32 -> v0.38.36
Updating rustls v0.21.10 -> v0.21.12
Updating rustversion v1.0.14 -> v1.0.17
Updating ryu v1.0.17 -> v1.0.18
Updating security-framework v2.9.2 -> v2.11.1
Updating security-framework-sys v2.9.1 -> v2.11.1
Updating serde v1.0.197 -> v1.0.209
Updating serde_derive v1.0.197 -> v1.0.209
Updating serde_json v1.0.115 -> v1.0.128
Adding shlex v1.3.0
Updating signal-hook-registry v1.4.1 -> v1.4.2
Updating socket2 v0.5.6 -> v0.5.7
Updating sqlformat v0.2.3 -> v0.2.6
Updating stringprep v0.1.4 -> v0.1.5
Updating strsim v0.11.0 -> v0.11.1
Updating subtle v2.5.0 -> v2.6.1
Updating syn v2.0.55 -> v2.0.77
Updating tempfile v3.10.1 -> v3.12.0
Updating thiserror v1.0.58 -> v1.0.63
Updating thiserror-impl v1.0.58 -> v1.0.63
Updating tinyvec v1.6.0 -> v1.8.0
Updating tokio v1.36.0 -> v1.40.0
Updating tokio-macros v2.2.0 -> v2.4.0
Updating tokio-stream v0.1.15 -> v0.1.16
Updating tokio-util v0.7.10 -> v0.7.12
Updating tower-layer v0.3.2 -> v0.3.3
Updating tower-service v0.3.2 -> v0.3.3
Adding unicode-properties v0.1.2
Updating unicode-width v0.1.11 -> v0.1.13
Updating unicode-xid v0.2.4 -> v0.2.5
Updating url v2.5.0 -> v2.5.2
Updating utf8parse v0.2.1 -> v0.2.2
Updating uuid v1.8.0 -> v1.10.0
Updating value-bag v1.8.1 -> v1.9.0
Updating version_check v0.9.4 -> v0.9.5
Updating waker-fn v1.1.1 -> v1.2.0
Updating wasm-bindgen v0.2.92 -> v0.2.93
Updating wasm-bindgen-backend v0.2.92 -> v0.2.93
Updating wasm-bindgen-futures v0.4.42 -> v0.4.43
Updating wasm-bindgen-macro v0.2.92 -> v0.2.93
Updating wasm-bindgen-macro-support v0.2.92 -> v0.2.93
Updating wasm-bindgen-shared v0.2.92 -> v0.2.93
Updating web-sys v0.3.69 -> v0.3.70
Updating whoami v1.5.1 -> v1.5.2
Adding windows-sys v0.59.0
Updating windows-targets v0.52.4 -> v0.52.6
Updating windows_aarch64_gnullvm v0.52.4 -> v0.52.6
Updating windows_aarch64_msvc v0.52.4 -> v0.52.6
Updating windows_i686_gnu v0.52.4 -> v0.52.6
Adding windows_i686_gnullvm v0.52.6
Updating windows_i686_msvc v0.52.4 -> v0.52.6
Updating windows_x86_64_gnu v0.52.4 -> v0.52.6
Updating windows_x86_64_gnullvm v0.52.4 -> v0.52.6
Updating windows_x86_64_msvc v0.52.4 -> v0.52.6
Updating zerocopy v0.7.32 -> v0.7.35
Updating zerocopy-derive v0.7.32 -> v0.7.35
2024-09-06 11:05:42 -05:00
.cargo feat: enable use of tokio-console with diagnostics.tracing setting 2022-09-11 12:44:45 -05:00
.github/workflows build: upgrade checkout action for github ci 2023-04-30 11:13:03 -05:00
contrib improvement: use appropriate paths for systemd example 2023-04-30 09:55:07 -05:00
docs docs: add line for enabling systemd service 2023-11-03 18:15:25 -05:00
examples/nauthz fix: build gRPC server code 2023-08-09 13:24:52 -07:00
proto feat: gRPC authorization for events 2023-02-11 13:26:08 -06:00
src feat: add custom relay page 2024-09-06 10:44:15 -05:00
tests refactor: clippy suggestions 2024-03-28 10:15:00 -05:00
.build.yml fix: add protobuf-compiler for Docker and CI builds 2023-02-11 13:56:15 -06:00
.gitignore feat: add cln payment processor 2024-08-14 11:36:07 -05:00
.pre-commit-config.yaml build: remove pre-commit rustfmt check 2022-12-24 10:29:30 -06:00
build.rs refactor: format 2023-02-25 14:49:35 -06:00
Cargo.lock improvement: update dependencies 2024-09-06 11:05:42 -05:00
Cargo.toml refactor: separate conditional dependencies 2024-09-06 10:33:56 -05:00
config.toml feat: add custom relay page 2024-09-06 10:44:15 -05:00
Dockerfile fix: upgrade docker image to include OpenSSL 3 2023-02-13 09:33:14 -06:00
flake.lock add nix flake 2024-08-14 11:34:41 -05:00
flake.nix add nix flake 2024-08-14 11:34:41 -05:00
LICENSE docs: add MIT license 2021-12-11 15:52:25 -06:00
README.md feat: add custom relay page 2024-09-06 10:44:15 -05:00
rustfmt.toml wip: future changes to rustfmt 2022-12-22 15:13:54 -06:00

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.

builds.sr.ht status

Github CI

Features

NIPs with a relay-specific implementation are listed here.

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 --pull -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

On OpenBSD:

$ doas pkg_add rust protobuf

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 \
  --mount src=$(pwd)/index.html,target=/usr/src/app/index.html,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.