Documentation menu

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.48 – v0.1.49 — 2026-07-09

  • Removed: the local push registry (kind-registry:5000) is gone — config schema, container, certs.d host mapping, and the Fleet registries.localRegistry toggle all removed. To get a locally built image into a cluster, build against the VM's Docker (eval "$(klimax docker-env)") and load it with kind load docker-image. See Registry mirrors.
  • Changed: network.disablePortMirroring now defaults to true, so klimax coexists with other Lima VMs out of the box and kubeconfigs use the VM's lima0 IP. Set it to false to 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) and registry-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/tls ECH 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 name with a . or :). Such a name shadows its own upstream on the kind Docker network and silently breaks the pull-through cache — use a safe form like registry-quayio. See Registry mirrors.
  • Security: releases now ship SBOMs, CI runs govulncheck with 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 kubeconfig command (alias kc) grouping every kubeconfig op — path, env, merge, use (merge + switch context), and remove. See CLI reference → Kubeconfig.
  • Deprecated: klimax cluster use and cluster merge — still work, but prefer kubeconfig env and kubeconfig 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 error so only its own output (and genuine Lima errors) show. Surface them with --debug (Lima at info) 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 (aliases desc, show).
  • Changed: klimax cluster create no longer takes --num — the cluster num is always auto-assigned to the lowest free slot. Pin one where it matters via a Fleet manifest's num: field.

v0.1.36 – v0.1.37 — 2026-07-03

  • Added: a top-level klimax fleet command that operates on live clusters grouped by the klimax.dev/fleet node label — fleet list, fleet create -f, fleet delete <name>|-f, and fleet label <name>. See Fleet management.
  • Added: kubectl-style label selectors on the cluster commands — klimax cluster list -l <selector> to filter and klimax 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=value sets or overwrites a label (--overwrite by 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 in dependsOn order, up to maxParallel at a time, with --dry-run and 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 (-y to skip the prompt).
  • Added: node labels on every cluster — managed-by=klimax always, klimax.dev/fleet=<name> for fleets, topology.kubernetes.io/region + zone, and your own via the manifest labels map or klimax cluster create -l key=value.
  • Changed: the resource formerly called ClusterSet is now Fleet.

v0.1.30 — 2026-07-03

  • Changed: bumped the default Kubernetes node image to kindest/node:v1.35.0 and MetalLB to v0.15.2.
  • Fixed: registry mirrors now work on containerd 2.x — cluster containerd is configured with certs.d hosts.toml files instead of the old containerdConfigPatches. See Registry mirrors.
  • Added: klimax cluster create now warns when kind.nodeVersion is overridden away from the version the bundled kind CLI is validated against — overriding it is unsupported.
  • Added: klimax doctor surfaces Rosetta status, so you can see at a glance whether Rosetta 2 emulation is available in the VM.
  • Fixed: klimax up no 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 install ships a bundled Agent Skill that teaches AI coding tools like Claude Code how to drive klimax. Installs into ~/.claude/skills/klimax/ by default; --print emits it for other tools and klimax skill path reports 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 the SocketUser=lima override is always valid.

v0.1.24 – v0.1.27 — 2026-04 to 2026-06

  • Changed: bumped the bundled Lima runtime to the 2.1.x series.
  • Fixed: an sshd provisioning idempotency bug — the ClientAliveInterval check is now anchored so Ubuntu's commented-out default is skipped, avoiding SSH socket-permission errors on repeated klimax up.
  • Documentation: added the vs. other tools comparison (including OrbStack) and reworked the diagrams and logo.

v0.1.23 — 2026-04-02

  • Added: kind.customDnsResolvers is now actually wired into each cluster's CoreDNS. Forward specific domains (e.g. an internal corp.internal zone) 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 over 127.0.0.1 port mirroring. With it set, kubeconfigs address the VM's lima0 IP 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, and gcr.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 merge subcommand.
  • Docker context and docker-env support.
  • 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