This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
ReleasePort's take
Light signalThe Execd install path has been flattened from "/opt/opensandbox/bin/" to "/opt/opensandbox/".
Why it matters: Breaking change: any scripts or configurations referencing the old bin subdirectory will fail. Update paths before upgrading to server/v0.2.0.
Summary
AI summaryUpdates π¦ Misc, π Bug Fixes, and β οΈ Breaking Changes across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | High |
Execd install path flattened from "/opt/opensandbox/bin/" to "/opt/opensandbox/". Execd install path flattened from "/opt/opensandbox/bin/" to "/opt/opensandbox/". Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Feature | Medium |
Adds Credential Vault for secret injection without exposing raw values to sandbox code. Adds Credential Vault for secret injection without exposing raw values to sandbox code. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Dependency | Low |
Updates starlette from 0.50.0 to 1.0.1, fixing malformed Host header handling. Updates starlette from 0.50.0 to 1.0.1, fixing malformed Host header handling. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Dependency | Low |
Updates idna from 3.11 to 3.15, adding DNSβlength cap enforcement. Updates idna from 3.11 to 3.15, adding DNSβlength cap enforcement. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Bugfix | Medium |
Rejects conflicting endpoint modes combining `use_server_proxy=true` with `expires`. Rejects conflicting endpoint modes combining `use_server_proxy=true` with `expires`. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Bugfix | Medium |
Prevents corruption of Gzipβencoded proxy responses by streaming raw backend bytes. Prevents corruption of Gzipβencoded proxy responses by streaming raw backend bytes. Source: llm_adapter@2026-06-15 Confidence: high |
β |
| Bugfix | Low |
Defaults `EXECD_ENVS` in Docker bootstrap launcher to align with execd expectations. Defaults `EXECD_ENVS` in Docker bootstrap launcher to align with execd expectations. Source: granite4.1:30b@2026-06-15-audit Confidence: low |
β |
| Bugfix | Low |
Handles null `spec.template` gracefully in platform constraint scope to avoid crashes. Handles null `spec.template` gracefully in platform constraint scope to avoid crashes. Source: granite4.1:30b@2026-06-15-audit Confidence: low |
β |
| Bugfix | Low |
Normalises missing `entrypoint` to default value in poolβmode sandbox creation, preventing TypeError. Normalises missing `entrypoint` to default value in poolβmode sandbox creation, preventing TypeError. Source: granite4.1:30b@2026-06-15-audit Confidence: low |
β |
Full changelog
What's New
β οΈ Breaking Changes
- Execd install path flattened from
/opt/opensandbox/bin/to/opt/opensandbox/β the emptyDir mount in the K8s provider and the Docker bootstrap launcher now use a single/opt/opensandboxdirectory instead of the nested/opt/opensandbox/bin. Binary paths like/opt/opensandbox/bin/execdbecome/opt/opensandbox/execd. The Docker runtime also replaces its inline-generated 15-line bootstrap shim with the fullbootstrap.shfrom the execd image, gaining MITM CA trust, SIGTERM forwarding, and pre-script support. Users running code-interpreter imagesβ€v1.0.2must upgrade tov1.1.0; custom Pool CR templates need updated mountPaths and env vars. See the migration guide for details. (#1014)
β¨ Features
- Credential Vault β new credential injection system that lets sandboxes consume secrets (API keys, OAuth tokens, HTTP headers, query parameters) without exposing raw values to user code. Credentials are defined at the platform level and injected through the egress sidecar at request time. Includes server-side plumbing, K8s CRD support, egress integration, SDK surface (Python, Go, JS, Kotlin, Java), CLI commands (
osb credential-vault), and E2E test coverage. (#1009, #1023, #1027)
π Bug Fixes
-
Conflicting endpoint modes now rejected β requests that combine
use_server_proxy=truewithexpires(asking for both a server proxy path and a signed gateway route) now returnSANDBOX::INVALID_PARAMETERinstead of silently resolving a signed URL and then overwriting it with the proxy URL. Lifecycle API spec updated accordingly. (#952) -
Gzip-encoded proxy responses no longer corrupted β the server proxy forwarded backend
Content-Encodingheaders while usinghttpx.aiter_bytes(), which decodes compressed bodies. Clients then received a gzip header on already-decoded bytes, breaking content like noVNC pages. The proxy now streams raw backend bytes so preserved Content-Encoding headers stay correct. (#971) -
Docker bootstrap launcher defaults
EXECD_ENVSβ the Docker-generated bootstrap script now exportsEXECD_ENVSbefore starting execd, aligning with the behavior expected bycomponents/execd/bootstrap.sh. Previously the missing variable could cause execd startup issues. (#999) -
Null
spec.templatecrash in platform constraint scope β pool-mode BatchSandbox CRs withspec.template: nullcrashed_workload_platform_constraint_scopeduring status polling (same root cause as #910 but in a different call path). Chained.get(key, {})replaced with.get(key) or {}to handle both absent and null values. (#1007) -
Noneentrypoint crash in pool-mode creation β when SDK callers omitentrypointfor pool-mode sandboxes,Nonepropagated into_create_workload_from_poolwhere it triggeredTypeError: 'NoneType' object is not iterablein_build_task_template. Now normalised toDEFAULT_ENTRYPOINTat the top of the function. (#1017)
π¦ Misc
- Dependency: starlette
0.50.0 β 1.0.1β major version bump, includes malformedHostheader handling fix. (#978) - Dependency: idna
3.11 β 3.15β DNS-length cap enforcement and helper cleanups. (#959)
π₯ Contributors
Thanks to these contributors β€οΈ
- @Gujiassh
- @jwx0925
- @Pangjiping
- @qingyuppp
- @RajvardhanPatil07
- PyPI: opensandbox-server==0.2.0
- Docker Hub: opensandbox/server:v0.2.0
- Aliyun Registry: sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/server:v0.2.0
Breaking Changes
- Execd install path flattened from `/opt/opensandbox/bin/` to `/opt/opensandbox/`; binary paths change (e.g., `/opt/opensandbox/bin/execd` β `/opt/opensandbox/execd`). Users with code-interpreter images β€v1.0.2 must upgrade to v1.1.0 and update custom Pool CR templates accordingly.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Earlier breaking changes
- vpython/sandbox/v0.1.14 Removes `CredentialMatch.ports`; port now derived from scheme.
- vjava/sandbox/v1.0.16 Removes CredentialMatch.ports; port derived from scheme instead.
- vdocker/egress/v1.1.4 `Match.Ports` field removed from Credential Vault bindings; ports derived from scheme.
- vdocker/egress/v1.1.4 'X-Forwarded-Proto' is trusted only from configured proxy CIDRs.
- vdocker/egress/v1.1.4 Credential Vault requires `dns+nft` enforcement for egress connections.
Beta — feedback welcome: [email protected]