Today we’re releasing BrowserPod 2.0, a major milestone in our journey toward making BrowserPod a universal in-browser execution environment. With this release, BrowserPod is no longer limited to Node.js: it now ships with a real bash shell, git, and a full set of core Linux utilities.
What is BrowserPod
BrowserPod is an in-browser code sandbox. It runs Linux applications compiled to WebAssembly. It aims to implement the full Linux syscall interface, allowing existing applications to be compiled with little to no code change, and multiple applications to interact with each other.
It supports outbound internet access for downloading packages or calling APIs, and inbound connections for exposing local development servers.
That makes it useful for safe in-browser agentic code execution, web-based IDEs and development environments, interactive docs and live demos, educational platforms, and other applications that benefit from sandboxed execution inside a web app.
What’s new in 2.0
BrowserPod 2.0 features improvements across the board over 1.0: more syscalls implemented, faster networking and disk access, and bug fixes.
The most significant update is the addition of many useful applications to our system image, such as:
gitbashcurl- many core linux utilities like
cp,rm,ls,sed,grep,vi, …
Git
BrowserPod’s API already offered the building blocks to import a repository into a Pod’s filesystem, with BrowserPod.createDirectory() and BrowserPod.createFile()
.
This works and is still a viable solution for simple projects, but we really wanted to have a more convenient way to get up and running, without worrying about CORS or having to include the repo within the project using BrowserPod.
We achieved this by compiling the official git repo to WebAssembly and including it in our system image.
You can now just:
await pod.run("git", ["clone", "https://github.com/myorg/myrepo"], { terminal,});to clone your repo into the pod.
But it does not stop there: you can also git log, git add, git commit, git push, …
We expect this to be especially useful for use cases like Web IDEs, feature branch previews, and AI Agent sandboxes.
You can see it in action in the demo below:
Bash
Support for some form of shell is crucial for running most non-trivial applications on Linux. Plenty of programs are invoked via a wrapper shell script that sets up the environment and forwards arguments.
Even when limited to Node, we previously had to parse and emulate simple expressions like sh -c myscript || true for npm install scripts to run. This was quickly becoming a source of headaches, and we were happy to remove the hacks in favor of running a real shell.
And even more importantly, an interactive shell session enables a new level of interactivity between the user and the Pod. It was already possible to run multiple commands in sequence or in parallel using the BrowserPod API (and it still is), but bash is the de facto standard for interacting with a Linux system, for both humans and agents.
Bash by itself would not be very useful if you could only use it to start Node and npm, so we are also including a build of BusyBox, which provides common tools like cp, rm, ls, sed, grep, vi, and others.
Fork
A key feature that enabled us to compile bash (and many other utilities) is fork.
Fork creates a new process by cloning the entire state of the caller process. It returns different values to the parent and the child, which continue execution independently.
WebAssembly lacks the primitives to support fork() directly: it is neither possible to clone the call stack nor to start executing a function from an arbitrary point.
But fork is used ubiquitously in Linux programs, and although it can often be replaced by posix_spawn when used together with execve, doing so requires a lot of manual effort. We need it to work out of the box if we want to be able to add many utilities to BrowserPod in a way that is maintainable long term.
The details of how we made it work deserve their own blog post, but in short: we use a mix of compiler-injected instrumentation, stack unwinding via exceptions, and an embedded Wasm interpreter.
What’s next
BrowserPod 2.0 is the second step in an ambitious release plan for 2026:
- April 2026: Python support
- May 2026: Ruby support
- July 2026: Go support
- August 2026: Rust support
- Late 2026: Full Linux-class workloads powered by CheerpX
And in between these milestones, you can expect bug fixes, performance improvements, and more CLI utilities.
Try it now
Head to console.browserpod.io to get an API key. You can find the documentation on browserpod.io/docs
.
As a starting point, use our npm quickstart:
npm create browserpod-quickstartWe’re excited to see what you will build with a real shell at your fingertips — entirely in the browser. If you have questions or ideas, come our developer community on Discord.

