Releases: gimbal-dev/gimbal-local
Release list
Gimbal Local 0.2.2
Gimbal Local 0.2.2 — 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 or account. Guest execution is local and can run offline;
pulling an image from a container registry requires network access. - 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.
The accompanying GimbalLocal-0.2.2.release-metadata provenance asset
records the source commit, ZIP SHA-256, arm64 architecture, and signing identity
verified before this release was created.
Install
- Download
GimbalLocal-0.2.2.zipbelow. - Double-click it in Finder to unpack, then move GimbalLocal.app to
/Applications. Finder shows it as Gimbal Local. - Open it. The engine starts itself.
If you unpack from a terminal, use ditto, not unzip:
ditto -x -k GimbalLocal-0.2.2.zip .
unzip does not understand the extended attributes this archive carries, and
writes them into the app bundle as stray ._* files. They are not covered by
the code signature, so macOS refuses to run the result. Finder and ditto both
unpack it correctly.
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 - a container reference plus an arm64 kernel — for example,
chm image build alpine:3.20 --kernel /path/to/Image. The image may also
need the matching module tree via--modules. Registry pulls use the
network.
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.
Gimbal Local 0.2.1
Gimbal Local 0.2.1 — Cloud Hypervisor snapshots, rehydrated on Apple silicon.
What changed since 0.2.0
Local-only is now on by default.
0.2.0shipped reaching for a cloud
control plane on first launch — a download has no control plane and no way to
get one, so it showed a Cloud section that could only ever say offline while
polling an endpoint that would always refuse. Nothing ever left the machine
(the default URL is loopback and the binary contains no remote endpoint), but
it was the wrong shape for a local product. If you have 0.2.0, take this
one.Also in this build: a coding agent has now been proven working inside a
rehydrated cloud snapshot — it wrote code, the guest was suspended and
resumed twice, and the agent read back its own file and carried on
(#286). That is the
whole product claim, end to end.
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.1.zipbelow. - Double-click it in Finder to unpack, then move GimbalLocal.app to
/Applications. Finder shows it as Gimbal Local. - Open it. The engine starts itself.
If you unpack from a terminal, use ditto, not unzip:
ditto -x -k GimbalLocal-0.2.1.zip .
unzip does not understand the extended attributes this archive carries, and
writes them into the app bundle as stray ._* files. They are not covered by
the code signature, so macOS refuses to run the result. Finder and ditto both
unpack it correctly.
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 can
break JIT-heavy workloads;NODE_OPTIONS=--jitlessis the workaround for
Node. It is workload-dependent rather than universal — measured 2026-08-13,
the Copilot CLI's native binary ran clean without it. Cold-booted guests are
immune by construction, because their kernel reads this Mac's ownCTR_EL0. - Setting up the credential proxy by hand has sharp edges: a workspace mints
its own CA (#315),
the CA install script is larger thanchm execcan carry and there is no
chm cp(#316), and
chm proxy check --workspacereturns a wrong verdict
(#317). The app's
Install CA in guest button does it for you;
docs/credential-proxy.md
now documents the CLI path. - 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.
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.
Gimbal Local 0.1.1
Superseded. Use the latest release instead. This page is kept for history.
Gimbal Local 0.1.1 — 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.1.1.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.1.1.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.
Gimbal Local 0.1.0
Superseded. Use the latest release instead. This page is kept for history.
Gimbal Local 0.1.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.1.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.1.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.