Node.js,
in the browser.

A browser runtime for Node-style workloads. No backend, no tunneling, no spinning up containers — just a tab.

$ npm i @verklet/sdk
runtime · idle
index.mjs10 lines
import { createServer } from 'node:http';

const port = 3000;

createServer((req, res) => {
  res.writeHead(200, { 'content-type': 'text/plain' });
  res.end('hello from a tab\n');
}).listen(port, () => {
  console.log(`listening on :${port}`);
});
terminal
preview · :3000 → /v1 · scripted demo · real boot soon

The complete dev loop, client-side.

01 · The runtime

Real Node, in a tab.

Web Workers carry the processes. WebAssembly does the heavy lifting. OPFS persists the filesystem across reloads. Service Workers route preview requests like a real dev server would.

  • fs, http, process, events, streams
  • CommonJS + ESM
  • SharedArrayBuffer-backed synchronous VFS
  • Per-runtime limits (memory · processes · network · CPU)
  • Chromium · Firefox · WebKit

02 · Installs

Lockfile hydration, not resolution.

Treat npm/pnpm/yarn lockfiles as truth. Skip the resolver. Pull packages from the registry, lay them out on the VFS, run the install scripts that actually need to run. Cold installs in seconds.

03 · Previews

HMR through a service worker.

When a server inside the runtime opens a port, Verklet exposes it through a service worker on your origin. Vite-style HMR works. iframes refresh. The thing you built is the thing you preview.

Wherever a real dev loop has to fit on a page.

AI coding agents

Give agents a sandbox. Mount their work, run their commands, surface stdout and exits — without provisioning anything.

Browser IDEs

Bring your editor and a real runtime to the same origin. No SSH. No remote container. The terminal is just another component.

Embedded tutorials

Drop a working dev environment into your docs. The reader edits, the code runs, the preview reloads — all in their tab.

Customer demos

Ship a live, mutable demo of your product. No backend to scale, no per-visitor session to pay for.

An SDK that gets out of your way.

Boot a runtime, mount files, spawn processes, listen for events. No client/server split. No build step for the SDK itself. It runs the same way in your dev page, your tests, and your production site.

typescriptquickstart.ts
1import { Runtime } from '@verklet/sdk';
2
3const runtime = await Runtime.boot({
4 projectId: 'prj_demo',public project ID
5 persistenceKey: 'demo',OPFS-backed persistence
6});
7
8await runtime.mount({in-memory VFS
9 '/workdir': {
10 'package.json': { contents: '{"type":"module"}' },
11 'index.mjs': { contents: 'console.log("hello")' },
12 },
13});
14
15const proc = await runtime.spawn('node', ['index.mjs']);
16
17for await (const chunk of proc.output) {async iterable stdout
18 console.log(chunk);
19}

Free during beta. 20K MAB for non-commercial projects after.

Every project gets the same runtime features with a public project ID. Commercial tiers start at $20/mo and add commercial rights, support, and usage analytics.

See the tiers →

no credit card required