SvelteKit dashboard for monitoring and exploring Nostr relays.
Web-based dashboard for browsing, testing, and researching Nostr relays (WebSocket servers that store and forward events). Built with SvelteKit 2.5 and Svelte 5 with SSR disabled and a static adapter — the entire application runs in the browser. Uses IndexedDB (via Dexie) for client-side storage and connects to the nostr-watch relay network for real-time relay data aggregated from NIP-66 (relay monitoring specification) monitors.
- Node.js >=22 (Volta pins 22.15.0)
- pnpm >=8
No environment variables are required. @nostrwatch/gui is a client-only app — runtime configuration is available through the in-app Preferences page (cache wipe, monitor management).
# From monorepo root
pnpm installWorkspace dependencies (@nostrwatch/route66, @nostrwatch/nocap, @nostrwatch/worker-relay, and others) are linked automatically by pnpm workspaces.
# Start development server (port 5173)
pnpm --filter @nostrwatch/gui dev
# Production build
pnpm --filter @nostrwatch/gui build
# Preview built bundle
pnpm --filter @nostrwatch/gui previewNo environment variables. Runtime configuration is available through the in-app Preferences page — use it to wipe local cache, manage monitors, or adjust display settings. Vite build configuration is at vite.config.ts (dev) and vite.production.js (production builds).
-
GUI Table Configuration Separation: Built-in config is not separated from user config in
apps/gui/src/lib/components/data-view/table/utils.ts(line 30). User customizations cannot cleanly override or extend built-in table column configurations; there is no supported override mechanism. No workaround available at this time. See CONCERNS.md — GUI Table Configuration Separation. -
Worker-based Computation Fallback Issues:
dimensions-worker-manager.ts(lines 189, 200) falls back silently to legacy stores when workers fail, with no telemetry tracking fallback frequency or performance impact. Slow or failing hardware may degrade performance without any visible indicator. See CONCERNS.md — Worker-based Computation Fallback Issues. -
GUI Store Initialization Race Conditions: Multiple stores in
seed.tsandnip11s.tsdepend on StateManager initialization timing. Race conditions are possible on slow hardware or under heavy load, potentially leaving the app in an inconsistent state on startup. See CONCERNS.md — GUI Store Initialization Race Conditions.
No agent skills defined yet for this package.
@nostrwatch/route66— relay monitoring state manager; gui uses Route66 as its primary data layer@nostrwatch/nocap— low-level relay connection primitives@nostrwatch/worker-relay— in-browser relay worker used by gui for background processing@nostrwatch/relay-charts— chart adapters for relay data visualization@nostrwatch/relay-chronicle— NIP-66 relay state composition used to build timeline views@nostrwatch/utils— shared utilities used across the monorepo