Reduce layout thrashing during virtual keyboard open/close on mobile by
batching resize and visualViewport event handlers to once per animation
frame. No visual or behavioral changes — desktop is unaffected.
- MainLayout: rAF-batch visualViewport resize/scroll and window resize
listeners (was firing 10-20x per frame during keyboard animation)
- Header: rAF-batch ResizeObserver and resize/orientationchange callbacks
- ChatContainer: rAF-batch ResizeObserver and resize fallback callbacks
- useDeviceInfo: 150ms debounce on resize listener (device type does not
change during keyboard transitions)
Desktop users: Please re-download and reinstall OpenChamber v1.8.6 from GitHub Releases.
We rotated the desktop updater signing key after moving the repository to the organization, so in-app auto-update from older desktop builds may fail signature verification.
This is a one-time reinstall and does not affect app functionality.
Important
CLI users: A startup regression in global npm/bun installs (symlink/wrapper entrypoints) is fixed in OpenChamber v1.8.7.
If openchamber exited without output on --version/status, update to v1.8.7 from npm: npm i -g @openchamber/web@1.8.7 or bun add -g @openchamber/web@1.8.7.
OpenCode, everywhere. Desktop. Browser. Phone.
A rich interface for OpenCode. Review diffs, manage agents, run dev servers, and keep the big picture while your AI codes.
More screenshots
Why use OpenChamber?
Cross-device continuity: Start in TUI, continue on tablet/phone, return to terminal - same session
Remote access: Use OpenCode from anywhere via browser
Familiarity: A visual alternative for developers who prefer GUI workflows
Features
Core (all app versions)
Branchable chat timeline with /undo, /redo, and one-click forks from earlier turns
Smart tool UIs for diffs, file operations, permissions, and long-running task progress
Voice mode with speech input and read-aloud responses for hands-free workflows
Multi-agent runs from one prompt with isolated worktrees for safe side-by-side comparisons
Managed-local path note: OPENCHAMBER_TUNNEL_CONFIG must point to a path inside the container user home (/home/openchamber/...). If your Cloudflare config references a credentials JSON file, that file path must also be accessible inside the container (mount with volumes).
Tunnel behavior notes
OpenChamber supports one active tunnel per running instance (port).
Starting a tunnel with a different mode/provider on the same instance replaces the current tunnel.
Replacing or stopping a tunnel revokes existing connect links and invalidates remote tunnel sessions for that instance.
Connect links are one-time tokens; generating a new link revokes the previous unused link.
Data Directory Permission Note: The data/ directory is mounted into the container for persistent storage (config, sessions, SSH keys, workspaces). Before running, ensure the directory exists and has proper permissions:
My wife, who - with zero AI background - sat down with the app for the first time and built the firework celebration that plays on every successful push.
Every contributor who shaped this project with their PRs, ideas, and attention to detail.