Repository navigation
dstack v0.6.0
dstack 0.6.0 is the first release from the monorepo.
Upgrading from 0.5.x? Read the upgrade guide first: most apps only switch the guest image, but a few guest OS changes can stop an app from starting.
Components
| Component | Release | Image |
|---|---|---|
| Guest OS | mkosi-os-v0.6.0 | os_image_hash: 8409e2a24ea8325f3ea45d7c50622c952a8a4a961ffc139f5d9a81c4e47bd744 |
| KMS | kms-v0.6.0 | ghcr.io/dstack-tee/dstack-kms:0.6.0 |
| Gateway | gateway-v0.6.0 | ghcr.io/dstack-tee/dstack-gateway:0.6.0 |
| Verifier | verifier-v0.6.0 | ghcr.io/dstack-tee/dstack-verifier:0.6.0 |
Highlights
- a versioned guest API,
dstack.guest.v1, with domain-separated key
derivation, GPU evidence, and one attestation entry point on every platform.
The v0 API is frozen at v0.5.11 and keeps working unchanged - a unified attestation model for Intel TDX, AMD SEV-SNP, AWS Nitro Enclaves,
AWS NitroTPM, GCP Confidential VMs, and development simulators - canonical event log v2 and manifest-based OS and workload policy
verification - a Debian/mkosi guest OS as the default, reproducible build backend,
superseding Yocto - VMM-managed networking with netd, macvtap, vhost-net multiqueue, and libvirt
network filters - Gateway application health checks, WaveKV v2, simultaneous CVM connections
to multiple Gateway clusters, and credential-free certificate issuance with
dns-persist-01(experimental) - local key providers, external attestation root CAs, dm-verity volumes, and
data disks that return deleted blocks to the host - shared authentication across the VMM, Gateway, and KMS administrative APIs
- a security hardening pass across every component
Upgrade notes
- Every measurement changes. Register the new
os_image_hashon chain
before deploying 0.6.0 images. The VMM now defaultsqemu_hotplug_offto
true, which changes the ACPI tables and RTMRs of every CVM on its next
start, whatever its image; update any allowlist that pins MRs, or set it
back tofalseon hosts without GPUs (#1387) - Apps on the 0.6.0 guest image:
pre_launch_scriptruns under
set -euo pipefail; a GPU CVM must pass GPU attestation to boot unless
requirements.gpu_policy.attest_gpuis false; legacy iptables is gone;
environment variables arrive byte for byte instead of with\nescaped;
and an encrypted environment that cannot be decrypted stops the boot - v1 keys differ from v0 keys. Existing apps keep their keys on the
unversioned (v0) paths. Moving to v1GetKeyneeds an asset migration
signed by the old key; seedocs/guest-api-v1.md. v1 attestations and
v1-issued RA-TLS certificates need KMS and verifiers 0.5.9 or later - SDKs:
DstackClientnow meansDstackClientV1; nameDstackClientV0
to stay on v0. Deep imports of the v0 modules gain a_v0suffix, and the
Python v0 client emits aDeprecationWarning - Guest agent:
EmitEventalways fails; bind app data through
report_datainstead.GetQuoteanswers on Intel TDX only; useAttest
elsewhere - KMS: Nitro Enclave key release needs
nitro_enclave_key_release = true
(#1303), and the Nitro Enclavedevice_idis nowsha256(PCR4), so
DstackAppcontracts withallowAnyDevice = falsemust add the new value
(#1302). Root-key handover moves to the admin listener; turn off
core.onboard.public_key_handoveronce every node is upgraded (#1307) - Admin APIs fail closed: a KMS or Gateway with its admin API enabled
but noauth_tokenorhtpasswd_filerefuses to start. The VMM's[auth]
now guards the whole API and web UI - Gateway: roll nodes one at a time; 0.5.x and 0.6.0 nodes serve traffic
but do not sync until every node is upgraded.
core.debug.insecure_skip_attestationis gone, and a gateway
without a guest agent no longer starts (#1148). A certificate configured in
[core.proxy]is ignored; install it withAdmin.ImportCert(#1239) - VMM: a 0.5.x app that sets
key_provider_idcannot boot its 0.5.x
image on a 0.6.0 VMM; move it to the 0.6.0 image with the host. Upgrade
netd together with the VMM, and before it on hosts running
bridge or macvtap VMs (#1145, #1217) - Images: component images publish to
ghcr.io/dstack-tee/<component>
(#1222).dstackupdigest-pins its default KMS image, so fresh installs
register a different KMS app id - certbot: every renewal uses a new private key; update DANE/TLSA or SPKI
pins on each renewal
Full changelog: CHANGELOG.md