Skip to main content
On this page

Control sandbox timeout

Deno Sandbox provides a sandboxed Linux microVM. This is useful for evaluating code that is not trusted or for testing code that is not safe to run in your main runtime.

You can control how long your sandbox stays alive using the timeout option. Controlling timeout lets you decide whether sandboxes vanish immediately when your script finishes or keep running for a set duration:

import { Sandbox } from "@deno/sandbox";

// Default: "session" - sandbox shuts down when you close/dispose the client
await using sandbox = await Sandbox.create({ timeout: "10m" });

Supported duration suffixes: s (seconds), m (minutes).

Examples: "30s", "5m", "90s". The default is "session", which means the sandbox will automatically shut down when the client connection is closed or disposed.

import { Sandbox } from "@deno/sandbox";

// Duration-based: keep sandbox alive for a specific time period
// Useful when you want the sandbox to persist after the script exits
const sandbox = await Sandbox.create({ timeout: "5m" }); // 5 minutes
const id = sandbox.id;
// Close the *connection* to the sandbox; the sandbox keeps running
await sandbox.close();

// Later, reconnect to the same sandbox using its ID
const reconnected = await Sandbox.connect({ id });
await reconnected.sh`echo 'Still alive!'`;

// You can still forcibly terminate it before its timeout elapses
await reconnected.kill();
// At this point, the sandbox is no longer reconnectable

The default "session" mode is fine for short-lived automation—resource cleanup happens as soon as the client disposes.

Duration-based timeouts ("30s", "5m", etc.) let you close the client connection while the sandbox keeps state alive, so you can reconnect later (e.g., to inspect logs, rerun commands, or share the sandbox ID with another process) before the timeout expires.

Extend the timeout whenever you need Jump to heading

You are not locked into the original duration. As long as you still hold a Sandbox instance (either the original handle or one reconnected via Sandbox.connect()), call sandbox.extendTimeout() with another duration string to push the expiry further out. Each call can add up to 30 minutes and returns a Date indicating the new shutdown time.

import { Sandbox } from "@deno/sandbox";

const sandbox = await Sandbox.create({ timeout: "5m" });

// Need more time later on? Extend in-place without disrupting running work.
const newExpiry = await sandbox.extendTimeout("30m");
console.log(`Sandbox now lives until ${newExpiry.toISOString()}`);

You still control lifecycle explicitly with a call to kill() to end the sandbox early if you no longer need it, useful if your job finishes sooner than expected.

Need other timeout modes? Contact deploy@deno.com.

For more information, see the Deno Sandbox documentation.

Did you find what you needed?

Privacy policy