A major upgrade to the Daytona SDK is coming this Sunday, with breaking changes that simplify sandbox creation, standardize resource management, and lay the foundation for a more powerful snapshot-based workflow.
Why This Matters
In v0.21.0, we’re introducing a more robust architecture centered around snapshots, replacing the legacy pre-built image flow. This refactor enables better caching, more declarative sandbox provisioning, and consistent behavior across TypeScript and Python implementations.
This upcoming release includes breaking changes, which means if you're using v0.20.2 or earlier, you’ll need to update your integration to keep things working as expected, especially if you rely on the declarative image builder.
Migration Timeline
Old version: v0.20.2
New version: v0.21.0
Compatibility: The refactored backend is temporarily backward-compatible, but declarative image builder support will break for v0.20.2.
Recommended action: Upgrade to v0.21.0 now to access new features and ensure continued support.
🛠 Maintenance Notice
To support this SDK upgrade, scheduled downtime will occur on Sunday, June 15th, from 03:00 to 03:30 Pacific Time. Services may be temporarily unavailable during this window.
🔄 Key Changes Overview
Image creation → Snapshot creation
A more powerful snapshot abstraction replaces pre-built images.New parameter types for sandbox creation
CreateSandboxParamsis now split into more explicit types.New
Resourcesobject
Resource configuration is standardized and explicit.Renamed callback parameters
All callback-related options now reflect the snapshot-based flow.New Snapshot Service
Easily list, create, delete, and inspect snapshots from your SDK.Removed
SandboxTargetRegionenum
Define target region using a plain string value.Reduced verbosity of method for retrieving a single Sandbox
A more concisegetmethod is now available on theDaytonaobject.Removed deprecated aliases for Sandbox methods
Using deprecated workspace methods is no longer supported.Flattened Sandbox instance information
Sandbox details are now only available as top-level properties.Removed legacy Sandbox properties
Name and class are no longer present on the Sandbox object.Improved functionality for refreshing Sandbox information
The new method updates the Sandbox object properties directly.Removed deprecated method for Sandbox removal in the TypeScript SDK
Usingdaytona.remove(sandbox)is no longer supported.
1. Images → Snapshots
Snapshots now power sandbox creation. Here’s how the change looks in practice:
TypeScript
Before:
After:
Python
Before:
After:
2. New Parameter Types for Sandbox Creation
We’ve replaced the all-in-one CreateSandboxParams with more specific options, depending on whether you’re creating from an image or a snapshot.
TypeScript
🧩 Old SDK – Single Parameter Class
🚀 New SDK – Specific Parameter Classes
Python
🧩 Old SDK – Single Parameter Class
🚀 New SDK – Specific Parameter Classes
3. Standardized Resource Configuration
We've unified resource definitions under a single Resources object across SDKs.
| Old | New |
|---|---|
| SandboxResources | Resources |
This improves clarity and aligns with our declarative execution model.
4. Updated Callback Names
To reflect the shift to snapshots:
| Old | New |
|---|---|
| onImageBuildLogs | onSnapshotCreateLogs |
5. New Snapshot Service
You can now manage snapshots directly via a dedicated SDK interface.
TypeScript
Python
6. Removed SandboxTargetRegion Enum
Target region has to be specified using a simple string value instead of an enum. Here’s how the change looks in practice:
TypeScript
Before:
After:
Python
Before:
After:
7. Reduced Verbosity of Method for Retrieving a Single Sandbox
A more concise get method is now available on the Daytona object. Here’s how the change looks in practice:
TypeScript
Before:
After:
Python
Before:
After:
8. Removed Deprecated Aliases for Sandbox Methods
Using deprecated workspace methods is no longer supported. Here’s how the change looks in practice:
TypeScript
Before:
After:
Python
Before:
After:
9. Flattened Sandbox Instance Information
Sandbox details are now available only as top-level properties. Here’s how the change looks in practice:
TypeScript
Before:
After:
Python
Before:
After:
10. Removed Legacy Sandbox Properties
Name and class are no longer present on the Sandbox object. Here’s how the change looks in practice:
TypeScript
Before:
After:
Python
Before:
After:
11. Improved Functionality for Refreshing Sandbox Information
The new method updates the Sandbox object properties directly. Here’s how the change looks in practice for some of the Sandbox properties:
TypeScript
Before:
After:
Python
Before:
After:
12. Removed Deprecated Method for Sandbox Removal in the TypeScript SDK
Using daytona.remove(sandbox) is no longer supported. Here’s how the change looks in practice:
TypeScript
Before:
After:
✅ Migration Checklist
For TypeScript Users
Replace all
daytona.createImage()calls withdaytona.snapshot.create()Use
CreateSandboxFromImageParamsorCreateSandboxFromSnapshotParamswhen creating sandboxesReplace all instances of
SandboxResourceswithResourcesRename
onImageBuildLogscallbacks toonSnapshotCreateLogsReplace
SandboxTargetRegionenum with plain string values (e.g.,"us","eu")Replace retrieving a single Sandbox using
daytona.getCurrentSandbox(id)todaytona.get(id)Replace deprecated
daytona.getCurrentWorkspace(id)withdaytona.get(id)Replace deprecated
workspace.getWorkspaceRootDir()withsandbox.getUserRootDir()Replace deprecated
lspServer.workspaceSymbols(query)withlspServer.sandboxSymbols(query)Replace deprecated
Workspace.toWorkspaceInfo(apiWorkspace)withSandbox.toSandboxInfo(apiSandbox)Update reading Sandbox details to use top-level properties instead of reading from
sandbox.instanceRemove references to legacy sandbox properties (
name,class)Replace using
sandbox.info()to get up-to-date Sandbox info withsandbox.refreshData()to update the Sandbox properties directlyReplace using
daytona.remove(sandbox)withsandbox.delete()ordaytona.delete(sandbox)
For Python Users
Replace all
daytona.create_image()calls withdaytona.snapshot.create()Import and use:
CreateSnapshotParams,CreateSandboxFromImageParams,CreateSandboxFromSnapshotParams, andResourcesReplace all usage of
CreateSandboxParamswith the appropriate class (CreateSandboxFromImageParamsorCreateSandboxFromSnapshotParams)Replace all usage of
SandboxResourceswithResourcesRename
on_image_build_logscallbacks toon_snapshot_create_logsReplace
SandboxTargetRegionenum with plain string values (e.g.,"us","eu")Replace retrieving a single Sandbox using
daytona.get_current_sandbox(id)todaytona.get(id)Replace deprecated
daytona.get_current_workspace(id)withdaytona.get(id)Replace deprecated
workspace.get_workspace_root_dir()withsandbox.get_user_root_dir()Replace deprecated
lsp_server.workspace_symbols(query)withlsp_server.sandbox_symbols(query)Replace using deprecated methods
workspace.wait_for_workspace_start()andworkspace.wait_for_workspace_stop()withsandbox.wait_for_sandbox_start()andsandbox.wait_for_sandbox_stop()Update reading Sandbox details to use top-level properties instead of reading from
sandbox.instanceRemove references to legacy sandbox properties (
name,class_name)Replace using
sandbox.info()to get up-to-date Sandbox info withsandbox.refresh_data()to update the Sandbox properties directly
Final Notes
This release unlocks a more powerful and flexible infrastructure model across all SDKs.
If you're using Cursor, you can find an example here that you can add to your Project Rules to help with the migration.
If you need help migrating or want to discuss your use case, reach out via:
In-app support widget
Email: support@daytona.io
We’re excited to see what you build with it.
📚 You can also find full API and SDK reference at daytona.io/docs.