v0.5.1 #916
fslongjin
announced in
Announcements
v0.5.1
#916
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
2026.07.10 Release v0.5.1
CubeSandbox 0.5.1 is a production follow-up to 0.5.0, hardening AutoPause, ARM64, and cluster deployment for real-world scale. Headline items: a standalone cube-lifecycle-manager control-plane service (extracted from the CubeProxy sidecar so CubeProxy can scale horizontally), a three-value timeout semantics refactor with server-side defaults and
NEVER_TIMEOUT, and host-mount path allowlisting to close arbitrary host bind-mounts. The release also fixes ARM64 64 KB page snapshot integrity and substantially improves egress policy / TAP recycle reliability. 59 commits from 18 contributors.🎯 Major Features
cube-lifecycle-manager: Standalone AutoPause Coordinator
Splits the former in-image
cube-proxy-sidecarinto a standalone control-plane service — cube-lifecycle-manager (CLM) — so CubeProxy can run multiple replicas without a single-instance sidecar bottleneck.cube-sandbox-control.target; one-click and TencentCloud Terraform deployments both include it.cube-lifecycle-managerDeployment; supportsTENCENTCLOUD_CUBE_PROXY_REPLICASmulti-replica plus CLM replica count / discovery refresh / admin token knobs.Three-Value Timeout Semantics + Server-Side Default
Unifies sandbox idle-timeout semantics (E2B-aligned) and moves the "not set" vs "explicit default" decision from SDK / CubeAPI down to CubeMaster.
None/nil)default_timeout_insec; if unset or ≤0 → never timeoutNEVER_TIMEOUT(-1)0N > 0CreateOptions.Timeoutbecome optional pointers; Create / Connect / Resume no longer inject a hard-coded default. ExposeNeverTimeout/NEVER_TIMEOUTsentinels.Option/*int, preserving "unset";EndAtfollows three-value rules (-1→ no deadline).create_timeout_insec(default 300s) bounds only the create/scheduling RPC.TimeoutSeconds < 0; immediate reclaim at== 0; legacynilfalls back toDefaultIdleTimeout.set_timeout()/SetTimeout(), includingNEVER_TIMEOUT(feat: add Python SDK set_timeout() with NEVER_TIMEOUT (-1) support #743, feat(sdk/go): add SetTimeout() to Go SDK #850). Web UI can pass timeout on sandbox create (fix(webui): allow passing timeout when creating a sandbox #798).Host-Mount Path Allowlist Hardening
Host-mount previously accepted any absolute path, letting sandboxes bind-mount arbitrary host directories. Paths are now restricted to configurable prefixes (default
/data/shared/), withfilepath.Cleanneutralizing..traversal;/is explicitly forbidden in config (#756).Persistent-storage docs updated (path restriction, permissions, multi-tenant isolation, multi-node shared storage); examples aligned to the default prefix (#768).
✨ Enhancements
SDK
@cubesandbox/sdkaligned with the Python / Go surface; still under validation — use with caution in production.set_timeout(feat: add Python SDK set_timeout() with NEVER_TIMEOUT (-1) support #743, feat(sdk/go): add SetTimeout() to Go SDK #850): E2B-aligned; CubeAPI / CubeMaster accept-1(NEVER_TIMEOUT) and reject other negatives.AllowPublicTraffic=falseis no longer treated as deny-all; matches CubeAPI (deny-all only whenAllowInternetAccess=falseordenyOutcontains0.0.0.0/0).Networking & Egress
192.168.0.1; derives the first usable IP fromCUBE_SANDBOX_NETWORK_CIDRso custom sandbox networks get correct TPROXY / OpenResty listen addresses.create_nat_sessionwith per-session caching.Deployment & Installer
MIRROR=cn|intand airgap local-cache fallback.release-docker-images.ymlpushes multi-arch component images to GHCR / TCR;bump-image.shis the single source of truth for hard-coded tags.cube.appresolution.CUBE_SANDBOX_NETWORK_CIDRcannot rewrite an emptycube_router_cidr.Web UI / AgentHub / Other
lifecycle.on_timeout/lifecycle.auto_resume, avoiding silent fallback to kill / no-resume.lanso cube-proxy can reach it via tap IP (autocould resolve to loopback).-drive if=none+-device virtio-blk-pcifixes empty-drive errors on QEMU 10.2.2+.🐛 Bug Fixes
Lifecycle & Sandboxes
Networking & Data Plane
RunCode//executestays on Jupyter.Other
/data/shared/...to match the default allowlist.📚 Documentation
run-devskill; i18n sync checks and change-driven doc audit rules.⚙️ Engineering Improvements
v0.5.1-rc*candidates (chore: bump image tag from v0.5.1-rc1 to v0.5.1-rc3 #826, chore: bump image tag from v0.5.1-rc3 to v0.5.1-rc5 #867).This discussion was created from the release v0.5.1.
All reactions