<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Akemmanuel</title>
    <description>The latest articles on Forem by Akemmanuel (@akemmanuel).</description>
    <link>https://forem.com/akemmanuel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3781084%2F61388312-3eec-4155-9640-1b1dee83dbcc.png</url>
      <title>Forem: Akemmanuel</title>
      <link>https://forem.com/akemmanuel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/akemmanuel"/>
    <language>en</language>
    <item>
      <title>I Built a Native Desktop GUI for OpenCode in 4 Days With AI</title>
      <dc:creator>Akemmanuel</dc:creator>
      <pubDate>Thu, 19 Feb 2026 12:59:49 +0000</pubDate>
      <link>https://forem.com/akemmanuel/i-built-a-native-desktop-gui-for-opencode-in-4-days-with-ai-p44</link>
      <guid>https://forem.com/akemmanuel/i-built-a-native-desktop-gui-for-opencode-in-4-days-with-ai-p44</guid>
      <description>&lt;h1&gt;
  
  
  I Built a Native Desktop GUI for OpenCode in 4 Days With AI
&lt;/h1&gt;

&lt;p&gt;OpenCode is one of the best open-source AI coding assistants out there. 107k stars on GitHub, terminal-native, fast. I use it every day. But its built-in web UI has problems, and after months of working around them, I decided to build something better.&lt;/p&gt;

&lt;p&gt;The result is &lt;a href="https://github.com/akemmanuel/OpenGUI" rel="noopener noreferrer"&gt;&lt;strong&gt;OpenGUI&lt;/strong&gt;&lt;/a&gt;: a native desktop app for OpenCode, built with Electron and React. It took four days. This is the story of why, what, and how.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvq6qi21n2wwx04puys6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvq6qi21n2wwx04puys6.png" alt="OpenGUI Screenshot" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;If you use OpenCode's web UI regularly, you know the friction points. There are open issues tracking UI bugs, performance problems (the SSE stream can consume ~25MB/min of bandwidth), and missing features that terminal power users expect.&lt;/p&gt;

&lt;p&gt;Here is what kept bothering me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No prompt queuing.&lt;/strong&gt; If the AI is mid-response and you think of a follow-up, you have to wait. Then remember what you wanted to say. Then type it. Context switches kill flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No session branching.&lt;/strong&gt; You go down the wrong path in a conversation and your only option is to start over or live with it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No git integration.&lt;/strong&gt; Worktrees, branches, merges... you're alt-tabbing to the terminal for all of it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No undo.&lt;/strong&gt; One bad AI response can derail a session with no way to revert.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not edge cases. These are daily annoyances for anyone doing serious work with the tool. I kept waiting for upstream fixes, then decided to stop waiting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What OpenGUI Does
&lt;/h2&gt;

&lt;p&gt;OpenGUI connects to OpenCode's backend and gives you a native desktop interface with features the web UI does not have. Here is what matters:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt Queue:&lt;/strong&gt; Stack up messages while the AI is busy. They auto-dispatch when it finishes. You can reorder them, edit them, or force-send one immediately. This alone changed how I work. I think three steps ahead and queue them all up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session Forking:&lt;/strong&gt; Branch a conversation at any message. Want to try two different approaches? Fork. The original session stays intact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session Revert / Unrevert:&lt;/strong&gt; Ctrl+Z and Ctrl+Shift+Z for entire message exchanges. The AI gave you a bad refactor? Undo the whole exchange and try a different prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git Worktree Management:&lt;/strong&gt; List, create, and remove git worktrees directly from the UI. No terminal alt-tabbing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git Branch Operations:&lt;/strong&gt; List branches, merge them, and get conflict detection inline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Voice Input:&lt;/strong&gt; Speech-to-text through a configurable Whisper endpoint. Useful for longer explanations where typing is slower than talking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-Project Support:&lt;/strong&gt; Manage AI sessions across multiple codebases in one window. Switch between projects without losing context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model Variant Cycling:&lt;/strong&gt; Hit Ctrl+T to cycle between low/medium/high quality model tiers. Quick drafts on the cheap model, careful refactors on the expensive one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context Usage Tracking:&lt;/strong&gt; A live percentage bar showing how much of the context window you have consumed. No more surprise "context limit reached" errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provider &amp;amp; MCP Management:&lt;/strong&gt; Connect and disconnect AI providers (with OAuth support), add custom providers, and manage MCP servers, all from the settings panel.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Vibecoded in 4 Days" Story
&lt;/h2&gt;

&lt;p&gt;I built the first working version of OpenGUI in four days using Claude Max (the $200/month plan) and ChatGPT Plus ($20/month). The process was roughly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Day 1:&lt;/strong&gt; Electron scaffold, OpenCode API integration, basic chat rendering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 2:&lt;/strong&gt; Session management, prompt queue, the message tree structure for forking/reverting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 3:&lt;/strong&gt; Git integration (worktrees, branches, merge), provider management, MCP server UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 4:&lt;/strong&gt; Polish, keyboard shortcuts, voice input, packaging for Linux (.deb) and macOS (.dmg).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would describe the approach as "AI-assisted, human-directed." I knew exactly what architecture I wanted. I wrote the specs, the AI wrote most of the code, I reviewed and corrected. Claude handled the bulk of the Electron/React work. ChatGPT was useful for second opinions and debugging edge cases where Claude got stuck.&lt;/p&gt;

&lt;p&gt;This is not a toy demo. The app is ~15k lines of TypeScript. But I want to be honest: it is early software. Version 0.1.7. There are rough edges. Some features need more testing. The codebase has the characteristic signs of fast AI-assisted development. It works well, but the internal structure could be cleaner in places.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works (Brief Tech Overview)
&lt;/h2&gt;

&lt;p&gt;For anyone curious about the stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Electron 40&lt;/strong&gt; with a React 19 renderer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; end to end&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bun&lt;/strong&gt; as the runtime and package manager&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS v4&lt;/strong&gt; for styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Radix UI&lt;/strong&gt; for accessible primitives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shiki&lt;/strong&gt; for syntax highlighting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KaTeX&lt;/strong&gt; for math rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app communicates with OpenCode's backend process over its existing API. It does not fork or modify OpenCode itself. It is a pure frontend replacement. You run OpenCode normally, point OpenGUI at it, and everything works.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install from .deb (Linux) or .dmg (macOS)&lt;/span&gt;
&lt;span class="c"&gt;# Or build from source:&lt;/span&gt;
git clone https://github.com/akemmanuel/OpenGUI.git
&lt;span class="nb"&gt;cd &lt;/span&gt;OpenGUI
bun &lt;span class="nb"&gt;install
&lt;/span&gt;bun run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cross-platform packages are built automatically via CI/CD. Grab the latest release from the &lt;a href="https://github.com/akemmanuel/OpenGUI/releases" rel="noopener noreferrer"&gt;GitHub releases page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Next
&lt;/h2&gt;

&lt;p&gt;The roadmap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Diff viewer improvements:&lt;/strong&gt; better inline diff rendering for large file changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session search:&lt;/strong&gt; full-text search across all your conversation history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin system:&lt;/strong&gt; let users extend the UI with custom panels&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows support:&lt;/strong&gt; currently Linux and macOS only, Windows is coming&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance profiling:&lt;/strong&gt; making sure the app stays fast as sessions grow large&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am also interested in what other OpenCode users want. The feature set so far reflects my own workflow. Yours might be different.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;OpenGUI is MIT licensed, free, and open source.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/akemmanuel/OpenGUI" rel="noopener noreferrer"&gt;github.com/akemmanuel/OpenGUI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latest release:&lt;/strong&gt; &lt;a href="https://github.com/akemmanuel/OpenGUI/releases" rel="noopener noreferrer"&gt;v0.1.7&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you use OpenCode and the web UI frustrates you, give OpenGUI a try. If it is useful to you, a star on the repo helps with visibility. If you find bugs or want features, open an issue. I read all of them.&lt;/p&gt;

&lt;p&gt;This is a solo project built in four days. It is not perfect. But it solves real problems I had every day, and maybe it solves some of yours too.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>programming</category>
      <category>electron</category>
    </item>
  </channel>
</rss>
