Run Express in your browser

Tab Desktop runs Node.js servers inside the tab. An Express app scaffolded by express-generator listens on a virtual localhost port, the Browser app opens it, and a public URL can be attached so someone else — or a webhook — can reach it. Everything runs inside your browser tab on WebAssembly. There is no server executing your code, no container to wait for, and nothing to install.

Open Tab Desktop →Free · nothing to install

How it works

Node.js-compatible runtime with the `http` and `net` modules backed by a virtual network layer: localhost ports are served inside the tab, and public URLs are tunnelled browser-to-browser over WebRTC.

npx -y express-generator app --no-view
cd app
npm install
npm start

What you can do

  • Express, Koa, Fastify and plain `http` servers on virtual ports
  • Middleware, routing, JSON APIs, static files — as on Node.js
  • A public URL for the server; webhooks and curl reach it through a relay
  • SQLite and a Postgres-compatible database (PGlite) in the same tab
  • Several servers at once, each on its own port, listed in Harbor

What it does not do

  • A server lives as long as the tab is open — it is a development environment, not hosting
  • Outbound requests to hosts that block cross-origin access go through a proxy
  • Native add-ons cannot build; pure-JS and WebAssembly packages work

Start with a preset

One click gives it an isolated desktop: scaffolded, committed to git, open in Tab Code beside Harbor with the dev server running.

Questions

Can other people reach my server?

Yes. Publish it from Harbor and it gets a public URL. Browsers connect to yours directly over WebRTC; tools that cannot are relayed by a small signalling server, which never sees more than the bytes it forwards.

Does it support WebSockets?

Yes — the virtual network layer carries WebSocket upgrades, which is also how Vite's HMR works in the tab.

Also runs in the tab