Documentation Index
Fetch the complete documentation index at: https://mintlify.com/sandwichfarm/nostr-watch/llms.txt
Use this file to discover all available pages before exploring further.
@nostrwatch/relaymon monitors Nostr relay (WebSocket server) health through automated check cycles. It runs configurable check suites — DNS, connectivity, SSL, NIP-11 info document retrieval, and geo-location — against a seeded relay list, then publishes results as NIP-66 relay status events to the Nostr network. Relays are discovered from multiple seed sources including static configuration, API endpoints, and existing NIP-66 events. Supports clearnet, Tor (.onion), and I2P (.i2p) relay monitoring via configurable network routing.
Prerequisites
- Deno >=1.40
- SQLite is created automatically at the path specified in
config.yaml
Environment variables
| Variable | Required | Description | Example |
|---|---|---|---|
RELAYMON_NSEC | Yes | Private key for signing NIP-66 events and monitor announcements | nsec1... |
Installation
@nostrwatch/relaymon is a Deno application — no npm install step is required. Clone the monorepo and navigate to the app directory.
Install Deno
Install Deno >=1.40 from deno.land if you have not already.
Edit config.yaml
At minimum, set
monitor.slug, publisher.relays, and relaymon.networks to match your deployment.Quick start
Available tasks
| Task | Description |
|---|---|
deno task start | Start the monitoring loop |
deno task interactive | Launch the interactive CLI |
deno task status | Print a status report |
deno task dbcheck | Run the database integrity check utility |
deno task compile:linux-x64 | Compile a standalone binary for Linux (x64) |
Docker
Relaymon ships two Docker image variants:| Image | Description |
|---|---|
nostrwatch/relaymon:clearnet | Monitors clearnet relays only |
nostrwatch/relaymon:multinet | Monitors clearnet, Tor (.onion), and I2P (.i2p) via transparent proxy routing |
nostrwatch/relaymon:latest | Alias for clearnet |
tor-proxy— Tor SOCKS proxy for.onionaddressesi2pd— I2P router for.i2paddresses
For production deployments with Docker Compose, see Deploy with Docker Compose stacks. Those stacks include
.env templates, volume mounts, and composed service definitions.Configuration reference
Relaymon is configured viaconfig.yaml. Copy config.sample.yaml as a starting point.
Key configuration options
| Key | Description |
|---|---|
logLevel | Logging verbosity: debug, info, warn, error |
db.path | Path to the SQLite database file |
db.enableWAL | Enable Write-Ahead Logging for concurrent access |
monitor.slug | Unique identifier for this monitor instance |
monitor.info.name | Human-readable name published in monitor announcements |
monitor.owner | Owner public key (hex) associated with this monitor |
monitor.relays | Relays used for monitor announcement publishing |
publisher.relays | Relays that receive NIP-66 check result events |
announce.relays | Relays used for Kind 10002 relay list announcements |
relaymon.networks | Network types to monitor: clearnet, tor, i2pd |
relaymon.retry.expiry | Stepped retry backoff rules — each entry sets max retries before advancing to delay |
relaymon.seed.interval | How often to refresh the seed relay list |
relaymon.seed.sources | Where to discover relays: config, static, api, events, db |
relaymon.seed.options.events.pubkeys | Pubkeys whose NIP-66 events are used as a relay seed source |
relaymon.checks.enabled | Which check types to run: open, read, info, dns |
relaymon.checks.options.expires | How long a check result is considered fresh |
relaymon.checks.options.interval | How often to re-run checks on each relay |
relaymon.checks.options.timeout.open | WebSocket open timeout in milliseconds |
relaymon.checks.options.timeout.read | Read check timeout in milliseconds |
relaymon.checks.options.max | Maximum number of relays to monitor concurrently |
health.server.port | Port for the HTTP health endpoint |
health.kuma.enabled | Enable Uptime Kuma push integration |
queue.workerConcurrency | Maximum parallel relay checks |