New features
Ship sandbox metrics to any OTLP backend The newmsb-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-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 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.
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().
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.
UnsupportedOperation errors, replacing Pre05SandboxRestartRequired across the Rust, Python, TypeScript, and Go SDKs.
Other features
- Grouped
msbhelp output. Top-levelmsb --helpnow groups commands into Sandboxes, Images, Storage, Installation, and other sections so the surface is easier to scan. Subcommand help is unchanged. - Unified detached creation across SDKs. Detached sandboxes now use the normal create path (
SandboxBuilder::detached(true), orWithDetached()in Go), replacing the separate Rust and TypeScript helpers. This is a breaking SDK source change; the CLI is unaffected. - Attached sandboxes stop on creator exit. Attached sandboxes now shut down when their creator process dies unexpectedly instead of lingering until the host handle is reaped.
--security restrictedprofile. The default profile restores guest-root behavior for workloads like Docker-in-Docker, while--security restrictedkeeps the previousno_new_privsandCAP_SYS_ADMINdrop.msb inspect, volume options, and tmpfs flags now showro/rwplusnoexec,nosuid, ornodevwhen set.
Bug fixes
- Non-loopback published-port throughput is no longer throttled to roughly 30 to 120 KB/s.
- DNS queries denied by sandbox network policy now return
NXDOMAINinstead of an empty answer. - The default exec profile no longer applies
no_new_privsand theCAP_SYS_ADMINdrop, sosudoand Docker-in-Docker work again on the default profile. Use--security restrictedto opt back into the previous hardening. - Sandbox builders now reject zero CPU and zero memory configurations at build time with a typed error.
- Read-only consumers like
msb-metricsno longer create an empty, schema-lessmsb.dbwhen they start before the main daemon. - Human-facing CLI timestamps (
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. - Sandboxes persisted by microsandbox 0.5.2 with the legacy
readonlymount field now start on 0.5.3 and later. - Idle-timeout restarts no longer race against stale heartbeat files from the previous boot, and idle-timeout shutdowns now give the guest a chance to flush state.
- Sandboxes with large environment-variable payloads now boot reliably with the released
msb_krun0.1.14. agentdnow setsHOMEfrom the guest passwd entry for implicit root execs, so images likeubuntu:24.04get/rootinstead of inheritingHOME=/. Explicit users, sandbox or image users, and explicitHOMEenv values still take precedence.msb-metricspreserves OTLP HTTP endpoint paths exactly, exports buffered gauge collections without LastValue aggregation loss, and ships in release builds alongsidemsb.