Wasmer runs your apps in fast, secure, and lightweight sandboxes: locally, in the cloud, or in your browser.
- Secure by default. You control file, network, and environment access.
- Lightweight. Fast startup with a small memory footprint.
- Ready to run. Python, JavaScript, Bash, and more from the registry.
- Embeddable. Add sandboxes to your app with the Wasmer SDK.
Install the CLI on macOS or Linux:
curl https://get.wasmer.io -sSfL | shWindows and other installation options
Windows (PowerShell)
iwr https://win.wasmer.io -useb | iexHomebrew (macOS / Linux)
brew install wasmerSee the installation guide for more options.
Run Python in a sandbox:
wasmer run python/python -- -c "print('Hello from Wasmer')"Hello from Wasmer
Or try a shell command and Cowsay:
wasmer run wasmer/bash -- -c "echo 'Hello from Wasmer'"
wasmer run syrusakbary/cowsay -- "Hello from Wasmer"Wasmer downloads the package and caches it for future runs. Use -- to separate
Wasmer options from the arguments passed to your program. To work with local
files, grant access to a directory with --volume; enable host networking with
--net when your program needs it. See the
CLI guide for details.
No installation needed: open wasmer.sh to try a sandbox in your browser.
Create a sandbox, choose your tools, and run code directly in your app with the Wasmer SDK.
JavaScript / TypeScript (Node.js 20 or newer):
npm install @wasmer/sdkRust
The Rust SDK currently uses a source dependency. Clone
wasmerio/wasmer-sdk, then point your
application at its rust directory:
[dependencies]
wasmer-sdk = { path = "../wasmer-sdk/rust" }
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }Follow the Rust setup guide for the required toolchain and workspace patches. Crates.io publishing is currently disabled.
Python
python -m pip install wasmer-sdkThe SDK's Python wheels support macOS and Linux on Intel and ARM64. See the Python guide.
Swift
Add the package to your Package.swift dependencies:
.package(
url: "https://github.com/wasmerio/wasmer-sdk.git",
revision: "wasmer-sdk-swift-v0.2.1"
)Then add the product to your target's dependencies:
.product(name: "WasmerSDK", package: "wasmer-sdk")This release provides prebuilt macOS binaries. See the Swift setup guide for platform support and Xcode setup.
JavaScript / TypeScript
Save this as sandbox.mjs:
import { Wasmer } from "@wasmer/sdk/node";
const wasmer = new Wasmer();
const sandbox = await wasmer.sandboxes.create({
packages: ["python/python@=3.13.20"],
});
const output = await sandbox
.command("python", ["-c", "print('Hello from Wasmer')"])
.run();
console.log(output.text());Run it with node sandbox.mjs. Python executes inside the sandbox; you don't
need Python installed on the host. See the
JavaScript guide.
Python example
Save this as sandbox.py:
import asyncio
from wasmer_sdk import Wasmer
async def main():
wasmer = Wasmer()
sandbox = await wasmer.sandboxes.create(
packages=["python/python@=3.13.20"],
)
output = await sandbox.command(
"python", ["-c", "print('Hello from Wasmer')"]
).run()
print(output.text())
asyncio.run(main())Run it with python sandbox.py. See the
Python guide.
Swift example
import WasmerSDK
let wasmer = try Wasmer()
let sandbox = try await wasmer.sandboxes.create(
packages: ["python/python@=3.13.20"]
)
let output = try await sandbox
.command("python", ["-c", "print('Hello from Wasmer')"])
.run()
print(try output.text())See the Swift guide for embedding in a macOS app and more examples.
JavaScript in the browser
Use the same JavaScript sandbox API with the @wasmer/sdk/browser import.
Execution happens in the browser. Your page needs cross-origin isolation
(Cross-Origin-Opener-Policy: same-origin and
Cross-Origin-Embedder-Policy: require-corp) for worker-backed execution.
Follow the browser setup guide
or explore wasmer.sh.
Rust example
use wasmer_sdk::{Result, Wasmer};
#[tokio::main]
async fn main() -> Result<()> {
let wasmer = Wasmer::new()?;
let sandbox = wasmer
.sandboxes()
.create()
.package("python/python@=3.13.20")
.await?;
let output = sandbox
.command("python")
.args(["-c", "print('Hello from Wasmer')"])
.run()
.await?;
println!("{}", output.text()?);
Ok(())
}See the Rust guide for workspace setup and more examples.
Build more with the sandbox API:
- Commands. Run code and capture output.
- Processes. Stream output and manage long-running tasks.
- Files. Read and write the sandbox workspace.
- Tools. Combine languages and packages in one sandbox.
- Services. Run servers with explicit network access.
The SDK is currently alpha. See the language guides for platform support and capabilities, and the SDK examples for Python scripts, an Edge.js HTTP server, PostgreSQL, and multiple tools sharing one sandbox.
Start with packages from the registry:
| Software | Package |
|---|---|
| Python | python/python |
| JavaScript / Node.js-compatible apps | wasmer/edgejs |
| Bash | wasmer/bash |
| PHP | php/php |
| PostgreSQL | wasmer/pglite |
| SQLite | sqlite/sqlite |
| FFmpeg | wasmer/ffmpeg |
Explore more packages, package your own software, or deploy an application to Wasmer Edge.
This repository contains the Wasmer runtime and CLI that power the sandbox
experience. The sandbox SDKs live in
wasmerio/wasmer-sdk.
For lower-level WebAssembly embedding, see the Rust API
and C API.
Contributions are welcome. For guidance on getting started, read Contributing to Complex Projects. Wasmer is MIT licensed.
Get help, share what you're building, and meet other Wasmer users: