A real-time Nostr chat application that streams kind 20000 (ephemeral) events from multiple relays using Applesauce.
- Real-time streaming of kind 20000 events from multiple Nostr relays
- MIRC-style interface with timestamps, nicknames, and geohash display
- Auto-scroll to latest messages
- Responsive design with dark theme
- Live message counter and relay status
- Node.js 20.19+ or 22.12+ (required for Vite)
- npm or yarn
-
Upgrade Node.js (if needed):
# Using Homebrew brew install node@20 # Or using nvm nvm install 20 nvm use 20
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open your browser to the URL shown in the terminal (usually
http://localhost:5173) -
Watch for live events - The app will automatically connect to the configured relays and display incoming kind 20000 events
The app connects to these relays by default:
wss://relay.damus.iowss://nos.lolwss://relay.primal.netwss://offchain.pubwss://nostr21.com
You can modify the relay list in src/lib/applesauce.ts.
Each event displays:
- Timestamp: When the event was created
- Nickname: From the
ntag, or pubkey prefix if not available - Message: The event content
- Geohash: From the
gtag (if present)
- Built with React 19 + TypeScript
- Uses Applesauce for Nostr connectivity
- Tailwind CSS for styling
- Vite for development and building
npm run build- EventStore: Central in-memory database for events
- RelayPool: Manages connections to multiple relays
- TimelineModel: Provides sorted, reactive timeline of events
- React Hooks: Reactive UI updates using Applesauce hooks
- Node.js version error: Make sure you're using Node.js 20.19+ or 22.12+
- No events showing: Kind 20000 events are ephemeral and may not be available on all relays
- Connection issues: Check your network/firewall allows WebSocket connections to the relays