Bohdan Triapitsyn 83ffb1af34 refactor(desktop): make Tauri thin shell running web sidecar (#273)
## What / Why
This PR finishes the desktop refactor: the Tauri app is now a thin shell that launches the web server as a sidecar and loads the UI from `http://127.0.0.1:<port>`. All real backend logic lives in `packages/web/server/index.js`; desktop Rust keeps only native integrations (menu/dialog/notifications/updater/deep-link + window chrome).
This unblocks:
- consistent behavior across web/desktop/vscode (single backend)
- simpler desktop maintenance (no duplicated Rust backend)
- host switching between Local + remote instances in desktop
- reliable cold-start behavior on slow machines (VSCode + desktop)
## Key changes
- Desktop sidecar runtime
  - build pipeline to bundle web dist + `openchamber-server` sidecar (`packages/desktop/scripts/build-sidecar.mjs`)
  - robust local port selection (prefer saved/default, fallback to random; persisted in `~/.config/openchamber/settings.json`)
  - improved PATH handling so the sidecar can locate `opencode` CLI (incl `~/.opencode/bin`, overrides, common bins)
  - disable native right-click context menu in production builds (dev keeps it)
- Desktop instance switcher (Tauri-only)
  - header button + modal to add/edit/delete remote hosts, set default, probe status/ping, switch back to Local escape hatch
  - auth gate includes host switcher so you can recover when a remote host is broken/auth-required
  - host list stored desktop-locally (not tied to the currently selected remote server)
- Notifications
  - decision logic moved server-side; desktop notifications emitted via sidecar stdout and shown natively by Tauri
  - prevent double-notifications on desktop Local origin (UI ignores SSE notification when native path is active)
  - restore macOS notification sound
- Updates
  - Tauri updater used only when viewing Local instance in desktop shell (avoid “remote web update” triggering desktop restart)
- Settings persistence & UX polish
  - persist model favorites/recents via `/api/config/settings` (works for web + desktop; not origin-dependent)
  - persist per-project sidebar collapse state in `projects[].sidebarCollapsed` via `/api/config/settings` (with debounce on toggles)
  - macOS header sizing/traffic-lights offsets fixed (marketing macOS major injected from desktop; MultiRun header aligned)
  - VSCode cold-start: keep retrying provider/agent loads after connection to avoid empty UI on slow machines
  - misc lint/type fixes + bun.lock sync
- Desktop bootstrap / resiliency
  - show onboarding screen when OpenCode CLI is missing (desktop Local origin), with retry hook to restart OpenCode after install
## Testing notes
- Desktop (macOS): switch Local <-> remote, set default host, verify auth gate recovery, native notifications (with sound), updater gated to Local
- Web: favorites/recents + per-project collapsed state persist across reload/restart
- VSCode: slow startup no longer results in missing providers/agents/models
2026-02-05 01:59:49 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2026-02-02 19:04:59 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00
2025-12-07 19:32:53 +02:00

OpenChamber

GitHub stars GitHub forks GitHub release Created with OpenCode Ask Zread Discord Support the project

Web and desktop interface for the OpenCode AI coding agent. Works alongside the OpenCode TUI.

The OpenCode team is actively working on their own desktop app. I still decided to release this project as a fan-made alternative.

It was entirely built with OpenCode tool - first with the TUI version, then with the first usable version of OpenChamber, which I then used to build the rest.

The whole project was built entirely with AI coding agents under my supervision. It started as a hobby project and proof of concept that AI agents can create genuinely usable software.

OpenChamber Chat

More screenshots

Tool Output Settings Web Version Diff View VS Code Extension

PWA Chat PWA Terminal

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 apps versions)

  • Integrated terminal
  • Git operations with identity management and AI commit message generation
  • Smart tool visualization (inline diffs, file trees, results highlighting)
  • Rich permission cards with syntax-highlighted operation previews
  • Per-agent permission modes (ask/allow/full) per session
  • Multi-agent runs from a single prompt (isolated worktrees; Web/PWA + Desktop)
  • Branchable conversations: start a new session from any assistant response
  • Task tracker UI with live progress and tool summaries
  • Model selection UX: favorites, recents, and configurable tool output density
  • UI scaling controls (font size and spacing)
  • Session auto-cleanup with configurable retention
  • Memory optimizations with LRU eviction

Web / PWA

  • Mobile-first UI with gestures and optimized terminal controls
  • Self-serve web updates (no CLI required)
  • Update and restart keeps previous server settings (port/password)
  • Cloudflare Quick Tunnel support for easy remote access (--try-cf-tunnel)
  • QR code generation for quick mobile access (--tunnel-qr)
  • Auto-login URL with embedded password (--tunnel-password-url)

Desktop (macOS)

  • Native macOS menu bar integration with app actions
  • First-launch directory picker to minimize permission prompts

VS Code Extension

  • Editor-integrated file picker and click-to-open from tool output
  • In-extension Settings access and theme mapping

GitHub Actions (Cloud Usage)

Run OpenChamber remotely using GitHub Actions. No local computer required.

  • Zero Setup: Runs on GitHub's infrastructure.
  • Persistence: Optional; enabled when OPENCODE_SERVER_PASSWORD is set (encrypted).
  • Remote Access: Access via secure tunnel (Cloudflare/Ngrok).

Read the Guide: OpenChamber for Actions

Custom Themes

Create your own color schemes by dropping JSON files into ~/.config/openchamber/themes/. Hot reload supported — no restart needed.

Read the Guide: Custom Themes

Installation

VS Code Extension

Install from VS Code Marketplace / Open VSX Registry or search "OpenChamber" in Extensions.

CLI (Web Server)

# Quick install (auto-detects your package manager)
curl -fsSL https://raw.githubusercontent.com/btriapitsyn/openchamber/main/scripts/install.sh | bash

# Or install manually
bun add -g @openchamber/web    # or npm, pnpm, yarn
openchamber                          # Start on port 3000
openchamber --port 8080              # Custom port
openchamber --daemon                 # Background mode
openchamber --ui-password secret     # Password-protect UI
openchamber --try-cf-tunnel          # Create a Cloudflare Quick Tunnel for remote access
openchamber --try-cf-tunnel --tunnel-qr              # Show QR code for easy mobile access
openchamber --try-cf-tunnel --tunnel-password-url   # Include password in URL for auto-login
OPENCODE_PORT=4096 OPENCODE_SKIP_START=true openchamber  # Connect to external OpenCode server
openchamber stop                     # Stop server
openchamber update                   # Update to latest version

Desktop App (macOS)

Download from Releases.

Prerequisites

See CONTRIBUTING.md for guidelines.

Tech Stack

Frontend

React TypeScript Vite Tailwind CSS

State & UI

Zustand Radix UI

Backend & Desktop

Express Tauri OpenCode SDK

Acknowledgments

Independent project, not affiliated with OpenCode team.

Special thanks to:

  • OpenCode - For the excellent API and extensible architecture.
  • Flexoki - Beautiful color scheme by Steph Ango.
  • Pierre - Fast, beautiful diff viewer with syntax highlighting.
  • Tauri - Desktop application framework.
  • Ghossty-web - for a great implementeation of a Ghostty web renderer.
  • David Hill - who inspired me to release this without overthinking.
  • My wife, who created a beautiful firework animation for the app while testing it for the first time.

License

MIT

S
Description
No description provided
Readme MIT
82 MiB
Languages
TypeScript 74.8%
JavaScript 19.8%
MDX 4.7%
CSS 0.4%
HTML 0.1%
Other 0.1%