What's Changed
✨ Features
- Add snapshot lifecycle support to the Sandbox Kotlin SDK. The SDK now exposes snapshot create/get/list/delete flows and supports creating a sandbox from
snapshotId, matching the new lifecycle API. Snapshot creation is asynchronous, so consumers should poll snapshot status until it reachesReadyorFailed; Docker is supported by the server implementation, while Kubernetes snapshot runtime support remains a follow-up. #721 #764 - Add secure endpoint access support for Kubernetes gateway mode. Kotlin sandbox creation can now opt into
secureAccess, endpoint response headers are propagated into subsequent execd/generated API calls, and sensitive access headers are redacted from SDK HTTP logs. This is opt-in and only applies to Kubernetes sandboxes exposed throughingress.mode='gateway'; Docker runtime support is intentionally rejected by the server. #745 - Add signed endpoint retrieval for short-lived sandbox port access. The Kotlin SDK now includes the signed endpoint API introduced by OSEP-0011, allowing callers to request time-limited route tokens instead of relying on static endpoint credentials. This is additive and keeps existing endpoint access behavior unchanged. #779 #787
- Add Windows sandbox model support to the Kotlin SDK. The SDK models and converters now understand Windows OS platform values, alongside updated user documentation and unit coverage. #785
- Add PVC auto-provisioning fields to the Kotlin sandbox models. This aligns Kotlin with the cross-language SDK surface for automatic PVC or Docker volume creation on sandbox startup. #749
- Allow
Sandbox.Connectorto target a custom execd port. Callers can now setexecdPort(port: Int)when the default44772port is not appropriate, while Builder and Resumer behavior remain unchanged. #806 - Add distributed
SandboxPoolsupport for the Kotlin SDK through the optional Redis-backedsandbox-pool-redismodule. Pool coordination now supports sharedmaxIdle, resize propagation through shared state, primary election and renewal, atomic idle acquisition, stale idle cleanup, and best-effort cleanup semantics. For distributed drain, useresize(0)and wait untilsnapshot().idleCount == 0;releaseAllIdle()remains a best-effort cleanup pass. #823
📦 Misc
- Align secure routing constants with the ingress gateway implementation as part of the secure endpoint rollout. #761
👥 Contributors
Thanks to these contributors ❤️