Sandboxes are isolated development environments managed by Daytona. This guide covers the lifecycle of Sandboxes and how to create, manage, and remove them using the Daytona SDK.
Daytona Sandboxes use 1 vCPU, 1GB RAM, and 3GiB disk by default. Organizations get a maximum sandbox resource limit of 4 vCPUs, 8GB RAM, and 10GB disk. For more power, contact support@daytona.io.
Sandbox lifecycle
Throughout its lifecycle, a Daytona Sandbox can have several different states. The diagram below shows the states and possible transitions between them.
Multiple runtime support
Daytona Sandboxes support Python, TypeScript, and JavaScript programming language runtimes for direct code execution inside the sandbox.
The language parameter controls which programming language runtime is used for the sandbox:
pythontypescriptjavascript
If omitted, the Daytona SDK will default to python. To override this, explicitly set the language value when creating the sandbox.
Create Sandboxes
Daytona provides options to programmatically create sandboxes with default or custom configurations. You can specify programming language runtime, snapshots, resources, environment variables, and volumes for each sandbox. Running sandboxes utilize CPU, memory, and disk storage. Every resource is charged per second of usage.
from daytona import Daytona, CreateSandboxFromSnapshotParams
daytona = Daytona()
# Create a sandboxsandbox = daytona.create()
# Create a sandbox with pythonparams = CreateSandboxFromSnapshotParams(language="python")sandbox = daytona.create(params)
# Create a sandbox with a custom nameparams = CreateSandboxFromSnapshotParams(name="my_awesome_sandbox")sandbox = daytona.create(params)
# Create a sandbox with custom labelsparams = CreateSandboxFromSnapshotParams(labels={"LABEL": "label"})sandbox = daytona.create(params)import { Daytona } from '@daytonaio/sdk';
const daytona = new Daytona();
// Create a sandboxconst sandbox = await daytona.create();
// Create a sandbox with typescriptconst sandbox = await daytona.create({ language: 'typescript' });
// Create a sandbox with a custom nameconst sandbox = await daytona.create({ name: 'my_awesome_sandbox' });
// Create a sandbox with custom labelsconst sandbox = await daytona.create({ labels: { LABEL: 'label' } });To get the preview URL for a specific port, check out Preview & Authentication.
For more information, see the Python SDK and TypeScript SDK references:
Resources
Daytona Sandbox uses 1 vCPU, 1GB RAM, and 3GiB disk by default.
Daytona keeps a pool of warm sandboxes using default snapshots. When available, sandboxes launch within milliseconds instead of cold-booting.
To set custom sandbox resources (CPU, memory, and disk space), use the Resources class:
from daytona import Daytona, Resources, CreateSandboxFromImageParams, Image
daytona = Daytona()
# Create a sandbox with custom resourcesresources = Resources( cpu=2, # 2 CPU cores memory=4, # 4GB RAM disk=8, # 8GB disk space)
params = CreateSandboxFromImageParams( image=Image.debian_slim("3.12"), resources=resources)
sandbox = daytona.create(params)import { Daytona, Image } from "@daytonaio/sdk";
async function main() { const daytona = new Daytona();
// Create a sandbox with custom resources const sandbox = await daytona.create({ image: Image.debianSlim("3.13"), resources: { cpu: 2, // 2 CPU cores memory: 4, // 4GB RAM disk: 8, // 8GB disk space }, });}
main();All resource parameters are optional. If not specified, Daytona will use default values appropriate for the selected language and use case.
For more information, see the Python SDK and TypeScript SDK references:
Ephemeral Sandboxes
Ephemeral Sandboxes are automatically deleted once they are stopped. They are useful for short-lived tasks or for testing purposes.
To create an ephemeral Sandbox, set the ephemeral parameter to True when creating a sandbox:
from daytona import Daytona, CreateSandboxFromSnapshotParams
daytona = Daytona()
# Create an ephemeral Sandboxparams = CreateSandboxFromSnapshotParams( ephemeral=True, auto_stop_interval=5 # The ephemeral sandbox will be deleted after 5 minutes of inactivity)sandbox = daytona.create(params)import { Daytona } from '@daytonaio/sdk';
const daytona = new Daytona();
// Create an ephemeral sandboxconst sandbox = await daytona.create({ ephemeral: true, autoStopInterval: 5 // The ephemeral sandbox will be deleted after 5 minutes of inactivity});Network settings (Firewall)
Daytona Sandboxes provide configurable network firewall controls to enhance security and manage connectivity. By default, network access follows standard security policies, but you can customize network settings when creating a sandbox.
Start Sandboxes
Daytona provides options to start sandboxes using the Daytona Dashboard ↗ or programmatically using the Python SDK and TypeScript SDK.
- Navigate to Daytona Sandboxes ↗
- Click the start icon (▶) next to the sandbox you want to start.
Starting sandbox with ID: <sandbox-id>sandbox = daytona.create(CreateSandboxParams(language="python"))# Start Sandboxsandbox.start()const sandbox = await daytona.create({ language: 'typescript' });// Start Sandboxawait sandbox.start();For more information, see the Python SDK and TypeScript SDK references:
List Sandboxes
Daytona provides options to view information about sandboxes (ID, root directory, and status) and manage their lifecycle.
# Get sandbox IDsandbox_id = sandbox.id
# Get the root directory of the sandbox userroot_dir = sandbox.get_user_root_dir()
# Get the sandbox id, auto-stop interval and stateprint(sandbox.id)print(sandbox.auto_stop_interval)print(sandbox.state)// Get sandbox IDconst sandboxId = sandbox.id;
// Get the root directory of the sandbox userconst rootDir = await sandbox.getUserRootDir();
// Get the sandbox id, auto-stop interval and stateconsole.log(sandbox.id)console.log(sandbox.autoStopInterval)console.log(sandbox.state)For more information, see the Python SDK and TypeScript SDK references:
Stop Sandboxes
Daytona provides methods to stop sandboxes using Python and TypeScript.
- Navigate to Daytona Sandboxes ↗
- Click the stop icon (⏹) next to the sandbox you want to stop.
Stopping sandbox with ID: <sandbox-id>Stopped sandboxes maintain filesystem persistence while their memory state is cleared. They incur only disk usage costs and can be started again when needed.
The stopped state should be used when a sandbox is expected to be started again soon. Otherwise, it is recommended to stop and then archive the sandbox to eliminate disk usage costs.
sandbox = daytona.create(CreateSandboxParams(language="python"))
# Stop sandboxsandbox.stop()
print(sandbox.id) # 7cd11133-96c1-4cc8-9baa-c757b8f8c916
# The sandbox ID can later be used to find the sandbox and start itsandbox = daytona.find_one("7cd11133-96c1-4cc8-9baa-c757b8f8c916")
# Start sandboxsandbox.start()const sandbox = await daytona.create({ language: 'typescript' });
// Stop sandboxawait sandbox.stop();
console.log(sandbox.id) // 7cd11133-96c1-4cc8-9baa-c757b8f8c916
// The sandbox ID can later be used to find the sandbox and start itconst sandbox = await daytona.findOne("7cd11133-96c1-4cc8-9baa-c757b8f8c916");
// Start sandboxawait sandbox.start();For more information, see the Python SDK and TypeScript SDK references:
Archive Sandboxes
Daytona provides methods to archive sandboxes using Python and TypeScript.
When sandboxes are archived, the entire filesystem state is moved to very cost-effective object storage, making it possible to keep sandboxes available for an extended period. Starting an archived sandbox takes more time than starting a stopped sandbox, depending on its size.
A sandbox must be stopped before it can be archived, and can be started again in the same way as a stopped sandbox.
# Archive Sandboxsandbox.archive()// Archive Sandboxawait sandbox.archive();For more information, see the Python SDK and TypeScript SDK references:
Recover Sandboxes
Daytona provides methods to recover sandboxes using Python and TypeScript.
# Recover sandboxsandbox.recover()// Recover sandboxawait sandbox.recover();For more information, see the Python SDK and TypeScript SDK references:
Recover from error state
When a sandbox enters an error state, it can sometimes be recovered using the recover method, depending on the underlying error reason. The recoverable flag indicates whether the error state can be resolved through an automated recovery procedure.
# Check if the Sandbox is recoverableif sandbox.recoverable: sandbox.recover() print("Sandbox recovered successfully")// Check if the Sandbox is recoverableif (sandbox.recoverable) { await sandbox.recover(); console.log('Sandbox recovered successfully');}For more information, see the Python SDK and TypeScript SDK references:
Delete Sandboxes
Daytona provides methods to delete sandboxes.
- Navigate to Daytona Sandboxes ↗
- Click the Delete button next to the sandbox you want to delete.
Stopping sandbox with ID: <sandbox-id># Delete sandboxsandbox.delete()// Delete sandboxawait sandbox.delete();For more information, see the Python SDK and TypeScript SDK references:
Automated lifecycle management
Daytona Sandboxes can be automatically stopped, archived, and deleted based on user-defined intervals.
Auto-stop interval
The auto-stop interval parameter sets the amount of time after which a running sandbox will be automatically stopped.
Sandbox activity, such as SDK API calls or network requests through preview URLs, resets the auto-stop timer.
The parameter can either be set to:
- a time interval in minutes
0: disables the auto-stop functionality, allowing the sandbox to run indefinitely
If the parameter is not set, the default interval of 15 minutes will be used.
sandbox = daytona.create(CreateSandboxFromSnapshotParams( snapshot="my-snapshot-name", # Disables the auto-stop feature - default is 15 minutes auto_stop_interval=0,))const sandbox = await daytona.create({ snapshot: "my-snapshot-name", // Disables the auto-stop feature - default is 15 minutes autoStopInterval: 0,});For more information, see the Python SDK and TypeScript SDK references:
Auto-archive interval
The auto-archive interval parameter sets the amount of time after which a continuously stopped sandbox will be automatically archived.
The parameter can either be set to:
- a time interval in minutes
0: means the maximum interval of30 dayswill be used
If the parameter is not set, the default interval of 7 days days will be used.
sandbox = daytona.create(CreateSandboxFromSnapshotParams( snapshot="my-snapshot-name", # Auto-archive after a sandbox has been stopped for 1 hour auto_archive_interval=60,))const sandbox = await daytona.create({ snapshot: "my-snapshot-name", // Auto-archive after a sandbox has been stopped for 1 hour autoArchiveInterval: 60,});For more information, see the Python SDK and TypeScript SDK references:
Auto-delete interval
The auto-delete interval parameter sets the amount of time after which a continuously stopped sandbox will be automatically deleted. By default, sandboxes will never be automatically deleted.
The parameter can either be set to:
- a time interval in minutes
-1: disables the auto-delete functionality0: means the sandbox will be deleted immediately after stopping
If the parameter is not set, the sandbox will not be deleted automatically.
sandbox = daytona.create(CreateSandboxFromSnapshotParams( snapshot="my-snapshot-name", # Auto-delete after a sandbox has been stopped for 1 hour auto_delete_interval=60,))
# Delete the sandbox immediately after it has been stoppedsandbox.set_auto_delete_interval(0)
# Disable auto-deletionsandbox.set_auto_delete_interval(-1)const sandbox = await daytona.create({ snapshot: "my-snapshot-name", // Auto-delete after a sandbox has been stopped for 1 hour autoDeleteInterval: 60,});
// Delete the sandbox immediately after it has been stoppedawait sandbox.setAutoDeleteInterval(0)
// Disable auto-deletionawait sandbox.setAutoDeleteInterval(-1)For more information, see the Python SDK and TypeScript SDK references:
Running indefinitely
By default, Daytona Sandboxes auto-stop after 15 minutes of inactivity. To keep a sandbox running without interruption, set the auto-stop interval to 0 when creating a new sandbox:
sandbox = daytona.create(CreateSandboxFromSnapshotParams( snapshot="my_awesome_snapshot", # Disables the auto-stop feature - default is 15 minutes auto_stop_interval=0,))const sandbox = await daytona.create({ snapshot: "my_awesome_snapshot", // Disables the auto-stop feature - default is 15 minutes autoStopInterval: 0,});