๐Ÿ„

Shiitake

Sandboxing for untrusted commands on Kubernetes.

An HTTP server that fans commands out to a pool of resident, resource-bounded worker containers in your Kubernetes cluster. Each command runs in its own worker, which resets to a clean slate between commands โ€” no state bleed, ever.

๐Ÿ“– Read the docs โ˜… View on GitHub

Quickstart

Run a server, run a worker, dispatch a command. The worker stays resident and resets between commands.

# Terminal 1 โ€” the server (the only ingress)
SHIITAKE_AUTH_TOKEN=dev-token SHIITAKE_CAPTURE_ROOT=/tmp/capture \
  cargo run --bin shiitake-server

# Terminal 2 โ€” one worker, joining the pool
SHIITAKE_WORKER_ID=worker-0 SHIITAKE_CAPTURE_ROOT=/tmp/capture \
  cargo run --bin shiitake-worker

# Terminal 3 โ€” dispatch a command, get a handle back
curl -s -H "Authorization: Bearer dev-token" \
  -X POST localhost:8080/api/v1/exec \
  -d '{"command": "echo hello from a sandboxed worker"}'

Read more in the docs โ†’

How it works

One server is the only ingress. It hands each command to a worker over an authenticated WebSocket โ€” in the same pod or another one; the worker runs it, streams output to disk, reports the result, then resets its sandbox before the next command.

POST /exec
your request
โ†’
Server
the only ingress
โ†’
Worker pool
N idle workers
โ†’
Isolated run
bounded ยท isolated ยท resets

Read more in the docs โ†’

What it's for

Shiitake is generic โ€” it knows nothing about your application. A few things it's particularly good at:

Read more in the docs โ†’