NostrX is a decentralized Nostr client focused on real-time relay communication, local caching, and resilient feed delivery.
- Multi-relay WebSocket communication with connection priority
- Retry strategy with exponential backoff for relay reliability
- Event deduplication to avoid repeated processing across relays
- IndexedDB cache to warm start feed state
- Live event stream with infinite scroll and batched updates
- Signed publishing flow with broadcast to connected relays
- React 19
- TypeScript
- Vite
- Tailwind CSS
- nostr-tools
- IndexedDB
npm install
npm run devOpen the local URL shown by Vite (usually http://localhost:5173).
npm run dev: Start development servernpm run build: Type-check and build production bundlenpm run preview: Preview production buildnpm run lint: Run ESLint
- src/lib/relayManager.ts: Relay lifecycle, retry logic, and multi-relay publish fan-out
- src/hooks/useRelayFeed.ts: Feed orchestration, deduplication, batching, and cache hydration
- src/lib/eventStore.ts: IndexedDB event persistence and cache reads
- src/lib/nostrSigner.ts: Key normalization and event signing
- src/types/nostr.ts: Shared Nostr-facing types
- src/App.tsx: Relay dashboard, event feed, and publish composer
- Private keys are used only in the browser runtime for event signing.
- Do not use production keys for local testing.
- Prefer burner keys while developing.
- Add relay success/ack tracking for publish confirmations
- Add profile metadata rendering for event authors
- Add filter controls for relay lists and event kinds