A TypeScript monorepo for monitoring, auditing, and describing Nostr relays. @nostrwatch is an OpenSats grant recipient.
nostr-watch provides the infrastructure for observing the Nostr relay network. It implements NIP-66 (Relay Monitoring System) to crawl relays, check their health, audit their capabilities, and publish structured results back to the Nostr network. The stack includes client-facing dashboards, long-running monitoring agents, and a library ecosystem that other projects can use independently.
Packages are organized into three layers with a strict dependency direction:
internal → libraries → apps
- internal/ — Infrastructure shared across the monorepo (logging, publishing, utilities)
- libraries/ — Reusable packages that can be consumed independently
- apps/ — Product applications (services, dashboards, CLI tools)
See the Architecture Overview for details on the adapter pattern and cross-package conventions.
| Package | Description | Status | Platform |
|---|---|---|---|
@nostrwatch/gui |
NIP-66 Nostr relay dashboard | alpha |
Web |
@nostrwatch/relaymon |
Relay health monitor with NIP-66 event publishing | alpha |
Node · Deno |
@nostrwatch/trawler |
Relay data crawler for the nostr-watch network | alpha |
Node · Deno |
@nostrwatch/rstate |
NIP-66 relay intelligence state machine with REST and MCP endpoints | alpha |
Node |
@nostrwatch/purist |
Browser-based relay scanner | alpha |
Web |
@nostrwatch/umon |
Browser extension for monitoring Nostr activity | alpha |
Web |
@nostrwatch/docker-stacks |
Pre-configured Docker Compose stacks for nostr-watch services | — | Docker |
@nostrwatch/nocapd |
relaymon |
deprecated |
— |
| Package | Description | Status | Platform |
|---|---|---|---|
@nostrwatch/nocap |
Extensible relay capability discovery framework | alpha |
Web · Node |
@nostrwatch/route66 |
NIP-66 relay aggregation and state management | alpha |
Web · Node |
@nostrwatch/auditor |
Relay validation against advertised NIP support | alpha |
Web · Node |
@nostrwatch/nostrings |
Relay URL sanitization and normalization | alpha |
Isomorphic |
@nostrwatch/relay-chronicle |
Chronicle relay history from NIP-66 delta events | alpha |
Web · Node |
@nostrwatch/relay-charts |
Chart adapters for relay data visualization | alpha |
Web |
@nostrwatch/memory-relay |
In-memory Nostr relay for testing and embedding | alpha |
Web · Node |
@nostrwatch/worker-relay |
Nostr relay running in a Service Worker | alpha |
Web |
@nostrwatch/websocket |
Isomorphic WebSocket wrapper | alpha |
Web · Node · Deno |
@nostrwatch/nocap-route66 |
Transform nocap output into NIP-66 Kind 30166 events | alpha |
Web · Node |
@nostrwatch/schemata-js-ajv |
AJV wrappers for Nostr JSON schema validation | alpha |
Web · Node |
@nostrwatch/negentropy-utils |
Negentropy set reconciliation utilities | alpha |
Web · Node |
@nostrwatch/kuma |
Uptime Kuma push monitor for Nostr relays | alpha |
Node |
@nostrwatch/db |
SQLite database layer | alpha |
Node |
nostrawl |
Continuous event retrieval from Nostr relays | alpha |
Node |
@nostrwatch/nip66 |
NIP-66 protocol reference documentation | docs |
— |
@nostrwatch/schemata |
@nostrability/schemata |
deprecated |
— |
@nostrwatch/sanitize |
nostrings |
deprecated |
— |
@nostrwatch/idb |
deprecated |
— | |
@nostrwatch/kit |
deprecated |
— | |
@nostrwatch/transform |
deprecated |
— |
| Package | Description | Status | Platform |
|---|---|---|---|
@nostrwatch/publisher |
Nostr event publishing with adapter pattern | alpha |
Web · Node |
@nostrwatch/announce |
NIP-66 monitor announcement event generation | alpha |
Web · Node |
@nostrwatch/logger |
Structured logging wrapper | alpha |
Web · Node |
@nostrwatch/utils |
Shared utilities (keys, arrays, env detection) | alpha |
Web · Node |
@nostrwatch/controlflow |
BullMQ queue management and backoff control | alpha |
Node |
@nostrwatch/seed |
Relay seeding from multiple discovery sources | alpha |
Node |
@nostrwatch/redis |
BullMQ/Redis dashboard server | alpha |
Node |
@nostrwatch/kinds |
Nostr event kind constants (placeholder) | alpha |
— |
@nostrwatch/nwcache |
deprecated |
— |
Prerequisites: Node.js >= 20, pnpm >= 8, Git. Optional: Deno >= 1.4 (for trawler/relaymon), Docker (for docker-stacks).
git clone https://github.com/sandwichfarm/nostr-watch.git
cd nostr-watch
pnpm install
pnpm buildSee the Getting Started guide for common workflows and development commands.
The documentation site lives in docs/ and is built with VitePress.
pnpm docs:dev # Start dev server at localhost:5173- Architecture Overview — Package layers, dependency direction, adapter patterns
- Getting Started — Setup, build, test, and dev workflows
- All Packages — Full package catalog with detailed documentation
@nostrwatch is not yet open to external contributions. Contribution guidelines and issue templates are being established. Watch this repo for updates.
MIT — Sandwich Farm LLC