Python SDK
pandastack — the official Python SDK.
pip install pandastackAuthentication
import os
os.environ["PANDASTACK_API_KEY"] = "dam_..."
os.environ["PANDASTACK_API"] = "https://api-dev.pandastack.ai"
# Or pass explicitly:
from pandastack import Client
c = Client(api_key="dam_...", api_url="https://api-dev.pandastack.ai")Sandbox
from pandastack import Sandbox
# Synchronous context manager
with Sandbox(template="code-interpreter", cpu=1, memory_mb=512) as sb:
result = sb.run("python -c 'print(2+2)'")
print(result.stdout, result.stderr, result.exit_code)
# Manual lifecycle
sb = Sandbox.create(template="code-interpreter")
try:
sb.run("echo hi")
finally:
sb.close()Sandbox.run(cmd, *, timeout=None, env=None)
Runs a command in the sandbox over SSH. Returns ExecResult(stdout, stderr, exit_code).
Sandbox.stream(cmd, on_stdout, on_stderr)
SSE-based streaming. Callbacks fire as chunks arrive.
sb.stream(
"python -c 'import time; [print(i) or time.sleep(0.1) for i in range(10)]'",
on_stdout=lambda chunk: print("OUT:", chunk, end=""),
on_stderr=lambda chunk: print("ERR:", chunk, end=""),
)Filesystem
sb.write("/tmp/data.csv", "a,b\n1,2\n")
sb.read("/tmp/data.csv") # → "a,b\n1,2\n"
sb.ls("/tmp") # → [{"name": "data.csv", "size": 8, ...}]
sb.rm("/tmp/data.csv")Fork
parent = Sandbox(template="code-interpreter")
parent.run("python -c 'state = expensive_compute()'")
children = [parent.fork() for _ in range(4)]Snapshot
snap = sb.snapshot() # → SnapshotRef
sb2 = Sandbox.from_snapshot(snap.id)Volumes
from pandastack import Volume
vol = Volume.create(name="workspace", size_gb=10)
sb = Sandbox(template="python-data", volumes=[vol.mount("/mnt/data")])Async
from pandastack.aio import AsyncSandbox
async with AsyncSandbox(template="code-interpreter") as sb:
result = await sb.run("echo hi")Type hints
All public APIs are fully typed. Run mypy --strict against your code; we ship py.typed.