New features
Composable network profiles Network policy is now built from named profiles instead of ad-hoc presets. Pass one or more ofpublic, private, and host to --net on the CLI, or to NetworkPolicy.from_profiles() / fromProfiles() / FromProfiles() in the SDKs. --net is repeatable and accepts a comma-separated list, plus the terminal values all and none. Explicit --net-rule entries keep first-match precedence and now understand allow@dns / deny@dns targets, so DNS answers are policy-aware instead of implicitly allowed.
The IPv4 and IPv6 unspecified addresses are excluded from public, closing a DNS-rebinding gap. This is a breaking change for pre-1.0 callers: the legacy public_only and non_local presets are removed. Migrate to from_profiles("public") or the CLI equivalent.
msb self downgrade
Microsandbox now treats snapshots created on v0.6.6 and v0.6.7 as fully interchangeable. It migrates older manifest.json artifacts to the finalized snapshot.json descriptor on startup, explicit open, reindex, and archive load, enforces sparse payload integrity, and rejects duplicate keys. It also retains the original descriptor bytes so a downgrade produces the exact prior artifact.
msb self downgrade 0.6.6 --yes performs a durable, journaled downgrade with SHA-256 verification and a database backup. If the process is interrupted, startup refuses to continue until recovery finishes, so you cannot end up with a half-migrated store.
Each SDK also exposes the new projections, so tooling can tell the current snapshot state and any pending migration apart. In Rust these are Snapshot::state_kind() and migration_state(); in Python, snapshot.state_kind and snapshot.migration_state; in TypeScript, .stateKind and .migrationState; in Go, .StateKind() and .MigrationState(). Migration errors now surface as a dedicated SnapshotMigration error kind (Python SnapshotMigrationError).
msb run -d honors the image CMD
Detached runs now resolve and launch the same OCI command as an attached msb run. If you omit the command, the image’s CMD is used; if you pass a command after --, it replaces CMD while the image’s entrypoint is preserved. Previously, msb run -d would boot the sandbox without executing the image’s default process, which surprised users running images like docker:dind.
For an idle sandbox you can exec into later, use msb create instead. Both flows are documented under Sandbox commands.
- TTY resize in the Python, TypeScript, and Go SDKs.
ExecHandle.resize(rows, cols)(Go:Resize(ctx, rows, cols)) is now available on every SDK, matching the existing Rust API. Signal, kill, and resize operations run through cloneable exec controls, so they work while arecv()is pending. This is what interactive proxies and remote-terminal integrations need. See the Python execution guide. - Go SDK on Windows. The Go SDK now builds and runs on Windows amd64 and arm64. Installation downloads the Windows release bundle, uses
msb.exeandlibkrunfw.dll, and skips Unix-only symlinks. Home directories with non-ASCII characters are handled correctly. See the Go SDK installation guide. status_reasonon cloud sandbox responses. While a cloud sandbox isstarting, the response includes a machine-readablestatus_reasonofschedulingorinsufficient_capacity. Clients can now distinguish “waiting in the scheduler” from “no capacity” without parsing prose. The human-readable field is renamed fromlast_errortolast_failure_messageto make the split between machine enums (*_reason) and prose (*_message) consistent. Rust callers should renameSandbox::last_error()toSandbox::last_failure_message(), andSandboxHandle::last_error_snapshot()tolast_failure_message_snapshot().
Bug fixes
- The install script now discovers the exact libkrunfw filename and ABI packaged in each release bundle instead of using hardcoded pins. This prevents the installer and the release artifact from drifting apart, and rejects bundles with missing or malformed versioned library names. The Windows installer is unchanged.
- The Python SDK once again imports on Python 3.10. Typed enums that regressed 3.10 compatibility have been rewritten to work on the older runtime.