userland.run vs BrowserPod
BrowserPod, from Leaning Technologies (the team behind CheerpX and WebVM), runs Node.js and other runtimes in the browser on a WebAssembly-native kernel with Linux-compatible syscalls. It launched in late 2025 and has been shipping quickly. Here is how it differs from userland.run.
Last verified: · sources cited below
The short answer
- Choose BrowserPod for fast Node.js (and Rust, Python preview) sandboxes with broad browser support, hosted public URLs for in-browser servers, and a vendor that runs the relay — if metered, API-key-based pricing fits.
- Choose userland.run if you need to self-host everything under an open-source license, run prebuilt Linux binaries today, or want no per-session metering.
Side by side
| BrowserPod | userland.run | |
|---|---|---|
| License | Proprietary: the npm package's license grants no rights beyond Leaning Technologies' terms of service and pricing policy. [1] | Runtime: AGPL-3.0 or commercial UEL. SDK: MPL-2.0 or UEL. Source on GitHub. |
| How it works | A "WebAssembly-native kernel, designed from scratch to run in the browser"; processes run in Web Workers with Linux-compatible syscalls; an Ext2-like filesystem streamed on demand and cached in OPFS/IndexedDB. [2] | 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.js | A Node build modified to run JavaScript on the browser's own engine (near-native speed). Launched with Node.js 22; Rust official since 3.0, Python in preview. [2][3][4] | 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 | Programs must be compiled with Cheerp for its target: "third-party binaries are currently unsupported"; npm packages need a wasm build. x86 support via CheerpX is on the roadmap. [2][5] | Yes — static riscv64 Linux ELF binaries (BusyBox, ripgrep, …) and wasm32-wasip1 apps. |
| Offline / self-hosting | You host the outer app, but BrowserPod.boot needs an API key; self-hosting is an Enterprise option. [6][7] | Static files you host yourself. Catalog apps come from a signed CDN index (mirrorable via CdnOptions.baseUrl) and are cached in OPFS. |
| Pricing | Personal: free, non-commercial/evaluation, 10,000 tokens. Pro: $20/month, 20,000 tokens, extra $10 per 10,000. A boot costs 10 tokens, each further hour 10. Enterprise above fair use. [8] | 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. |
| Browsers | COOP same-origin + COEP require-corp; Chrome, Edge, Firefox and Safari on desktop and mobile per the FAQ. [9][6] | 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. |
| Preview / networking | "Portals": random public domains routing HTTP to services in the pod, relayed via Cloudflare Workers; outbound traffic on the free tier limited to allow-listed domains. [2] | 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). |
| Activity | Very active: 3.4.0 on npm on 2026-10-07. [1] | Active: SDK 0.2.7, nano v0.2.1 — see the changelog. |
Where BrowserPod is better
- Speed. Code compiled to wasm and JavaScript on the browser's JIT avoid interpretive CPU emulation.
- Shareable previews. Portals give in-browser servers public URLs; userland.run previews are only reachable from the tab that runs the VM.
- Language runtimes. Official Rust support and a Python preview, plus bash, git and BusyBox since 2.0. [10]
- Browser coverage. The vendor states support for all major desktop and mobile browsers.
Where userland.run is different
- No API key, no meter. Everything is static files on your origin; nothing phones home, and there is no token budget per boot or hour.
- Open source. AGPL-3.0 runtime, MPL-2.0 SDK, commercial license optional.
- Prebuilt binaries now. Static
riscv64Linux ELF executables run as they are — no recompilation against a vendor toolchain. - A JS sandbox and a WASI runner alongside Node, sharing one filesystem — see features.
Both projects need cross-origin isolation, and both keep user code in the visitor's browser. The difference is mostly who controls the runtime and the network relay, and whether you are emulating a CPU or compiling for a wasm kernel.
FAQ
Does BrowserPod run arbitrary Linux binaries?
Not today. Leaning Technologies says third-party binaries are unsupported and programs must be compiled from source with Cheerp; running x86 binaries through CheerpX is a stated roadmap item.
How is BrowserPod priced?
Through tokens on an API-key subscription: a free Personal plan for non-commercial use and evaluation, and a $20/month Pro plan for commercial use with 20,000 tokens; a boot and each additional hour cost 10 tokens each.
Can I get a public URL for a server running in userland.run?
No. Previews are served by a service worker to the same tab. To share a running app you would deploy it somewhere conventional.
Sources
- npm: @leaningtech/browserpod (LICENSE.txt, versions)www.npmjs.com/package/@leaningtech/browserpod
- Leaning Technologies — BrowserPod deep dive (2026-05-18)labs.leaningtech.com/blog/browserpod-deep-dive
- Leaning Technologies — BrowserPod announcementlabs.leaningtech.com/blog/browserpod-annoucement
- BrowserPod — changelogbrowserpod.io/docs/more/changelog
- BrowserPod — working around native npm dependenciesbrowserpod.io/docs/guides/working-around-native-npm-dependencies
- BrowserPod — FAQbrowserpod.io/docs/more/FAQ
- BrowserPod — licensingbrowserpod.io/docs/more/licensing
- BrowserPod — pricing policybrowserpod.io/browserpod-pricing-policy
- BrowserPod — cross-origin isolationbrowserpod.io/docs/understanding-browserpod/cross-origin-isolation
- Leaning Technologies — BrowserPod 2.0labs.leaningtech.com/blog/browserpod-20
- userland-run/nano — README and LICENSE.mdgithub.com/userland-run/nano
- 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.