Gimbal Local 0.2.0
⚠️ Superseded by 0.2.1 — please take that insteadThis build reaches for a cloud control plane on first launch, which a
download has no way to provide. It shows a Cloud section that can only ever
say offline and polls an endpoint that will always refuse. Nothing left your
machine — the default URL is loopback and the binary holds no remote endpoint
— but it is the wrong shape, and0.2.1fixes it.
Gimbal Local 0.2.0 — Cloud Hypervisor snapshots, rehydrated on Apple silicon.
A vanilla Cloud Hypervisor arm64 snapshot captured on a Linux/KVM host — no
fork, no patches, no flags — resumes on Apple Hypervisor.framework and comes
back to a live shell. Or cold-boot a stock kernel with no snapshot at all.
What you need
- An Apple silicon Mac (M1 or later) running macOS 14 or newer.
What you do not need
Worth saying plainly, because every comparable tool asks for at least one:
- No Linux host and no KVM machine. The Mac is the hypervisor.
- No control plane, no account, no network. Everything runs locally.
- No Rust toolchain, no Xcode, no source checkout.
chmships inside the app.
The app is signed with a Developer ID certificate and notarized by Apple, so it
opens without a Gatekeeper warning and its ticket verifies offline.
Install
- Download
GimbalLocal-0.2.0.zipbelow. - Double-click it in Finder to unpack. Do not use
unzip. - Move Gimbal Local.app to /Applications.
- Open it. The engine starts itself.
⚠️ unzipbreaks this app
unzipdoes not understand the extended attributes the archive carries and
writes them into the bundle as stray._*files. Those are not covered by the
code signature, so the seal breaks and macOS refuses to launch it — usually as
"Gimbal Local is damaged and can't be opened", which is misleading: the
download is fine, the unpacking was not. Delete it and unpack again with
Finder.From a terminal, use
ditto:ditto -x -k GimbalLocal-0.2.0.zip . mv GimbalLocal.app /Applications/Measured on this published artifact, not assumed.
chm ships inside the app. To use it from a terminal:
/Applications/GimbalLocal.app/Contents/MacOS/chm --help
Before it can start anything
The app creates ~/gimbal-snapshots and ~/gimbal-images on first launch,
and both are empty — it does not ship a guest. You need one of:
- a Cloud Hypervisor arm64 snapshot (
state.json+snapshot/memory-ranges,
fromch-remote … snapshoton a Linux host) to rehydrate; or - a directory holding an uncompressed arm64 kernel
Imageto cold-boot; or - nothing but a container reference —
chm image build alpine:3.20builds a
bootable image from Docker Hub on this Mac.
Known limits
- One guest at a time.
hv_vm_createis process-global on macOS. - A guest resumed from a snapshot inherits the capture host's CPU feature
view. On Graviton that meansCTR_EL0.DICdisagrees with this Mac, which
breaks JIT-heavy workloads such asnpm. Cold-booted guests are immune by
construction, because their kernel reads this Mac's ownCTR_EL0. - arm64 guests only. A
sandbox.jsonasking forx86_64, and an
amd64-only container image, are both refused by name up front. Anx86_64
snapshot is not recognised as such and will fail less clearly.