Lightweight, secure sandboxes for untrusted processes.
Project description
vpod Python SDK
A lightweight, portable sandbox that gives an untrusted process an instant Linux environment. It uses the RISC‑V architecture and runs entirely inside WebAssembly.
- Fast startup — Boot in under a second.
- Portable — Runs anywhere without any setup required.
- Isolated — All execution state stays inside the WASM sandbox.
Installation
pip install vpod
Usage
Shell commands (stateless)
Each call gets a fresh VM — no shared state:
from vpod import Sandbox
sbx = Sandbox.create()
result = sbx.commands.run("echo hello")
print(result.stdout) # hello
print(result.exit_code) # 0
Persistent session
All calls share the same running VM:
from vpod import Sandbox
with Sandbox.create() as sbx:
sbx.commands.run("export Foo=Bar")
sbx.commands.run("touch /tmp/data.csv")
result = sbx.commands.run("echo $Foo")
print(result.stdout) # Bar
Python REPL
Run Python code with persistent state across calls:
from vpod import Sandbox
with Sandbox.create() as sbx:
sbx.code.run("import requests")
sbx.code.run("data = [1, 2, 3]")
result = sbx.code.run("print(sum(data))")
print(result.text) # 6
Variables and imports persist for the lifetime of the session.
Snapshots
The first call to Sandbox.create() downloads the VM snapshot (~50MB) and caches it locally at ~/.local/share/vpod/snapshots/. Subsequent calls use the cache instantly.
To pre-download (e.g. in a Dockerfile or CI setup):
from vpod import snapshots
for s in snapshots.fetch_registry():
print(s["name"], s["tag"])
path = snapshots.pull("alpine:latest")
How it works
A vpod runs a RISC‑V virtual machine compiled to WebAssembly. The core implements the RV64GCV specification:
- G (General-purpose): I/M/A/F/D extensions for integer, multiply/divide, atomics, and floating-point
- C (Compressed): 30% smaller code size, improving memory efficiency
- V (Vector): SIMD operations for parallel data processing
The WASM component communicates with the host through WASI 0.2, providing controlled access to networking and I/O while keeping all execution state isolated inside the sandbox.
Limitations
- Emulation overhead — No hardware acceleration in WASM. CPU-intensive workloads run slower than native.
- No GPU access — CUDA, Metal, and hardware ML accelerators are not yet available.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vpod-0.0.3.tar.gz.
File metadata
- Download URL: vpod-0.0.3.tar.gz
- Upload date:
- Size: 147.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85cf1c896d4cc64bf2878a8da383bcd088c6d2eccbd73eb74d82c83fb80ee371
|
|
| MD5 |
05aa01c63e6c91ba3e2993c3f55dd640
|
|
| BLAKE2b-256 |
10f2584252adae3ecb04dce949450c1362e554efd17125fd2b88db8429f2b194
|
File details
Details for the file vpod-0.0.3-py3-none-any.whl.
File metadata
- Download URL: vpod-0.0.3-py3-none-any.whl
- Upload date:
- Size: 147.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
174ef958e9a4e56ec8001dbeabb613b70ff58d8930fde42943243a1a206a7ea9
|
|
| MD5 |
6a25b30b6de73158b865f6749cc542fa
|
|
| BLAKE2b-256 |
80494b0f8137557967618b36cc5a9a82906a377644f240bdecd380af680c349e
|