The main process was resetting webContents zoom to 1 on every \zoom-changed\ event, which fires not just for native Chromium zoom gestures but also for the renderer's own setZoomFactor IPC calls. Paired with a keydown listener that re-sent the current zoom on every ctrl-combination (ctrl+backspace, ctrl+z, ctrl+v, ...), this created a self-triggered race that intermittently snapped the factor back to 1. Make the renderer the single source of zoom truth: keyboard, wheel, and menu all drive the same Solid signal, preventDefault blocks Chromium's built-in accelerators before they race, and the main process disables pinch zoom and no longer listens to zoom-changed.
OpenCode Desktop
Native OpenCode desktop app, built with Tauri v2.
Development
From the repo root:
bun install
bun run --cwd packages/desktop tauri dev
This starts the Vite dev server on http://localhost:1420 and opens the native window.
If you only want the web dev server (no native shell):
bun run --cwd packages/desktop dev
Build
To create a production dist/ and build the native app bundle:
bun run --cwd packages/desktop tauri build
Prerequisites
Running the desktop app requires additional Tauri dependencies (Rust toolchain, platform-specific libraries). See the Tauri prerequisites for setup instructions.