Changelog
Notable features and fixes per klimax release. The authoritative list of every tagged release lives on GitHub; this page highlights the changes worth knowing about.
klimax is pre-1.0 and versions with the same date were cut together during rapid iteration. Patch releases with no user-visible change (dependency bumps, CI, docs) are folded into the nearest entry below.
Upgrading between releases? After
brew upgrade --cask klimax, destroy and re-create the VM so
the new version re-provisions it: klimax destroy && klimax
up. Provisioning is baked into the binary, so an in-place VM keeps
running the old setup until you rebuild it — the host-backed image cache
survives, so it's fast. See
Reset.
v0.1.51 — 2026-08-09
- Added:
klimax shellis now also a command runner —klimax shell <cmd> [args…]runs it in the VM, passesstdin/stdout/stderrthrough, and exits with the remote command's code, so it composes in pipelines andiftests. Trailing arguments used to be accepted and silently ignored. Flag parsing stops at the first positional (klimax shell docker ps -aworks as typed);-tforces a pseudo-terminal. See CLI reference → Running commands in the VM. - Added:
klimax copy <src>… <dst>copies files either direction overscp. Mark the VM side with avm:prefix —klimax copy ./x vm:/tmp/x,klimax copy vm:/tmp/x ./x— with-rfor directories. See CLI reference → Copying files. - Added:
klimax sudoersprintsNOPASSWDrules scoped to the two/sbin/routecommandsklimax upneeds, so it stops prompting for a password;--checkreports whether they're in effect by reading the sudo policy. See CLI reference → Passwordless host route. - Added:
klimax autostart install|uninstall|statusmanages a per-user launchd agent (dev.klimax.autostart) that runsklimax upat login, logging to~/.klimax/logs/autostart.log. It depends on the sudoers rules above — launchd can't answer a password prompt. See CLI reference → Starting at login. - Added:
klimax disk resize <size>grows the VM disk without recreating the VM — it rewritesvm.diskand the Lima instance config, and the image and guest filesystem expand on the nextklimax down && klimax up. Shrinking is refused. See Configuration. - Added:
klimax prune(--dry-run,--downloads,-y) reclaims superseded Lima guest agents and registry caches whose mirror is no longer configured. Caches of configured mirrors are never touched — that's stillklimax registry clean-cache. See Registry mirrors. - Fixed:
klimax statusandklimax doctorreported the macOS host route as present when it was absent — the probe was a plainroute -n get, which the default route answers for any address. It now requires the returned destination to be the CIDR's own base, andstatusprints the gateway it resolved:172.30.0.0/16 → present (via 192.168.64.3). See Networking & L3 routing. - Security: bumped gRPC to v1.82.1 for GO-2026-6061.
v0.1.50 — 2026-07-11
- Fixed:
klimax doctoralways reported the no-NAT iptables rule as missing, even right after a successfulklimax up. The probe omitted the-d <vm-net>destination qualifier that the installed rule carries —iptables -Crequires an exact spec match — and ran unsudoed as the unprivilegedlimaSSH user, so the permission error was swallowed into a false "missing". It now reconstructs the rule exactly and runs undersudo, making doctor's no-NAT line trustworthy again. See Networking & L3 routing.
v0.1.48 – v0.1.49 — 2026-07-09
- Removed: the local push registry
(
kind-registry:5000) is gone — config schema, container,certs.dhost mapping, and the Fleetregistries.localRegistrytoggle all removed. To get a locally built image into a cluster, build against the VM's Docker (eval "$(klimax docker-env)") and load it withkind load docker-image. See Registry mirrors. - Changed:
network.disablePortMirroringnow defaults totrue, so klimax coexists with other Lima VMs out of the box and kubeconfigs use the VM'slima0IP. Set it tofalseto force loopback (127.0.0.1) addressing — e.g. for a single VM or when host security software blocks vzNAT IPs. See Networking. - Added: two Google Artifact Registry
pull-through mirrors to the defaults —
registry-us-docker-pkgdev(5040) andregistry-us-central1-docker-pkgdev(5050), alongside the existing docker.io, quay.io, and gcr.io mirrors. - Security: binaries are built with Go
1.25.12 to patch the
crypto/tlsECH CVE.
v0.1.43 – v0.1.47 — 2026-07-06
- Changed: bumped MetalLB to v0.16.1 (the
new default
kind.metalLBVersion) and tightened LoadBalancer / metrics-server readiness waits to 180 s. - Changed: bumped the bundled Lima runtime to v2.1.4 and version-stamped the cached guest agent so it refreshes when Lima changes.
- Fixed: klimax now rejects hostname-like
registry mirror names (any
namewith a.or:). Such a name shadows its own upstream on thekindDocker network and silently breaks the pull-through cache — use a safe form likeregistry-quayio. See Registry mirrors. - Security: releases now ship SBOMs, CI
runs
govulncheckwith Dependabot enabled, and binaries are built with Go 1.25.11 to pick up the latest stdlib CVE patches.
v0.1.42 — 2026-07-04
- Added: a top-level
klimax kubeconfigcommand (aliaskc) grouping every kubeconfig op —path,env,merge,use(merge + switch context), andremove. See CLI reference → Kubeconfig. - Deprecated:
klimax cluster useandcluster merge— still work, but preferkubeconfig envandkubeconfig merge. - Fixed: raised the MetalLB and metrics-server readiness waits to 300 s so slower first-pull machines don't time out.
v0.1.41 — 2026-07-04
- Changed: the embedded Lima logs are hidden by
default — klimax quiets them to
errorso only its own output (and genuine Lima errors) show. Surface them with--debug(Lima atinfo) or--lima-log-level trace|debug|info|warn|error|off. See CLI reference → Logging.
v0.1.38 – v0.1.39 — 2026-07-03
- Added:
klimax fleet describe <name>shows a fleet's member clusters with their num, ports, nodes, and labels (aliasesdesc,show). - Changed:
klimax cluster createno longer takes--num— the cluster num is always auto-assigned to the lowest free slot. Pin one where it matters via a Fleet manifest'snum:field.
v0.1.36 – v0.1.37 — 2026-07-03
- Added: a top-level
klimax fleetcommand that operates on live clusters grouped by theklimax.dev/fleetnode label —fleet list,fleet create -f,fleet delete <name>|-f, andfleet label <name>. See Fleet management. - Added: kubectl-style label selectors on
the cluster commands —
klimax cluster list -l <selector>to filter andklimax cluster delete -l <selector>to delete matching clusters. - Changed: the bundled Agent Skill now covers Fleet manifests and cluster labels.
v0.1.35 — 2026-07-03
- Added:
klimax cluster label <name>relabels an existing cluster's nodes without recreating it — repeatable-l key=valuesets or overwrites a label (--overwriteby default), and-l key-removes one. See Managing clusters → Node labels.
v0.1.32 – v0.1.34 — 2026-07-03 · Fleets
- Added: declarative fleets of kind
clusters.
klimax cluster apply -f <manifest>reconciles a Fleet manifest (apiVersion: klimax.dev/v1alpha1) into existence — creating missing clusters independsOnorder, up tomaxParallelat a time, with--dry-runand per-cluster registries, addons, and labels. It's additive: existing clusters are skipped, never mutated. See Fleet management. - Added:
klimax cluster delete -f <manifest>tears a fleet down in reverse-dependency order (-yto skip the prompt). - Added: node labels on every cluster —
managed-by=klimaxalways,klimax.dev/fleet=<name>for fleets,topology.kubernetes.io/region+zone, and your own via the manifestlabelsmap orklimax cluster create -l key=value. - Changed: the resource formerly called
ClusterSetis now Fleet.
v0.1.30 — 2026-07-03
- Changed: bumped the default Kubernetes node image to
kindest/node:v1.35.0and MetalLB tov0.15.2. - Fixed: registry mirrors now work on containerd
2.x — cluster containerd is configured with
certs.dhosts.tomlfiles instead of the oldcontainerdConfigPatches. See Registry mirrors. - Added:
klimax cluster createnow warns whenkind.nodeVersionis overridden away from the version the bundled kind CLI is validated against — overriding it is unsupported. - Added:
klimax doctorsurfaces Rosetta status, so you can see at a glance whether Rosetta 2 emulation is available in the VM. - Fixed:
klimax upno longer re-adds the macOS host route (or prompts for sudo) when the route is already correct — repeat runs are quieter and fully idempotent.
v0.1.29 — 2026-07-02
- Added:
klimax skill installships a bundled Agent Skill that teaches AI coding tools like Claude Code how to drive klimax. Installs into~/.claude/skills/klimax/by default;--printemits it for other tools andklimax skill pathreports where it lives.
v0.1.28 — 2026-06-17
- Fixed: the Docker daemon could fail to start inside
the VM on hosts whose macOS username is also a valid Linux username.
The guest user is now pinned to
lima, so theSocketUser=limaoverride is always valid.
v0.1.24 – v0.1.27 — 2026-04 to 2026-06
- Changed: bumped the bundled Lima runtime to the
2.1.xseries. - Fixed: an sshd provisioning idempotency bug — the
ClientAliveIntervalcheck is now anchored so Ubuntu's commented-out default is skipped, avoiding SSH socket-permission errors on repeatedklimax up. - Documentation: added the vs. other tools comparison (including OrbStack) and reworked the diagrams and logo.
v0.1.23 — 2026-04-02
- Added:
kind.customDnsResolversis now actually wired into each cluster's CoreDNS. Forward specific domains (e.g. an internalcorp.internalzone) to chosen upstream resolvers. See Configuration.
v0.1.22 — 2026-04-02
- Added:
network.disablePortMirroring— run klimax alongside other Lima-based tools (Rancher Desktop, Colima) without fighting over127.0.0.1port mirroring. With it set, kubeconfigs address the VM'slima0IP directly. See Networking.
v0.1.20 — 2026-03-30
- Added: short-name aliases for the main commands.
- Fixed: prevented SSH socket exhaustion on the guest.
v0.1.0 – v0.1.19 — 2026-03-27 · initial release
- Multi-cluster kind management on a single Lima (Apple Virtualization.framework) VM, with pure L3 routing — reach pods and LoadBalancer services by their real IP, no port-forwarding.
- Pull-through registry mirrors for
docker.io,quay.io, andgcr.io, plus a local push registry — with a host-backed cache that survives teardowns. - Automatic kubeconfig merge/removal on cluster create/delete, plus a
cluster mergesubcommand. - Docker context and
docker-envsupport. - Built-in nginx end-to-end routing smoke test, and an
ssh-into-the-VM command. - Shell completion.
- Optional Rosetta support; all state stored under
~/.klimax, with a default config generated on first run.
See also
- GitHub releases — every tag with full commit history.
- Upgrading from an old install — how to wipe and reinstall from scratch.