Inngest Sandboxes | Open beta
A microVM your retries can't lose.
Sandboxes are isolated Linux microVMs. Inngest runs every sandbox call as a durable step, so when your code crashes after creating one, the retry picks up the same VM, the same files, and the same trace. Nothing to poll, retry, or clean up by hand.
- ●create-sandboxsandbox 2a06c6f6 · STARTING280 ms
- ●wait-runningRUNNING1.08 s
- ●write-markerecho … > /tmp/marker133 ms
- ●flaky-after-createattempt 1attempt 1 · retryable error3 ms
- ●flaky-after-createattempt 2attempt 2 · recovered1 ms
- ●run-hellohello from sb-2a06c6f6213 ms
- ●read-markerwritten before the failure, still there136 ms
- ●destroy-sandboxTERMINATING222 ms
Try it in your browser
Choose a command and watch a recorded run unfold. Steps, sample output and sandbox states arrive over time. Replay it as often as you like.
The whole integration
One middleware adds step.sandbox to your functions. Create, run, and destroy are steps like any other. Learn more about running it against real microVMs.
npm i inngest@latest
import { Inngest } from "inngest";
import { sandboxMiddleware } from "inngest/experimental";
const inngest = new Inngest({ id: "my-app", middleware: [sandboxMiddleware()] });
inngest.createFunction({ id: "run-tests", triggers: [{ event: "repo/pushed" }] }, async ({ step }) => {
const sandbox = await step.sandbox.create("create", { name: "tests", vcpu: 2, memoryMb: 2048 });
const result = await sandbox.commands.run("test", "npm test", { timeout: "5m" });
await sandbox.destroy("destroy");
return result;
});