Skip to content

About

A browser-native code sandbox. Run Node.js, Rust, C++, Python (preview), and other full-stack runtimes directly in the browser.

Topics

Resources

Stars

237 stars

Watchers

6 watching

Forks

Repository files navigation

BrowserPod.io  •  Docs  •  Try it on BrowserCode  •  Discord

BrowserPod
BrowserPod

The microVM that runs in the browser

Discord server GitHub Issues npm

Built with:   Wasm

Runtimes:   Node.js    Rust    Python (preview)    Go (coming soon)

Supported frameworks:   React    Next.js    Vue.js    Nuxt.js    Angular    Svelte    Express.js

Supported tools:   npm    Vite    tailwind    yarn    jj    Git

What is BrowserPod?

BrowserPod is a microVM that runs in the browser.

A Pod boots a Linux-like kernel in WebAssembly, with a small footprint and on-demand loading. It provides multiple language runtimes, including Node.js, Python and Rust, and extensive tools including git, bash, npm and pnpm. Pods run on the end user's browser, with zero latency, near-instant boot, and zero compute costs.

New in BrowserPod 4.0: BrowserPod is now free to use for any purpose, under the BrowserPod Community Licence. Unlimited and unmetered. When a pod needs the internet (a public URL, npm, GitHub), you can connect it to BrowserPod Edge, a complete networking layer, or provide a custom network backend.

Developers use BrowserPod to sandbox untrusted and AI-generated code in the browser, build web applications that embed server-side processes client-side, create interactive documentation and playgrounds and run AI coding CLIs in-browser without modification (e.g., Claude Code, Codex).

Features

Feature Description
Kernel BrowserPod's in-browser kernel exposes a comprehensive Linux-compatible syscall interface rather than a limited JavaScript shim.
WebAssembly executables BrowserPod runs full, unmodified WebAssembly builds of native tools and runtimes, running them directly in the users' browser.
Local execution Code runs on the user's device: zero latency between an agent and its code, and no compute cost to you.
Runtimes In-browser runtimes for Node.js, Rust, Python (preview), with Go coming soon.
Sandbox BrowserPod runs directly in the browser, inheriting its security boundary.
Filesystem A block-based streaming virtual filesystem provides images on demand, and any file changes stay local to the browser session using either IndexedDB or the Origin Private File System (OPFS).
Fidelity The full Node.js runtime is shipped, and supports most frameworks and tools (including React, Angular, Next.js, Express.js and Vite), with Wasm overrides for native dependencies (see Native binaries). Rust CLI tools work unmodified, including jj, ripgrep and Codex.
Networking Pods can reach the network through the page's fetch(): HTTP, HTTPS and WebSocket to origins that allow CORS (BrowserPod.opinionatedFetch works also with npm registry). BrowserPod Edge adds Portals, TCP connections and outbound HTTP access without CORS limits, under an allowlist. Custom allowlists come with Edge Pro.
Portals Ports that open in BrowserPod can be shared via a temporary private URL. This secure URL routes external traffic directly to the service running in the browser, enabling live previews and collaboration without any backend servers. Portals are part of BrowserPod Edge.
Tools BrowserPod provides a wide range of developer tools and frameworks, including bash, git and ripgrep, plus pnpm and npm for Node.js.
Multithreading Web workers enable true multithreading for complex, multi-process workloads.
Terminal To connect a process's I/O, pass it a Terminal, an in-browser pseudo-terminal handle created via createDefaultTerminal or createCustomTerminal. BrowserPod uses xterm.js by default, but also supports other Wasm-compatible pseudo-terminals (e.g., ghosttyweb).

Getting started

Quickstart

npm create browserpod-quickstart

Pick a template:

Template What it runs
vite-basic Node.js REPL
bash Bash terminal
vite-web Express server with a live preview (uses Portals)

No API key is needed. To enable Portals, which let you preview and share services running inside your pod, create a free BrowserPod Edge key at console.browserpod.io and paste it after choosing a template. You can also add VITE_BP_APIKEY to the project's .env later.

npm

npm install @leaningtech/browserpod

yarn

yarn add @leaningtech/browserpod

Boot a pod

import { BrowserPod } from "@leaningtech/browserpod";

const pod = await BrowserPod.boot({
  network: await BrowserPod.createFetchNetwork({ fetch: BrowserPod.opinionatedFetch }),
});
const terminal = await pod.createDefaultTerminal(document.querySelector("#console"));
await pod.run("bash", [], { terminal });

The page must be cross-origin isolated.

Add BrowserPod Edge

When a pod needs Portals, TCP, or outbound access without CORS limits, boot it on an Edge network with a key from console.browserpod.io:

const pod = await BrowserPod.boot({
  network: await BrowserPod.createEdgeNetwork({ apiKey }),
});
pod.onPortal(({ url, port }) => console.log(`Port ${port} is live at ${url}`));

Edge has a free monthly allowance; see pricing.

Runtimes

BrowserPod supports Node.js and Rust, with Python in preview. Go is coming soon; Ruby will follow.

Runtime Availability Since
Node.js Live 🟢 browserpod-1.0
Rust Live 🟢 browserpod-3.0
Python Preview 🟠 —
Go Coming soon 🟠 —
Ruby Planned ⚪ —

Considerations

Browser

Chromium-based browsers (Chrome, Edge) give the best results. Firefox and Safari work with some limitations, and memory-heavy workloads may fail in mobile devices.

Native binaries

BrowserPod runs Node.js in a Wasm environment. Packages that ship native binaries for specific CPU architectures will not run unless they provide a Wasm build.

Many popular build tools publish an official Wasm version alongside the native one. You can tell your package manager to install the Wasm version instead, anywhere in your dependency tree, without changing your own code.

Common Wasm overrides

Native package Replace with What it does
esbuild npm:esbuild-wasm@* Bundler used by Vite and many dev servers
rollup npm:@rollup/wasm-node@* Bundler used by Vite for production builds
@parcel/watcher npm:@parcel/watcher-wasm@* Watches files for changes during development

Add them under overrides in your package.json:

{
  "overrides": {
    "esbuild": "npm:esbuild-wasm@*",
    "rollup": "npm:@rollup/wasm-node@*",
    "@parcel/watcher": "npm:@parcel/watcher-wasm@*"
  }
}

If you use Yarn, the field is called resolutions instead of overrides. The contents are the same.

Framework-specific packages

Some frameworks ship their Wasm build as a separate package that you add as a normal dependency, rather than as an override:

Package Needed for
@next/swc-wasm-nodejs Wasm build of the SWC compiler used by Next.js
@oxc-minify/binding-wasm32-wasi Minifier for Nuxt and other Oxc-based toolchains
@oxc-parser/binding-wasm32-wasi Parser for Nuxt and other Oxc-based toolchains
@oxc-transform/binding-wasm32-wasi Transformer for Nuxt and other Oxc-based toolchains

Cross-origin isolation

BrowserPod uses SharedArrayBuffer, which means it can only run on cross-origin isolated pages.

To enable cross-origin isolation, your page must send both of these headers:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

Resources


Licensing

BrowserPod is free for any use, with attribution — personal, commercial and production — under the BrowserPod Community Licence (LICENSE.txt).

  • Credit BrowserPod: show "Powered by BrowserPod" with a link to browserpod.io where your pods run; headless tools and agents credit it in their docs or README. Edge Pro includes the Community Licence without attribution.
  • Load the runtime from our CDN. Self-hosting, vendoring and redistribution (OEM) need an Enterprise Licence.
  • No call-home: the runtime only downloads its own files and disk data. See the Runtime Privacy Policy.
  • Networking is optional: BrowserPod Edge (Portals, outbound networking, TCP) has its own Terms and Pricing Policy, with a free monthly allowance.

Previous licence and policy versions are kept at browserpod.io/legal.

About

A browser-native code sandbox. Run Node.js, Rust, C++, Python (preview), and other full-stack runtimes directly in the browser.

Topics

Resources

Stars

237 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages