<?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>DEV Community: Muhammad Tri Wibowo</title>
    <description>The latest articles on DEV Community by Muhammad Tri Wibowo (@muhammad_triwibowo_f924f).</description>
    <link>https://dev.to/muhammad_triwibowo_f924f</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%2F1966245%2F272cf8b3-ed35-42c4-b63f-212de99b11d1.png</url>
      <title>DEV Community: Muhammad Tri Wibowo</title>
      <link>https://dev.to/muhammad_triwibowo_f924f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muhammad_triwibowo_f924f"/>
    <language>en</language>
    <item>
      <title>9ed — A Zed-like Editor You Can Access From Anywhere</title>
      <dc:creator>Muhammad Tri Wibowo</dc:creator>
      <pubDate>Sun, 10 May 2026 17:38:44 +0000</pubDate>
      <link>https://dev.to/muhammad_triwibowo_f924f/i-wanted-zed-in-the-browser-so-i-built-my-own-31gd</link>
      <guid>https://dev.to/muhammad_triwibowo_f924f/i-wanted-zed-in-the-browser-so-i-built-my-own-31gd</guid>
      <description>&lt;p&gt;A few months ago I started looking for a development setup that felt fast, lightweight, and easy to access remotely.&lt;/p&gt;

&lt;p&gt;I really like Zed.&lt;br&gt;
It feels fast, modern, and much less bloated than Electron-based editors.&lt;/p&gt;

&lt;p&gt;But I kept running into one problem:&lt;/p&gt;

&lt;p&gt;I wanted something I could open from anywhere through the browser.&lt;/p&gt;

&lt;p&gt;Not a full cloud platform.&lt;br&gt;
Not a heavy VSCode-in-the-browser setup.&lt;br&gt;
Just a lightweight remote-first IDE that I could run on my VPS or homelab server.&lt;/p&gt;

&lt;p&gt;So I started building my own.&lt;/p&gt;

&lt;p&gt;The project is called &lt;a href="https://github.com/brainplusplus/9ed" rel="noopener noreferrer"&gt;9ed&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is 9ed?
&lt;/h2&gt;

&lt;p&gt;9ed is a browser-based IDE built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go backend&lt;/li&gt;
&lt;li&gt;Monaco Editor&lt;/li&gt;
&lt;li&gt;PTY terminal sessions&lt;/li&gt;
&lt;li&gt;Git integration&lt;/li&gt;
&lt;li&gt;AI chat support through ACP&lt;/li&gt;
&lt;li&gt;Built-in tunnel support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make remote development feel lightweight again.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why not just use VSCode Server?
&lt;/h2&gt;

&lt;p&gt;I tried.&lt;/p&gt;

&lt;p&gt;It works well, but on smaller VPS instances it started feeling heavy pretty quickly.&lt;/p&gt;

&lt;p&gt;Especially when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multiple extensions are installed&lt;/li&gt;
&lt;li&gt;several workspaces are open&lt;/li&gt;
&lt;li&gt;AI tooling is running&lt;/li&gt;
&lt;li&gt;browser tabs pile up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simpler&lt;/li&gt;
&lt;li&gt;faster to boot&lt;/li&gt;
&lt;li&gt;easier to deploy&lt;/li&gt;
&lt;li&gt;more focused on remote workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not necessarily a replacement for VSCode, but something optimized for a different use case.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;The backend is written in Go.&lt;/p&gt;

&lt;p&gt;Main reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;easy static deployment&lt;/li&gt;
&lt;li&gt;lightweight runtime&lt;/li&gt;
&lt;li&gt;PTY handling&lt;/li&gt;
&lt;li&gt;concurrency&lt;/li&gt;
&lt;li&gt;cross-platform support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Monaco Editor&lt;/li&gt;
&lt;li&gt;Zustand&lt;/li&gt;
&lt;li&gt;xterm.js&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The terminal is PTY-backed, so commands behave like a real shell instead of a fake terminal emulator.&lt;/p&gt;

&lt;p&gt;That means things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;interactive CLI apps&lt;/li&gt;
&lt;li&gt;vim&lt;/li&gt;
&lt;li&gt;tmux&lt;/li&gt;
&lt;li&gt;git tools&lt;/li&gt;
&lt;li&gt;AI coding agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;all work properly.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Agent Support
&lt;/h2&gt;

&lt;p&gt;One thing I wanted from the beginning was proper AI agent integration.&lt;/p&gt;

&lt;p&gt;Not just “send prompt → receive text”.&lt;/p&gt;

&lt;p&gt;9ed uses ACP (Agent Client Protocol), which is basically structured JSON-RPC communication between the editor and coding agents.&lt;/p&gt;

&lt;p&gt;Right now it supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenCode&lt;/li&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;Codex CLI&lt;/li&gt;
&lt;li&gt;Gemini&lt;/li&gt;
&lt;li&gt;Amp&lt;/li&gt;
&lt;li&gt;Pi&lt;/li&gt;
&lt;li&gt;GitHub Copilot CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s also PTY fallback support for tools that don’t implement ACP yet.&lt;/p&gt;

&lt;p&gt;One feature I ended up liking a lot is permission handling.&lt;/p&gt;

&lt;p&gt;When an AI agent wants to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;edit files&lt;/li&gt;
&lt;li&gt;run commands&lt;/li&gt;
&lt;li&gt;search the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;9ed can show approval dialogs before execution.&lt;/p&gt;

&lt;p&gt;It makes the whole thing feel less “black box”.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built-in Tunnel Support
&lt;/h2&gt;

&lt;p&gt;This was another thing that annoyed me with most remote IDE setups.&lt;/p&gt;

&lt;p&gt;Usually the process goes like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;install editor&lt;/li&gt;
&lt;li&gt;setup nginx&lt;/li&gt;
&lt;li&gt;setup SSL&lt;/li&gt;
&lt;li&gt;configure reverse proxy&lt;/li&gt;
&lt;li&gt;expose ports&lt;/li&gt;
&lt;li&gt;deal with firewall rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted something simpler.&lt;/p&gt;

&lt;p&gt;So 9ed can automatically start a tunnel using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bore&lt;/li&gt;
&lt;li&gt;Cloudflare Tunnel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which means you can run it and immediately access it remotely without additional setup.&lt;/p&gt;

&lt;p&gt;Still rough in some places, but surprisingly useful already.&lt;/p&gt;




&lt;h2&gt;
  
  
  Git Integration
&lt;/h2&gt;

&lt;p&gt;I didn’t want Git to feel like an afterthought.&lt;/p&gt;

&lt;p&gt;So I added:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;staging&lt;/li&gt;
&lt;li&gt;commit&lt;/li&gt;
&lt;li&gt;stash&lt;/li&gt;
&lt;li&gt;branch switching&lt;/li&gt;
&lt;li&gt;diff view&lt;/li&gt;
&lt;li&gt;gutter decorations&lt;/li&gt;
&lt;li&gt;discard changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The diff viewer uses Monaco DiffEditor, which turned out to work really well.&lt;/p&gt;




&lt;h2&gt;
  
  
  Responsive Layout
&lt;/h2&gt;

&lt;p&gt;One unexpected challenge was mobile support.&lt;/p&gt;

&lt;p&gt;Most browser IDEs technically “work” on mobile, but usability is painful.&lt;/p&gt;

&lt;p&gt;So 9ed changes layout depending on screen size:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;desktop → multi-panel&lt;/li&gt;
&lt;li&gt;tablet → overlays&lt;/li&gt;
&lt;li&gt;mobile → single-panel navigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s still obviously not ideal for serious coding on a phone, but it became much more usable than I initially expected.&lt;/p&gt;




&lt;h2&gt;
  
  
  Things That Were Harder Than Expected
&lt;/h2&gt;

&lt;p&gt;A few things became surprisingly complicated:&lt;/p&gt;

&lt;h3&gt;
  
  
  File synchronization
&lt;/h3&gt;

&lt;p&gt;Handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;external file changes&lt;/li&gt;
&lt;li&gt;deleted files&lt;/li&gt;
&lt;li&gt;unsaved changes&lt;/li&gt;
&lt;li&gt;overwrite conflicts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without destroying editor state took more work than I expected.&lt;/p&gt;




&lt;h3&gt;
  
  
  ACP integration
&lt;/h3&gt;

&lt;p&gt;Different AI agents behave very differently.&lt;/p&gt;

&lt;p&gt;Some stream responses.&lt;br&gt;
Some don’t.&lt;br&gt;
Some expose tools differently.&lt;br&gt;
Some require adapters.&lt;/p&gt;

&lt;p&gt;Making all of them work through a unified interface was messy.&lt;/p&gt;




&lt;h3&gt;
  
  
  Terminal lifecycle
&lt;/h3&gt;

&lt;p&gt;PTY management across platforms is full of edge cases.&lt;/p&gt;

&lt;p&gt;Especially:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows shells&lt;/li&gt;
&lt;li&gt;WSL&lt;/li&gt;
&lt;li&gt;process cleanup&lt;/li&gt;
&lt;li&gt;zombie sessions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Current State
&lt;/h2&gt;

&lt;p&gt;It’s still evolving pretty fast, but already usable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remote development&lt;/li&gt;
&lt;li&gt;homelab coding&lt;/li&gt;
&lt;li&gt;VPS editing&lt;/li&gt;
&lt;li&gt;AI-assisted workflows&lt;/li&gt;
&lt;li&gt;browser-based access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are still many rough edges, but I’m happy with the direction so far.&lt;/p&gt;




&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&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%2Fu6sq0a55a1p8bgmfr5jd.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%2Fu6sq0a55a1p8bgmfr5jd.png" alt=" " width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explorer&lt;/li&gt;
&lt;li&gt;Git diff&lt;/li&gt;
&lt;li&gt;AI chat&lt;/li&gt;
&lt;li&gt;Mobile layout&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  GitHub
&lt;/h2&gt;

&lt;p&gt;If you want to try it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/brainplusplus/9ed" rel="noopener noreferrer"&gt;9ed on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback, especially from people doing remote/self-hosted development setups.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
