clients/ directory is an npm workspaces monorepo (~61,500 lines) unified by the Gateway Adapter pattern: all clients use identical components and stores, differing only in the transport adapter.
Web
Stack: Vite + React 19 + Tailwind CSS v4 The browser speaks ACP JSON-RPC 2.0 directly to the gateway over WebSocket viaWebGatewayAdapter. No intermediate backend, no BFF, no SSR.
- 70+ shared React components
- Exponential backoff reconnection
- Automatic session replay on reconnect
- Light and dark mode themes
Desktop (Tauri)
Stack: Tauri v2 + React + Rust SDK The Rust backend owns the ACP WebSocket connection via the Rust SDK on tokio. The React frontend communicates through Tauri IPC viaTauriGatewayAdapter.
Features:
- Chronicle Local Sync: Bidirectional sub-second file sync between agent workspace and local directory
- Teleport: Switch execution environment mid-session while preserving workspace state
Desktop (GPUI)
Stack: GPUI 0.2 (Zed editor framework), ~4,045 lines of Rust GPU-accelerated native client. No Tauri, no IPC, no WebView — the Rust SDK runs in the same process that renders at 60fps. macOS-only.OpenCode
Full-featured open-source agent client with 5 modes:- Rich TUI (OpenTUI/Solid.js)
- CLI
- Web (React 19)
- Desktop (Tauri v2)
- ACP Server (stdio for editor integration)
TUI
Terminal interface with session management, streaming chat, permission dialogs, and file viewer overlays.CLI
Scriptable command-line interface:Gateway Adapter Pattern
All clients share:- Shared React components (
clients/shared/) — 70+ components, Zustand stores, hooks - Gateway Adapter interface — abstracts transport (WebSocket, Tauri IPC, stdio)
- Identical rendering — every ACP event renders the same across all clients