All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Releases are cut with mix git_ops.release (or the Release workflow), which
inserts new sections below this marker:
[Unreleased]
Added
- Initial SDK generated from Daytona's OpenAPI specifications (main
platform, toolbox, and analytics APIs merged by
scripts/fetch-spec.sh) ExDaytona.Toolbox.connection/2— builds a connection to a sandbox's toolbox API from itstoolboxProxyUrlExDaytona.Analytics.connection/1— builds a connection to the analytics API (base URL configurable viaconfig :ex_daytona, :analytics_base_url)- High-level SDK facade (hand-written, survives regeneration):
ExDaytona.Client(API-key auth,DAYTONA_API_KEYfallback),ExDaytona.Error(all generated-client failure shapes normalized to{:error, %ExDaytona.Error{}}), andExDaytona.Sandbox(create/get/list/start/stop/delete with state waiting,exec/3,write_file/3,read_file/2,list_files/2) ExDaytona.Session— persistent shell sessions with shared state: synchronousrun/2, asynchronousrun_async/2+await/3, rawlogs/2, and real-timestream_logs/4(incremental chunked-HTTP streaming)ExDaytona.Git— clone/status/branches/create_branch/checkout/add/ commit/push/pull/history inside a sandbox, with credential options for authenticated remotesExDaytona.Sandbox.build_logs/1andstream_build_logs/3— fetch or follow a building sandbox's build logsExDaytona.Pty— interactive terminals: create/resize/list/delete plus a real websocket connection (connect/2,send_input/2) built on the newExDaytona.WebSocketclient (Mint.WebSocket)- SSH access on the sandbox facade:
ssh_access/2,revoke_ssh_access/1,validate_ssh_access/2 - Preview URLs on the sandbox facade:
preview_url/2,signed_preview_url/3,expire_signed_preview_url/3; plusExDaytona.PreviewProxyverification helpers for running a custom preview proxy ExDaytona.Webhooks— organization webhook setup (initialize, status, Svix app portal access, endpoint refresh) andverify/4for receiving: Svix/Standard-Webhooks HMAC signature verification with timestamp toleranceExDaytona.Image— declarative image DSL (from/run/env/workdir/user/ label/expose/entrypoint/cmd+ raw Dockerfiles) wired intoExDaytona.Sandbox.create(client, image: ...)for building sandboxes from DockerfilesExDaytona.FS— the full file-system facade:write_file/read_file/write_files, localupload/download,mkdir,stat,delete(recursive),move,chmod, globsearch, contentgrep, and textreplacewith per-file results (theSandboxfile helpers delegate here)ExDaytona.Sandbox.run_code/3— stateless code snippets (Python/ JavaScript/TypeScript) with argv/env/timeout and chart artifactsExDaytona.CodeInterpreter— stateful Python execution over the interpreter websocket: state persists betweenrun/3calls, isolated contexts (create_context/list_contexts/delete_context), streamingon_stdout/on_stderr/on_errorcallbacks, and structured execution errorsExDaytona.Session.send_input/3(with a retry for the daemon's stdin-pipe startup race and asuppress_input_echooption onrun_async/3), plusentrypoint/1andentrypoint_logs/1- Local build contexts:
ExDaytona.Image.add_local_file/3andadd_local_dir/3copy local files into declaratively built images — contexts are content-hashed, tarred, and uploaded to Daytona's object storage automatically on create (ExDaytona.ObjectStorage), with a dependency-free AWS SigV4 signer pinned by AWS's published test vectors
Fixed
- Request bodies no longer send explicit JSON
nulls for unset optional model fields — the Daytona API rejects them (500) where an empty object succeeds; models now omit nil fields when encoding
Changed
- Cleaned generated function names via a spec patch: analytics endpoints
that ship without operationIds get descriptive ones
(
get_organization_usage_aggregated/5instead oforganization_organization_id_usage_aggregated_get/5), and leaked NestJS controller prefixes are stripped (Health.check/2instead ofHealth.health_controller_check/2)