Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Vpod Python SDK

A lightweight, portable sandbox that gives an untrusted process an instant Linux environment.

GitHub CI

DocumentationIssues


It uses a 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

Persistent session (Recommended)

All calls share the same running sandbox. Using a context manager (with) automatically cleans up resources when done:

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. Variables and imports persist for the lifetime of the session.

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

Advanced Configuration

You can mount local directories into the sandbox and specify which snapshot to use.

from vpod import Sandbox

# Mount a local workspace and use a snapshot with pre-installed data science tools
mounts = {"workspace": "/workspace:rw"}

with Sandbox.create(snapshot="vsnap-data", mounts=mounts) as sbx:
    sbx.code.run("import pandas as pd")
    sbx.code.run("print('Pandas is ready!')")

Suspend & Resume

Pause a running sandbox and resume it later — no daemon, no background process. Only dirty memory pages are saved, making it fast and storage-efficient.

from vpod import Sandbox

with Sandbox.create() as sbx:
    sbx.commands.run("uv pip install --system requests")
    instance_id = sbx.suspend()

# Later (even from a new process):
sbx = Sandbox.resume(instance_id)
sbx.code.run("import requests; print(requests.__version__)")
Method Description
sandbox.suspend() Suspend to disk, returns instance ID
Sandbox.resume(id) Resume a suspended instance
Sandbox.list_instances() List all instances
Sandbox.destroy(id) Delete a suspended instance from disk

Shell commands (stateless)

If you just need a quick one-off execution without preserving state:

from vpod import Sandbox

sbx = Sandbox.create()
result = sbx.commands.run("echo hello")
print(result.stdout)    # hello
sbx.close()             # Clean up the sandbox process

Snapshots

The first call to Sandbox.create() downloads the snapshot and caches it locally. 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.catalog():
    print(s["name"], s["tag"])

snapshots.pull("alpine:latest")

Available Snapshots

Name Tag Description Memory Limit (RAM)
alpine 3.23.0 Minimal Alpine Linux snapshot. 256 MB
vsnap-base 0.1.0 Alpine-based general-purpose snapshot with Python. 256 MB
vsnap-base-512mb 0.1.0 Same as vsnap-base with more memory headroom, for web servers and larger installs. 512 MB
vsnap-data 0.1.0 Alpine-based snapshot with numpy, pandas, and scipy. 512 MB

Documentation

Visit the Vpod documentation for the full guide and API reference. To report issues or contribute, head to the main GitHub repository.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vpod-0.8.0rc3.tar.gz (6.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vpod-0.8.0rc3-py3-none-any.whl (6.0 MB view details)

Uploaded Python 3

File details

Details for the file vpod-0.8.0rc3.tar.gz.

File metadata

  • Download URL: vpod-0.8.0rc3.tar.gz
  • Upload date:
  • Size: 6.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.21

File hashes

Hashes for vpod-0.8.0rc3.tar.gz
Algorithm Hash digest
SHA256 d61a0ed64cdb0446fae0da0dd6cdaa7f9062b936723f70e707373b5064aba03c
MD5 c2eca293d3e1acba46cd880efa452a8a
BLAKE2b-256 e22e1e4b8fc86c2779948d5f432701ad9a83a132375267592a0abfbd03ce575e

See more details on using hashes here.

File details

Details for the file vpod-0.8.0rc3-py3-none-any.whl.

File metadata

  • Download URL: vpod-0.8.0rc3-py3-none-any.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.10.21

File hashes

Hashes for vpod-0.8.0rc3-py3-none-any.whl
Algorithm Hash digest
SHA256 868ce018e5785f8c2f62683fae225decca5afbb6ec06ec7179ea0a31f23f8a68
MD5 98811ca918671d4cf41e1da57843890d
BLAKE2b-256 ddeaa43a2fd9842b3bff78a757731de655c804f3c33a3470c15c1b972819aeb7

See more details on using hashes here.

Release history Release notifications | RSS feed

0.8.1

2 files

0.8.0

2 files

This release

0.8.0rc3 This release

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.1

2 files

0.6.0

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page