A terminal-style web interface for nullclaw.
The app uses WebSocket + WebChannel v1 and supports PIN pairing, streaming assistant responses, tool-call rendering, approval prompts, and end-to-end encryption.

ws://... endpoint and a 6-digit pairing PIN.assistant_chunk -> assistant_final).tool_call / tool_result).approval_request -> approval_response).localStorage with token TTL.Svelte 5 (Runes API)SvelteKit 2Vite 7Vitest 4 + @testing-library/svelte@noble/ciphers for ChaCha20-Poly1305The app is built as a static site (adapter-static, fallback: index.html, ssr = false).
Node.js 20+ (LTS recommended)npm 10+npm install
npm run dev
Open http://localhost:5173.
ws://127.0.0.1:32123/ws).web.accounts.<name>.auth_token (common for non-loopback binds), set it in the optional auth_token field.pairing_result, the UI switches to chat mode.npm run dev - local development server.npm run build - production build.npm run build:module - embeddable module build.npm run build:release - static app and embeddable module builds for release archives.npm run preview - preview built app.npm run cli -- run - serve built UI via local CLI entrypoint.npm run test - run Vitest suite.npm run test:watch - run Vitest in watch mode.npm run check - svelte-kit sync + svelte-check.npm run check:watch - svelte-check in watch mode.GitHub release artifacts include a runnable CLI bundle with build/ assets, launchers, and the embeddable module.js.
After extracting a release archive, put the launcher on your $PATH:
chmod +x nullclaw-chat-ui/nullclaw-chat-ui
sudo ln -sf "$(pwd)/nullclaw-chat-ui/nullclaw-chat-ui" /usr/local/bin/nullclaw-chat-ui
nullclaw-chat-ui run --host 127.0.0.1 --port 4173
Notes:
Node.js 20+ available as node.nullclaw-chat-ui.cmd from the extracted folder.nullclaw-chat-ui run serves the built static UI bundle with SPA fallback routing and still requires a reachable nullclaw WebSocket backend.src/routes/+page.svelte: page composition root.src/lib/session/connection-controller.svelte.ts: pairing/session orchestration, restore, logout.src/lib/protocol/client.svelte.ts: WebSocket client, envelope validation, reconnect.src/lib/stores/session.svelte.ts: timeline state (messages/tool calls/approvals/errors).src/lib/protocol/e2e.ts: cryptography.src/lib/ui/preferences.ts + src/lib/theme.ts: UI preferences.Detailed docs:
localStorage keys:
nullclaw_ui_auth_v1 - endpoint URL (may include ?token= when used), access_token, shared_key, expires_at.nullclaw_ui_theme - current theme.nullclaw_ui_effects - visual effects toggle.Auth token and shared key are cleared automatically when TTL expires or when the session is rejected (unauthorized).
npm run build
Static output: build/. Deploy to any static hosting/CDN with index.html fallback configured.
Content type
Image
Digest
sha256:ddfcbaf25…
Size
25.2 MB
Last updated
2 months ago
docker pull birdxs/nullclaw-chat-ui