BrowserPod.io • Docs • Claude Code • Discord
BrowserPod is a WebAssembly-based API that creates a lightweight Linux virtual machine directly in a user's browser tab. Its in-browser Linux-like kernel supports sandboxed runtime environments including Node.js, Rust and Python (preview), with more coming soon.
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).
| Feature | Description |
|---|---|
| WebAssembly | BrowserPod compiles full native runtimes to WebAssembly, running them directly in the browser without a server. |
| Kernel | BrowserPod's in-browser kernel exposes a Linux-compatible syscall interface rather than a limited JavaScript shim. |
| Sandbox | BrowserPod runs directly in the browser, inheriting its security boundary. |
| Runtimes | In-browser runtimes for Node.js, Rust and Python (currently in preview). Ruby and Go are in development. |
| Compatibility | The Node.js runtime ships with npm built in, and supports most frameworks and tools (including React, Angular, Next.js, Express.js and Vite; see Node.js frameworks for more). Most Rust CLI tools work unmodified, including jj, ripgrep and Codex. |
| Filesystem | A block-based streaming virtual filesystem provides full POSIX compatibility. Disk images are streamed on demand, and any file changes stay local to the browser session using either IndexedDB or the Origin Private File System (OPFS). |
| 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. |
| Tools | BrowserPod provides a wide range of developer tools and frameworks, including bash, git and ripgrep, plus npm for Node.js. |
| Multithreading | Web workers enable true multithreading for complex, multi-process workloads that would normally require a full operating system. |
| 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). |
| Networking | BrowserPod provides controlled networking. To prevent malicious use, egress is limited to a whitelist of domains (e.g., github.com). To add domains for your project, reach out to us on Discord. |
npm create browserpod-quickstart
npm install @leaningtech/browserpod
yarn add @leaningtech/browserpod
BrowserPod supports Node.js and Rust, with Python currently in preview. Additional runtimes, including Go and Ruby, are in development.
| Runtime | Availability | Since |
|---|---|---|
| Node.js | Live 🟢 | browserpod-1.0 |
| Rust | Live 🟢 | browserpod-3.0 |
| Python | Preview 🟠 | TBA |
| Go | 2026 🔴 | TBA |
| Ruby | 2026 🔴 | TBA |
Chrome, Firefox, Edge and Safari are all supported. For maximum compatibility, we recommend Chromium-based browsers.
In some experimental use cases that require significant client memory, BrowserPod may fail in Safari.
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.
| 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.
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 |
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
- Documentation: Complete guides, tutorials, and API reference
- Showcase: Community projects built on BrowserPod
- Discord Community: Get help and share your projects
- GitHub Issues: Report bugs and request features
- Yarn 6 playground: Yarn 6 runs on BrowserPod in its official playground.
BrowserPod is proprietary software. It's free to use for personal and open-source projects.
Commercial support, feature fast-tracking, sponsored development and consulting packages are available for Enterprise customers.
Generous token grants are available for start-ups and open-source projects.
See our pricing for more details or contact us if you've got questions.
