docs/changelog/2026-06-05.mdx
OTLP sandbox metrics with labels
The new msb-metrics binary exports live per-sandbox CPU, memory, disk, and network gauges over OTLP to backends like Grafana Cloud, Prometheus, Datadog, Alloy, and the OpenTelemetry Collector.
Sandboxes can also carry labels: set them with --label on the CLI or through SDK builders, filter operations with the same flag, and OCI image labels flow into OTLP attributes automatically. Use --exclude-label-key for high-cardinality keys or --no-labels to export without them.
msb run python --name worker --label team=ml
msb ls --label team=ml
msb-metrics otel --endpoint https://otlp.example.com/v1/metrics
See the msb-metrics overview.
SSH TCP forwarding
The built-in SSH server now supports local (-L) and dynamic (-D) TCP forwarding. Forwarded connections open from inside the sandbox, so network policy applies normally and 127.0.0.1 means the sandbox loopback. Reverse (-R) and stream-local forwarding remain unsupported.
msb ssh serve devbox --host 127.0.0.1 --port 2222
ssh -p 2222 -L 8080:127.0.0.1:80 [email protected]
ssh -p 2222 -D 1080 [email protected]
See the SSH overview.
Image archive load and save
msb image load (alias msb load) imports Docker or OCI archives into the local cache, and msb image save (alias msb save) exports cached images without a registry. Both commands work over stdin or files (--input / --output); save defaults to Docker format and accepts --format oci for OCI Image Layout.
docker save alpine:3.20 | msb image load
msb image save alpine:3.20 --output alpine.tar
msb image save alpine:3.20 --format oci --output alpine-oci.tar
See the image commands reference.
Image prune
msb image prune deletes cached image data that no sandbox or indexed snapshot uses, then reports the reclaimed bytes. Rust, TypeScript, and Go gain Image.prune() / Image.Prune(ctx), replacing Image.gc() and Image.gcLayers().
msb image prune --yes --format json
See the images overview.
Python image management API
The Python SDK gains the same image cache surface as the other SDKs: Image.get, Image.list, Image.inspect, Image.remove, Image.gc_layers, and Image.gc, plus typed ImageHandle, ImageDetail, ImageConfigDetail, and ImageLayerDetail. Rootfs helpers remain on Image, and in-use removals raise ImageInUseError.
from microsandbox import Image
images = await Image.list()
detail = await Image.inspect("python:3.12")
await Image.remove("old:tag")
See the Python SDK reference.
Homebrew install on macOS
microsandbox is now installable from the Homebrew tap, with formula updates published automatically for each release.
brew install superradcompany/tap/microsandbox
See the quickstart.
Agent protocol versioning
Newer hosts can keep working with older live sandboxes by negotiating an agent protocol version at connect time. Unsupported calls fail individually with typed UnsupportedOperation errors, replacing Pre05SandboxRestartRequired across the Rust, Python, TypeScript, and Go SDKs.
Other features
msb help output. Top-level msb --help now groups commands into Sandboxes, Images, Storage, Installation, and other sections so the surface is easier to scan. Subcommand help is unchanged.SandboxBuilder::detached(true), or WithDetached() in Go), replacing the separate Rust and TypeScript helpers. This is a breaking SDK source change; the CLI is unaffected.--security restricted profile. The default profile restores guest-root behavior for workloads like Docker-in-Docker, while --security restricted keeps the previous no_new_privs and CAP_SYS_ADMIN drop. msb inspect, volume options, and tmpfs flags now show ro/rw plus noexec, nosuid, or nodev when set.NXDOMAIN instead of an empty answer.no_new_privs and the CAP_SYS_ADMIN drop, so sudo and Docker-in-Docker work again on the default profile. Use --security restricted to opt back into the previous hardening.msb-metrics no longer create an empty, schema-less msb.db when they start before the main daemon.msb ls, msb ps, image and snapshot listings) now render in the local system timezone. JSON output continues to emit RFC 3339 timestamps with an explicit UTC offset for machine consumers.readonly mount field now start on 0.5.3 and later.msb_krun 0.1.14.agentd now sets HOME from the guest passwd entry for implicit root execs, so images like ubuntu:24.04 get /root instead of inheriting HOME=/. Explicit users, sandbox or image users, and explicit HOME env values still take precedence.msb-metrics preserves OTLP HTTP endpoint paths exactly, exports buffered gauge collections without LastValue aggregation loss, and ships in release builds alongside msb.