Compatibility matrix

What Verklet supports in the browser and server runtimes, what's partial, and what's intentionally out of scope.

This matrix tracks behavior implemented by the Verklet browser and server runtimes. It is a product contract for tests and demos, not a claim of full Node.js compatibility.

Status values:

Host runtime

CapabilityStatus
Runtime.boot()supported
backend: 'browser'supported
backend: 'server'supported
backend: 'auto' Pyodide Python with server fallbacksupported
Host capability detectionsupported
Service Worker preview routingsupported
Coordinator worker RPCsupported
Runtime limits (processes · memory · storage · network · CPU)supported
runtime.on('diagnostic') eventssupported
runtime.on('error') eventsupported
Multiple runtime instancessupported
runtime.teardown()supported

Server runtime

CapabilityStatus
Runtime broker sessionssupported
Browser VFS snapshot promotionsupported
Remote VFS read / write / mkdir / rm / renamesupported
Python / pip / uv command routingsupported
Server workspace persistencesupported
Server usage and quota eventssupported
Server preview providerexperimental
Interactive stdin / long-lived server processespartial
Arbitrary native package stackspartial

Browser Python

CapabilityStatus
python / python3 through Pyodidesupported
Browser pip install through Pyodide/micropippartial
Pyodide package preloadingsupported
VFS snapshot mount and file writebacksupported
Unsupported Python fallback to server in autosupported
uv, subprocesses, venvs, native Python wheelsserver-only

Virtual filesystem

CapabilityStatus
Mount / read / write / rm / renamesupported
Path traversal rejectionsupported
Watch eventssupported
Symlinks · hard linkssupported
Binary snapshotssupported
Tar / gzip / zip import / exportsupported
OPFS project persistence (content-addressed, dedup'd)supported
OPFS cross-tab handoff (BroadcastChannel + Web Locks)supported
Persistent package cachepartial

Process, shell, terminal

CapabilityStatus
Process records · stdio streamssupported
Node process workerssupported
sh interactive shellsupported
jsh interactive shell aliasdeprecated
WASIX/Toybox userland utilitiessupported
Shell operators (&&, ||, ;, redirection, pipes)partial
Terminal resizesupported
Signals (SIGINT, kill)supported
WASIX process identity (proc_id, proc_parent)supported
WASIX fork hook (proc_fork)partial

Node compatibility

ModuleStatus
CommonJS loadersupported
ESM loadersupported
fs · fs/promisessupported
http · httpssupported
processsupported
Bufferpartial
path · url · querystringsupported
events · stream · string_decodersupported
zlib · cryptosupported
dns · net · tlsexperimental
worker_threads · vm · perf_hooks · v8experimental
async_hooks · node:console · node:util/typesexperimental
child_processunsupported
Native .node addonsunsupported

Explicitly out of scope for this arc: DH/ECDH crypto, http2, real WebSocket framing, and full AsyncContext propagation.

Package managers

The supported default path is fast lockfile hydration.

WorkflowStatus
Default install mode (hydrate-lockfile)supported
npm lockfile hydrationpartial
pnpm lockfile hydrationpartial
Yarn classic lockfile hydrationpartial
Registry-proxy .wcpkg bundlespartial
Lifecycle scriptspartial
Arbitrary npm/pnpm/yarn edge casesmissing

Frameworks and CLIs

WorkflowStatus
Simple Node HTTP serversupported
Vite dev serverpartial
React fixturespartial
Next.js minimal apppartial
Vue · Svelte · SvelteKitpartial
Nuxt · Astro · Remix · React Routerpartial
Vite HMRpartial

Browsers

Browser / modeStatus
Chromium desktopsupported
Firefox (with CORP headers on every sub-resource)supported
Safari / WebKit (boot + spawn)supported
Safari / WebKit OPFS persistencepartial
Non-isolated degraded modeexperimental

See browser support for the cross-origin isolation headers your hosting page needs to serve, and server runtime for the managed backend path.

The browser utility surface is selected around Toybox rather than BusyBox, and runs as a trusted embedded Rust/WASI applet binary. It currently covers cat, cp, echo, env, false, grep, head, ls, mkdir, mv, ps, pwd, rm, tail, touch, true, wc, and which; cd remains a host shell command because it changes shell-local state. /ide now starts sh directly, while jsh remains as a beta compatibility alias.

proc_fork is exposed through the WASIX host as a runtime callback hook so fork-capable userland work can allocate child process IDs and receive the parent memory snapshot. Full browser fork/resume semantics still require the async WASIX process engine planned for the upstream Toybox shell path.