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.
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 startWhat 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.