BrowserAdapter speaks yaw/2.1 signaling + WebRTC protocol entirely in
the browser (libsodium-wrappers for Ed25519/X25519). Identity stored in
localStorage; peers connect via any waste/yaw2 anchor.
When served from a non-localhost origin the app defaults to browser
mode. On localhost the daemon adapter is tried first with a one-click
switch to browser mode. config.js (gitignored, served by anchor) lets
the host pre-inject signalURL and other defaults.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
React + TypeScript UI on port 5274. Connects to local daemon via
WebSocket IPC (DaemonAdapter). Full chat layout with sidebar, message
pane, and peer list. Mirrors the TUI feature set.
- src/types.ts — IPC types mirroring proto.go
- src/adapter/daemon — WebSocket IPC adapter with auto-reconnect
- src/store/index.ts — Zustand store; handles all daemon events
- src/pages/ — Onboarding (connect + join) and Chat
- src/components/ — Sidebar, MessagePane, PeerList
Dev: cd web && npm run dev (port 5274)
Build: cd web && npm run build
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>