Go to file
Greg Heartsfield 2d28a95ff7 feat: allow arbitrary tag queries
This is an experimental feature, outside of any NIP, that demonstrates
generic tag queries.

Instead of limiting subscription filters to just querying only "e" or
"p" tags (via `#e` or `#p` attributes), any tag can be queried.

As an example, consider an event which uses a tag "url".  With this
modification, a subscription filter could add a top-level field
"#url", with an array of strings as the key.  Exact matches would be
returned.

A NIP is forthcoming to formalize this.
2022-01-22 21:29:15 -06:00
src feat: allow arbitrary tag queries 2022-01-22 21:29:15 -06:00
.gitignore feat: store events in SQLite and allow querying 2021-12-11 15:48:59 -06:00
Cargo.lock build: bump version to 0.3.3 2022-01-03 22:07:15 -05:00
Cargo.toml feat: allow arbitrary tag queries 2022-01-22 21:29:15 -06:00
config.toml feat: replace email with contact field in relay info. 2022-01-16 08:34:19 -06:00
Dockerfile fix: docker run references the correct database file 2021-12-31 14:05:11 -06:00
LICENSE docs: add MIT license 2021-12-11 15:52:25 -06:00
README.md docs: provide public docker hub link 2022-01-20 22:02:42 -06:00
reverse-proxy.md docs: add timeout for reverse-proxy example 2022-01-19 21:19:12 -06:00
rustfmt.toml feat: cargo build files and expected dependencies 2021-12-05 08:42:28 -06:00

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 relay-specific implementation requirements are listed here.

  • NIP-01: Core event model
  • NIP-01: Hide old metadata events
  • NIP-02: Hide old contact list events
  • NIP-03: OpenTimestamps
  • NIP-09: Event deletion
  • NIP-11: Relay information document

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

The current dev discussions for this project is happening at https://discord.gg/AEG5Z8AP. Drop in to query any development related questions.

License

This project is MIT licensed.