dox web workspace
readmedrag

Runs on your server · opens in a browser

Your IDE shouldn't need 1.6 GB.

dox is a 95 MB server that opens a workspace in your browser. Windows float on a canvas you can pan and zoom. Each app is a folder you can copy out. Conversations are files, not accounts.

fig. 1 — explorer, editor, agent1600×1000
The dox canvas with three windows open: an explorer file tree, a README in the editor, and an agent conversation saved as demo.sss.
measuredi7-12700
Memory, one tab
137MB
Cold start
118ms
Processes
2
On disk, Linux
2.8MB
apps/6
editor CodeMirror
explorer files
agent .sss
browser URLs
image bitmaps
wallpaper canvas
notesdrag
the canvas keeps goingdrag the background, or ctrl + scroll to zoom.
01Whythree claims

It runs where your code runs.

No account. No relay. No copy of your repository sitting on someone else's disk.

Your server

One Node process on your laptop or your box. It serves a page; the page is the IDE. Nothing leaves the machine unless you call something that goes out.

Your keys

The agent talks to whichever model endpoint you configure: DeepSeek, Anthropic, or anything that speaks the same API. Requests start from your server, billed to your key.

Your apps

Every app is a folder with a manifest.json, a build and, if it needs one, a server router. Copy it out and it still runs on its own.

02Architecturefour layers

App, wire, canvas, server.

Each layer knows only the one beneath it. Apps name events; a JSON graph decides who hears them; the canvas draws windows; the server mounts folders.

app/apps

One folder per app: a manifest, a built front end, and an optional server router. Editor renders source, Explorer renders the filesystem, Agent renders conversation files. Adding an app is adding a folder.

event/wires

A graph of edges, explorer.sessionClick → agent.loadSession, and a small SDK with two verbs. Apps never learn who is listening. Rewiring two apps is one line of JSON.

icanvas/canvas

One HTML file. Infinite pan, stepped zoom from 50% to 200%, floating windows, keyboard control, and a saved layout that is just a file.

system/server

One Node process. It scans app/*/, imports the routers, and serves everything from a single origin on port 3000. Static files go through sirv; routing is 260 lines of our own.

No bundler config is shared between apps. No package is hoisted across them. Each app carries its own dependencies so that it can leave.

03Benchmarkmeasured, not estimated

One workspace, three ways to open it.

Same machine, same project (16.7k lines), one window open. Memory is the sum of the process tree after it settles.

Cold start, memory and disk — i7-12700, 47.6 GB, Windows 10 / WSL2
Metricdoxcode-serverVS Code
Memory, workspace open137 MB925 MB1,580 MB
Processes269
Cold start118 ms349 ms755 ms
On disk2.8 MB705 MB987 MB
Method — three cold starts per tool, median reported. Memory summed over the process tree after 15–30 s of idle, with one browser client connected where the tool has one. dox — Windows: a 32 MB launcher plus a 63 MB server. A browser tab adds about 42 MB over a blank page. code-server — 4.141.0, WSL2, one workspace. Without a connected client it idles at 214 MB; the extension host and file watchers are what the extra memory buys. VS Code — the official portable build, a fresh profile and zero extensions. With a working set of extensions it goes higher: this machine's daily instance sits near 3.4 GB. Cold start — dox and code-server count to the first HTTP response; VS Code counts to the window appearing. None of the three counts to first keystroke.
04AI as a file type.sss

A conversation is a document.

In most editors, the assistant is a panel bolted to the side. In dox it is an app that renders a file type, exactly the way the editor renders source and the image app renders bitmaps.

A .sss file holds a title, the turns, and the tool calls made along the way. It shows up in the explorer with its own metadata. Double-click it and the agent resumes. Move it to another machine and it opens there too.

Editor renders .ts. Image renders .png. Agent renders .sss. Same mechanism, three apps.

sessions/modified
20261021-110716-yggu.sss2 min ago
demo.sss4 turns
20261020-224510-3kfa.sssyesterday
05Startthree lines

Clone it and run it.

No build step for the server, no install for the container. The apps ship built.

git clone https://github.com/dox012/dox.git
cd dox
node dox.mjs

# → http://localhost:3000/
  • runtimeNode 22+
  • dependenciessirv
  • build stepnone for the server
  • accountsnone
  • data directory../dox-data/
06Appssix folders

Six apps, one folder each.

None of them knows the others exist. Delete one, and the canvas still loads.

Editor

CodeMirror 6, tabs, autosave, file tree from the explorer.

Explorer

Files, folders, sessions, multi-select, drag to canvas.

Agent

Chat with tools. Renders .sss sessions.

Browser

URLs, PDFs, video and audio inside a window.

Image

Bitmaps, notes anchored to the file, zoom.

Wallpaper

What the canvas is made of.

drag to pan · ctrl + scroll to zoom