Public relay operators
Serve the open network without getting flattened by it.
- Sliding-window rate limits with backoff hints clients can respect
- Adaptive proof-of-work, event size and created_at limits
- Horizontal workers with Redis fan-out
01 Who it's for
Whether you are opening a relay to everyone, charging for access, or keeping it private, nostream ships the knobs you need, without forking.
Serve the open network without getting flattened by it.
Turn a relay into a service. Admission fees settle over Lightning.
A relay for you, your family or your community, on your own box.
02 Feature pillars
Protocol breadth, network reach and the ops tooling to keep it healthy, in one codebase you can read.
25 NIPs implemented relay-side, from basic flow to auth, counts, search and encrypted payloads, plus Marmot MIPs 0–3 for E2EE group messaging.
Publish an .onion or .i2p address with a flag. nostream start --tor --i2p, then nostream info --tor-hostname.
Live metrics, NIP-66 network health, NIP-11 mismatch warnings and a validated settings editor.
Charge to publish. Invoices via ZEBEDEE, Nodeless, OpenNode, LNbits or any LNURL-verify provider.
Rate limits, adaptive proof-of-work, kind and size rules. Clients get a rate-limited hint with a backoff.
Import and export events as JSON or JSONL in batches. Back up, migrate, or seed a new relay.
$ nostream export --output backup.jsonl --format jsonl 03 Admin & observability
A built-in console for operators: no SSH, no SQL, no guessing at 3am.

Events per second, rejections, connections, CPU and memory, streamed over SSE.
NIP-66 probes for DNS, TLS, WebSocket read/write RTT and NIP-11, per target.
Flags when what your relay advertises disagrees with what probes measure.
Guided, validated edits with automatic backups and one-click restore.
Outbound alerts with a delivery log, so you hear about trouble first.
04 NIPs supported
The same list your relay returns as supported_nips, read straight from the repository at build time.
supported_mips.
→ Ship it
Clone, set a secret, start. Docker Compose does the rest.
# clone and configure $ git clone https://github.com/cameri/nostream.git && cd nostream $ echo "SECRET=$(openssl rand -hex 128)" > .env $ pnpm add -g . && nostream start