userland.run70Try the demo
Compare · StackBlitz WebContainers

userland.run vs StackBlitz WebContainers

WebContainers, from StackBlitz, is the best-known way to run Node.js in a browser tab and powers StackBlitz and bolt.new. userland.run takes a different route — emulating a RISC-V Linux machine — and the two make opposite trade-offs on speed, fidelity and licensing.

Last verified: · sources cited below

The short answer

  • Choose WebContainers if you need the fastest, most battle-tested Node.js-in-the-browser for npm-based web tooling, and a commercial license (or prototype-only use) works for you.
  • Choose userland.run if you need open-source licensing you can self-host, real Linux binaries beyond Node (BusyBox, Rust/Go/C tools), a wasm runner or a capability-based JS sandbox alongside Node.

Side by side

StackBlitz WebContainersuserland.run
License@webcontainer/api package is MIT, but the runtime is proprietary: "Licensing is required for production usage of the API in a commercial, for-profit setting." Prototypes/POCs don't need one. [1][2]Runtime: AGPL-3.0 or commercial UEL. SDK: MPL-2.0 or UEL. Source on GitHub.
How it worksA "WebAssembly-based operating system" running Node.js in the tab, with a virtualized TCP stack mapped to the Service Worker API. [3]User-mode RV64GC RISC-V emulator + Linux syscall layer in wasm, plus peer runners: Node on the host JS engine, a wasm32-wasip1 runner, a Boa JS sandbox.
Node.jsRuns Node.js on the browser's own JS engine (JIT speed). The supported Node version is not stated in the docs we checked.Real Node.js v25.4.0 ELF on the emulator (fidelity), or nodert on the browser's JS engine (fast, with documented divergences).
Native binaries"Loading native addons is disabled by default"; packages need a wasm or JS fallback. No arbitrary Linux ELF. [4]Yes — static riscv64 Linux ELF binaries (BusyBox, ripgrep, …) and wasm32-wasip1 apps.
Offline / self-hostingDocs list "works offline"; self-hosted, on-prem and VPC installs are an enterprise option. [5][2]Static files you host yourself. Catalog apps come from a signed CDN index (mirrorable via CdnOptions.baseUrl) and are cached in OPFS.
PricingNot public — "contact us". configureAPIKey exists for commercial usage. [2][6]Free under AGPL-3.0 / MPL-2.0. A commercial license (UEL) is available from And The Next GmbH for terms the open-source licenses don't provide.
BrowsersCOOP + COEP (require-corp or credentialless). Chromium fully supported, Firefox alpha, Safari beta (16.4+). [7][8]Cross-origin isolation (COOP/COEP, or the shipped service worker) + SharedArrayBuffer. This site's sample suite runs in Chromium; other engines are not in the published test matrix.
Concurrency"Only a single instance of WebContainer can be booted concurrently." [6]Several Nano instances per page, each its own wasm memory — bounded by the device's RAM.
Preview / networkingserver-ready / port events give preview URLs for servers in the container. [9]Inbound: in-tab servers previewed via a service worker (/sw/<port>/). Outbound: HTTP through the host fetch (CORS applies; an optional self-hosted CORS proxy ships).
SpeedNear-native for JavaScript — Node runs on V8/JSC, not an emulated CPU.Emulated code is much slower than native/JIT; the host-engine Node tier and the wasm runner avoid emulation.
WebContainers is a trademark of StackBlitz, Inc. This page compares publicly documented behaviour; numbers in brackets refer to the sources at the bottom.

Where WebContainers is better

  • Speed. JavaScript runs on the browser's JIT. userland.run's fidelity path interprets every RISC-V instruction, so starting the real Node binary takes much longer.
  • Maturity. It has been in production behind StackBlitz since 2021 and also powers bolt.new.
  • Commercial backing. A documented API and an enterprise program with self-hosting options from the vendor.

Where userland.run is different

  • Open source, self-hostable. The runtime is AGPL-3.0 and the SDK MPL-2.0; you can read, fork and serve every byte from your own domain. A commercial license exists for closed-source derivatives.
  • Real binaries. The emulator runs unmodified riscv64 Linux ELF executables — the actual Node.js v25.4.0 binary, BusyBox, ripgrep and more from a signed catalog.
  • Four runners, one filesystem. Besides Node: a wasm32-wasip1 runner, a capability-scoped JS sandbox and a shell, all sharing one VFS.
  • Small core. The slim emulator image is 2.46 MB; everything else is installed on demand.

Migrating a WebContainers integration

The shapes are close: boot an instance, mount files, spawn processes, preview a server. In the SDK that is createNano(), nano.fs.writeFile(), nano.shExec() / nano.node(), and ServeBridge + startServer for previews — see dev servers and the SDK reference. Expect slower cold starts if you run Node on the emulator; route node to the host engine with engines when the program doesn't need full fidelity.

FAQ

Is userland.run a drop-in replacement for the WebContainer API?

No. The concepts map one to one (boot, files, processes, preview), but the API is different and so is the execution model. Plan for a port, not a package swap.

Do I need a license to use WebContainers?

According to StackBlitz, production use of the API in a commercial, for-profit setting requires a license; prototypes and proofs of concept do not. Pricing is available on request.

Can userland.run run native npm addons?

On the RISC-V VM path, Node is the real binary, so addons work if they are built for riscv64 Linux. Prebuilt x64 addons from npm will not load.

Which one is faster?

For JavaScript workloads, WebContainers. userland.run's host-engine Node tier closes part of the gap, but its fidelity path is an interpreter.

Sources

  1. npm: @webcontainer/api (MIT, 1.6.4)www.npmjs.com/package/@webcontainer/api
  2. WebContainers — Enterprise / commercial licensingwebcontainers.io/enterprise
  3. StackBlitz blog — Introducing WebContainersblog.stackblitz.com/posts/introducing-webcontainers/
  4. WebContainers — Troubleshooting (native addons)webcontainers.io/guides/troubleshooting
  5. WebContainers — Introductionwebcontainers.io/guides/introduction
  6. WebContainers — API referencewebcontainers.io/api
  7. WebContainers — Configuring headerswebcontainers.io/guides/configuring-headers
  8. WebContainers — Browser supportwebcontainers.io/guides/browser-support
  9. WebContainers — Running processeswebcontainers.io/guides/running-processes
  10. userland-run/nano — README and LICENSE.mdgithub.com/userland-run/nano
  11. userland-run/sdk — @userland-run/nano-sdk READMEgithub.com/userland-run/sdk

All third-party facts were checked against these pages on 2026-10-11. Products change — if something here is out of date, please open an issue.