One line of code, one fresh VM:

echo 'print(6*7)' | kedge eval python3

kedge eval <runtime> runs stdin in a fresh VM, streams stdout and stderr, and exits with the code's status. The VM is then destroyed; nothing is deployed or persisted.

Each run has the same hardware isolation as an app instance. See instant sandboxes & scale-out for restore latency.

runtimes

runtime interpreter
python3 Python 3.12
node20 Node.js 20
ruby Ruby 3.3
bash Bash
deno Deno, TypeScript

Every image includes the handler runtime tools: sqlite3, jq, curl, and uptime. Each run defaults to 256 MiB and 30 seconds; both limits are configurable per call.

network access

Evals and sandboxes have outbound network access by default. To run untrusted code with no network at all, pass -no-network to kedge eval or kedge sandbox; the VM then has only a loopback interface. Anonymous runs, including the front-page console, are always networkless regardless of what the request asks for.

interactive sandboxes

kedge sandbox python3 drops you into a shell inside a fresh sandbox VM, and kedge shell - does the same without naming a runtime. Either VM is destroyed when you exit. The REST sandbox operation has the same one-shot boundary: submit a runtime and command, receive the command result, and leave no execution resource or identifier behind.

There is no persistent sandbox resource. When files or processes must outlive the session, create a normal workspace app with a persistent volume; give the app an expiry if it should clean itself up later. It then uses the same shell, logs, metrics, migration, and deletion behavior as every other stateful app.

GitHub Actions runners apply the same one-run boundary to CI jobs.