Languages & Interpreters
September 5, 2026 · View on GitHub
Ephemora Cell executes pre-compiled .wasm modules — it does not ship language interpreters. For building from source, use ephemora-cell build <source> (see the README and ADR-005); this page covers running interpreted languages inside the sandbox.
WASI Preview1
Ephemora Cell currently uses WASI Preview1 (wasi_snapshot_preview1), the stable WASI interface with:
- File I/O (
fd_read,fd_write,path_open, etc.) - Command-line arguments and environment variables
- Clock access and random data
Preview1 limitations:
- No network socket support (requires WASI Preview2 / Component Model)
- No process spawning
- Limited filesystem metadata operations
- No streaming I/O
WASI 0.2 components are already supported (opt-in via abi="component" or auto-detection — see recipes): command-world (wasi:cli/run) components run with the same security baseline as Preview1. WASI 0.3 / Preview2 network sockets remain deferred until the Component Model 1.0 spec is final (target late 2026/2027).
Using Custom Interpreters
To run Python, Rust, Go, or other languages inside the sandbox, compile the interpreter (or your application) to WASM and execute it like any module.
Python (CPython-WASI):
# Build CPython for WASI (requires WASI SDK)
git clone https://github.com/singlestore-labs/python-wasi
cd python-wasi && ./run.sh # Produces wasi-python-3.x.wasm (~150MB)
# Use with Ephemora Cell
from ephemora_cell import run_wasm
result = run_wasm("wasi-python-3.10.wasm", args=["-c", "print('Hello')"])
Rust (wasm32-wasip1):
rustup target add wasm32-wasip1
cargo build --target wasm32-wasip1 --release
from ephemora_cell import run_wasm
result = run_wasm("target/wasm32-wasip1/release/myapp.wasm")
Go:
GOOS=wasip1 GOARCH=wasm go build -o myapp.wasm main.go
Note: Interpreter overhead (CPython: 17-140ms cold start) is not included in Ephemora Cell's performance metrics. Those measure the sandbox engine, not the guest interpreter.