Skip to main content

Lab Notebook · Zero-Infrastructure Dev

A full Linux terminal in the browser — WebContainers, no server anywhere

In July 2025 we built a real terminal emulator that runs a full Node.js runtime entirely client-side via WebContainers, with persistent storage through the browser's own file system and an AI coding assistant wired straight into the shell. No backend at all. Kept as an honest data point on how far zero-infrastructure development can go.

JR
Jon RossFounder, vocabotics — 15 years building safety-critical systemsLab report · dated 1 July 2025
Verified by a human. Drafted with AI, verified by a human. Jon Ross, 1 Jul 2025
Living document. Reviewed 1 Jul 2025
Entry date
1 July 2025
Category
Tooling
Access
🔓 Public
ResearchProven

A real Node.js runtime, a real filesystem, and a real shell — all running inside a browser tab, with no server on the other end.

WebContainers
WASM-sandboxed full Node.js runtime
OPFS
persistent storage via the browser's own file system
0
servers required to run the environment
xterm.js
terminal emulator, AI assistant wired directly in

Honest evaluation

Proven

A full Node.js runtime, real npm packages, and persistent storage ran entirely client-side with zero servers — the core zero-infrastructure claim held, with named, minor package/perf limits.

The evidence — full reasoning behind the verdict

Verdict: proven. The central claim — that a genuinely capable Node.js development environment can run entirely inside a browser tab, with no server behind it — held up under real use, not just in principle.

This wasn't a toy shell: real npm packages installed and ran, files persisted across reloads via OPFS with no backend storage at all, and an AI assistant operated inside the same sandboxed process. The zero-server claim is falsifiable and wasn't fudged — there genuinely was no backend to fall back on, which is a stronger bar than most "serverless" claims clear.

The named limits (native Node bindings that don't translate into a WASM sandbox, performance that's close to but not identical to a real server-side process) are real but don't touch the central claim. What would disprove it further: running a CPU-heavy or native-binding-dependent real project through the same environment and measuring exactly where it breaks, rather than noting the category of limit in the abstract.

If a development environment can run entirely inside a browser tab, does it need a server at all? This is the question the project set out to answer directly, by building one and using it.

What it was

A browser-based Linux terminal with a full Node.js runtime behind it, built on WebContainers — a WebAssembly-based sandbox that runs actual Node, not an emulation of it, inside the browser sandbox. The goal was a complete, persistent, no-install development environment: open a tab, get a real shell.

What we built

Research

A complete terminal emulator (xterm.js on the front end) wired to a WebContainers instance running Node.js entirely client-side, with persistent storage handled through OPFS — the browser's Origin Private File System — so a project's files survive a reload without any server-side storage at all. An AI coding assistant was integrated directly into the shell, so commands, edits, and AI suggestions all happen in the same sandboxed process.

The genuinely surprising part was how capable WebContainers turned out to be. This isn't a toy echo shell — it's a real Node runtime, running real npm packages, executing real scripts, entirely inside a WASM sandbox with no round-trip to a backend.

What we learned — including the honest negative(s)

WebContainers open up development workflows that need zero infrastructure: no VM to provision, no container to pull, no backend to maintain — which matters a great deal for anything aiming at instant onboarding (a demo a stranger can try with one click, with nothing to install).

But the limits are real and worth naming plainly. Not every native Node dependency runs inside a WASM sandbox — packages with native bindings or unusual system calls don't always translate, and this project didn't attempt to work around that; it simply hit the boundary and documented it. Performance, likewise, is close to but not identical to a real server-side Node process — fine for editing and running most JavaScript/TypeScript projects, not a guarantee for anything CPU-heavy.

Where it went / status

A working, complete implementation, kept in the archive as a real proof of concept rather than a maintained product. The core lesson — that a genuinely capable Node runtime can live entirely client-side — fed directly into how later projects think about onboarding friction: the less infrastructure a first-time user has to stand up before they can try something, the more likely they are to actually try it.

What is still open — kept visible

The honest edges, next to the wins. This is what turns 🔬 into 🟢 — honestly.

  • Not every native Node dependency runs inside a WASM sandbox — package compatibility has real limits, not full parity with a native install.
  • Performance is close to, not identical to, a real server-side Node process — this report doesn't claim otherwise.
  • A working terminal, not a maintained product — built to test the ceiling of browser-only development, not to ship as a tool.

Where this connects

Sources

  1. vocabotics project audit — WASM Terminal (WebContainers, full Node.js runtime in-browser), Jul 2025vocabotics internal project history · as of July 2025

    We use cookies.