OpenCode desktop app: the official beta on Mac, Windows and Linux, and OpenCode in tabs with its cost

Dmitriy Solodukha · checked against Caprock v0.140.1

OpenCode Desktop is a beta app for macOS, Windows and Linux: how to install it, how it differs from the TUI, and OpenCode in Caprock's tabs with its cost.

OpenCode has an official desktop app, in beta: OpenCode Desktop, for macOS, Windows and Linux. Install it with brew install --cask opencode-desktop or from opencode.ai/download, open it, and OpenCode runs in a window instead of a terminal. OpenCode Desktop is a window for one agent. If you would rather keep the OpenCode TUI, Caprock is a free desktop app that records every agent on the machine — OpenCode sessions whether or not it started them, Claude Code and Codex beside them, limits across subscriptions, what each pull request cost — and runs the TUI in its tabs.

What OpenCode Desktop is

OpenCode's README heads the section "Desktop App (BETA)". The app is an Electron window that runs OpenCode's server on a loopback port and talks to it: the same agent as the TUI, with no terminal. Both builds are called OpenCode, and on 20 October 2026 there are two of them:

  • OpenCode 2. The desktop buttons on opencode.ai/download and the Homebrew cask serve 2.1.1. The app carries its own copy of the OpenCode 2 CLI and runs, or joins, OpenCode 2's background service, the one the OpenCode 2 TUI attaches to.
  • OpenCode 1. GitHub's latest release, v1.19.3, published 16 October 2026, carries the CLI and the desktop app together, and Scoop installs that build. It starts a server of its own inside the app.

OpenCode 1 or 2?

OpenCode 2 is a new major version of the CLI as well as the app, with a new session table, plugin API and server API. Which install command gives which version is in How to install OpenCode. For the desktop app the rule is short: pair it with the CLI of the same version, or the two show different histories (below).

Install OpenCode Desktop

Where to get OpenCode Desktop, from OpenCode's README, release v1.19.3 and Scoop's extras bucket, read 20 October 2026.
SystemGet it
macOS, Apple silicon or Intel.dmg, or Homebrew
Windows, x64 or ARM64.exe installer, or Scoop
Debian, Ubuntu.deb, x64 or ARM64
Fedora, RHEL.rpm, x64 or ARM64
Other LinuxAppImage, x64 or ARM64
  1. 1

    macOS, with Homebrew

  2. 2

    Windows, add Scoop's extras bucket

  3. 3

    Windows, then install

On 20 October 2026 the cask installed 2.1.1, OpenCode 2, and the Scoop package 1.19.3, OpenCode 1. The download buttons on opencode.ai/download give the OpenCode 2 app as well: macOS, Apple silicon or Intel, Windows x64 or ARM64, and a Linux .deb or .rpm for x64. OpenCode's V2 docs also list Linux ARM64 and AppImage builds. For the OpenCode 1 app, use Scoop or the GitHub releases. Both apps are called OpenCode and share one app identity, ai.opencode.desktop, so on a Mac installing one replaces the other.

The TUI and opencode web

OpenCode is a terminal program first. Its docs list a terminal interface, the desktop app, IDE extensions and a web interface, and recommend WSL on Windows for the terminal one. To install the CLI:

  1. 1

    macOS or Linux, OpenCode's script

  2. 2

    Any system with Node.js

  3. 3

    Homebrew

These install OpenCode 1. Every install method, Windows and OpenCode 2 included, is in How to install OpenCode.

opencode web is the GUI without an app in OpenCode 1: it starts a local server on 127.0.0.1 on a random free port and opens OpenCode in your browser. --hostname 0.0.0.0 opens it to your network; without OPENCODE_SERVER_PASSWORD set, OpenCode's docs warn, "the server will be unsecured". OpenCode 2 has no web command; its docs use opencode pair, which prints a local URL with a username and password to open in a browser.

Desktop vs CLI: one file, two histories

Every OpenCode, CLI or app, version 1 or 2, keeps sessions in the same file, ~/.local/share/opencode/opencode.db. What decides whether two of them share a list is the table inside it:

  • OpenCode 1 writes the session table. The OpenCode 1 app and the OpenCode 1 CLI see each other's sessions.
  • OpenCode 2 writes session_v2. The OpenCode 2 app and the OpenCode 2 CLI see each other's sessions, and the app works through the same background service as the TUI.

Mixing versions splits the history. On its first run OpenCode 2 migrates the OpenCode 1 sessions already in the file into session_v2, once; an open report on OpenCode's tracker (#44028), filed against an OpenCode 2 beta, describes what follows: sessions made in OpenCode 1 after that copy do not appear in OpenCode 2, and sessions made in OpenCode 2 do not appear in OpenCode 1. The download page and the Homebrew cask give the OpenCode 2 app, while OpenCode's docs at opencode.ai/docs and Scoop still install the OpenCode 1 CLI, so you can end up with an OpenCode 2 app beside an OpenCode 1 CLI, and two lists.

What OpenCode Desktop does not cover

  • One agent. It runs OpenCode. Claude Code, Codex or Gemini CLI need their own windows.
  • One agent's spend. OpenCode prices its own sessions; it does not see what you spent in Claude Code or Codex that day.
  • It is a beta. OpenCode labels it so, and its issue tracker carries open desktop bugs.

OpenCode in tabs: Caprock

The real OpenCode TUI in a Caprock tab, before its first message; the projects and their figures are demo data made up for this picture.

Caprock is a free, open-source desktop app for macOS, Windows and Linux that records every agent on the machine and runs the agents' own terminal programs. With the OpenCode CLI installed, New agent offers OpenCode next to Claude Code, Codex, Gemini CLI, Grok Build and Hermes Agent:

  • The OpenCode TUI in a terminal tab, in the project you pick or a new worktree. ⌘E opens a shell beside it, up to four panes a tab. Closing a tab ends an idle session, its conversation saved, and asks about one still working.
  • OpenCode 1 or 2. Caprock asks the installed opencode for its version and starts it with the flags that version has: OpenCode 1 with its own server port and a model flag, OpenCode 2 with --standalone --session <id>, so the tab is tied to its session from the first byte.
  • Model and permissions. The model list offers the models of the providers you connected to OpenCode, in its own provider/model form; left empty, your OpenCode config decides. Plan starts OpenCode's plan agent; Accept edits makes commands ask first. OpenCode 1 gets these as --agent plan and OPENCODE_PERMISSION={"bash":"ask"}; OpenCode 2, which has no such flags, gets them in OPENCODE_CONFIG_CONTENT, merged into any you set. Bypass leaves OpenCode 1's own rules, and starts OpenCode 2 with --auto, which approves everything not explicitly denied.
  • Cost and tokens per session and per project. OpenCode computes each call's cost itself; Caprock reads it from OpenCode's database, opened read-only, and adds it unchanged to the same per-project table as Claude Code and Codex. For OpenCode 2 it sums the messages, so it leaves out the one call that names the session, which OpenCode counts in its own total. Like OpenCode's own figure, it is modelled from list prices, not a bill.
  • History. Sessions from before you installed Caprock are read too. What OpenCode wrote, and what you asked it, is searchable on the Memory screen beside Claude's. An ended session continues in a new tab with opencode --session <id>, plus --standalone on OpenCode 2 (covered by tests, not yet by a run).
  • Live. The database is read every five seconds. An OpenCode 1 session Caprock started, an OpenCode 1 opencode serve on its default port, and sessions on OpenCode 2's background service are followed through OpenCode's event stream and update at once. An OpenCode 2 session Caprock started runs its own private server and is picked up by the five-second read.
  • From your phone. A paired phone, on any network through Caprock's end-to-end encrypted relay, sees the sessions and their cost. One that may control sessions, the default when you connect it, can also start an OpenCode session in a folder under your home and type into it.

Caprock reads both tables, session and session_v2, so sessions you ran in either OpenCode Desktop show up with their cost too, whichever version made them. A database OpenCode 2 migrated from 1 holds many sessions in both; Caprock counts each message once. That covers the desktop app by the table it writes: Caprock's OpenCode 2 support was checked against the OpenCode 2 CLI, not the app.

What it read on my machine

70
OpenCode sessions, 23 May to 18 June 2026
9,309
model calls
$156.28
their cost, as OpenCode computed it

Read from Caprock on 8 October 2026; every figure comes from OpenCode's own database. They were mostly DeepSeek V4 Pro and MiniMax M3 calls on my own keys; what each call cost, and why, is in OpenCode pricing.

What Caprock does not do for OpenCode

  • It does not run OpenCode Desktop. It starts the opencode CLI you installed, with your own providers.
  • Permission prompts are answered in the terminal. Approve and Deny buttons, desktop notifications and Telegram alerts are for Claude Code sessions; OpenCode does not report an approval Caprock can read.
  • No branching. A session can be continued but not forked: OpenCode 1's --fork copies the messages and their cost, and Caprock would count them twice; OpenCode 2's TUI has no fork flag.
  • Project instructions reach Claude Code and Codex sessions, not OpenCode.
  • No OpenCode Go limits. The plan windows Caprock shows are Claude's and Codex's.
  • Tested on macOS against real installs of OpenCode 1 and OpenCode 2, and OpenCode 2 also in a Debian container on Linux. Otherwise, on Windows and Linux, both versions are covered by Caprock's test suite in CI, not by a run against a real install.

Which to use

  • OpenCode Desktop — you use OpenCode alone and want its own window without a terminal.
  • The TUI, or a browser tab (opencode web in OpenCode 1, opencode pair in OpenCode 2) — you live in a terminal, or want OpenCode in a browser tab on a machine you reach over the network.
  • Caprock — you run OpenCode with Claude Code or Codex and want one record of them, with limits and what each cost. Install it, or see how it compares with other agent apps.

Questions people ask

Is there an OpenCode desktop app?
Yes, in beta. OpenCode Desktop runs on macOS, Windows and Linux. The download buttons on opencode.ai/download and brew install --cask opencode-desktop, shown on that same page, give the OpenCode 2 build; Scoop's extras bucket on Windows and the GitHub releases give the OpenCode 1 build.
Is OpenCode Desktop free?
Yes. It is open source under the MIT licence, like the CLI. You pay for the model you connect, as you do in the terminal.
What is the difference between OpenCode Desktop and the CLI?
The CLI is the opencode TUI in your terminal. The desktop app is an Electron window that runs OpenCode's server for you, so you need no terminal. Each desktop app shares its history with the CLI of the same major version: both write the same opencode.db, OpenCode 1 to its session table and OpenCode 2 to session_v2.
Does OpenCode have a GUI?
Three: the desktop app, a browser interface served from 127.0.0.1 (opencode web in OpenCode 1, opencode pair in OpenCode 2), and extensions for VS Code, Cursor, Zed, Windsurf and VSCodium.
Can I run OpenCode and Claude Code in one app?
Yes. Caprock starts the OpenCode TUI, OpenCode 1 or 2, in a terminal tab next to Claude Code and Codex, and adds each session's cost, as OpenCode computed it, to the same per-project table.

Sources