PandaStack

Python SDK

pandastack — the official Python SDK.

pip install pandastack

Authentication

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.

On this page