Changelog
Releases
Every litevirt release, newest first, with the pull requests that went into it.
Each release ships one static binary for Linux (amd64, arm64) and a macOS CLI client. Upgrade a running cluster in place with lv host upgrade; hosts pass pre-flight checks first and roll back on their own if a new build fails to come up.
v1.6.2 current
- ci: make the release step idempotent so a pre-existing tag does not fail it
- fix(lxc): parse cgroup2-native limit forms, not just our own emission
- Fix three verified doc-vs-code mismatches in a single docs-only chang...
- Extract the repeated dnsmasq pidfile path literals in internal/networ...
- Replace the duplicated withinDir path-containment helpers in internal...
- Fix internal/corrosion/vms.go's scanVMRow (used by ListVMs/ListVMsPag...
- Implement Fake.FireEvent(domainName string, event libvirt.DomainEvent...
- Export a NotFound-classifying helper from internal/libvirt (generaliz...
- Replace the seven duplicated 8-byte-hex random ID generators (interna...
- fix(health): a pre-epoch newborn VM is not an owner-epoch violation
- fix(deps): bump modernc.org/sqlite to v1.58.0 to stop a WAL checkpoint stall
v1.6.1
- A reissued host certificate left the serial recorded in its host row
- An unreadable certificate never overwrites a good recorded serial: a
- auth.trust_rotated_peer_certs (default false) — the recovery switch for
- Schema-neutral, so this rolls like any ordinary binary upgrade. Running
v1.6.0
- Host capacity, project quota and explicit overcommit are now decided by a
- Host CPU/memory overcommit ratios and explicit reserves; container memory
- Explicit overcommit is gated behind its own authorization verb.
- Project quota covers all four bounded dimensions — vCPU, memory, disk and
- One bytes-to-GiB rule for disk everywhere it is measured, so a charge made at
- The fragmented health APIs are replaced by one durable model.
- OTLP logging and distributed tracing.
- Darwin client builds and Homebrew packaging.
- Explicit, documented multi-homed host advertisement.
- A host-less container operation whose name matches containers on more than
- Run the host upgrade with ALL hosts named, so the schema pre-stages
- Running domains survive the daemon re-exec.
v1.5.2
v1.5.1
v1.5.0
v1.2.0
- feat(rolling): non-destructive in-place cpu/mem updates + crash-recoverable resize
- feat(sriov): enforce a VF-pool policy (allowlist + cap + reuse-first)
- fix(sriov): make compose/attach-pci SR-IOV reach the VF allocator; pin VM updates
- fix(rolling): forward a live in-place resize to the VM's owner (mismerge follow-up to #113)
v1.1.0
- fix(rbac): apply role grants/revokes without a daemon restart
- fix(divergence): ignore column order in schema-shape classification
- feat: v41 operation-journal foundation + PCI ownership fixes (WIP)
- feat: resource-update coordinator + live CPU/balloon resize
- fix(upgrade): only auto-roll-back the binary during an actual upgrade
v1.0.53
- feat(telemetry): OTLP logging + distributed tracing (with review fixes)
- feat(capabilities): config kill-switches to activate the dark hardening tokens
- @livingstaccato made their first contribution in https://github.com/colonelpanik/litevirt/pull/94
v1.0.52
- fix(self-upgrade): never downgrade a dev build to its base release
- feat(auth): strict mTLS identity + forwarded identity (dark by default)
- fix(migrate): atomically commit migration ownership before source cleanup
- fix(replication): commit the new checkpoint anchor before dropping the parent
- fix: re-land fail-open state-write sweep + writecheck guard onto main (was #96)
v1.0.38
- fix(libvirt): emit valid <boot dev="hd"> for BIOS VMs
- feat: table-aware equal-timestamp LWW resolver (Phase 2 — AE + WAL + bounded unresolved)
- @milekz made their first contribution in https://github.com/colonelpanik/litevirt/pull/69
v1.0.35
- feat(storage): safe storage-pool delete — reference guard, driver teardown, libvirt undefine, audit
- feat: peer streaming transport for backup/restore/migrate (no shared NFS repo)
- feat: lv doctor divergence — read-only cluster divergence scanner (LWW repair Phase 0)
- fix(health): selfFence non-destruction guard (LWW repair Phase 1)
v1.0.32
- perf(corrosion): bound anti-entropy lock hold + dump/digest/merge timing metrics
- feat(upgrade): post-reexec health watchdog with rollback to previous binary
- test(fleet): partition/heal harness + reconciler libvirt seam for failover invariants
- feat(failover): container host-loss relocation from backup (schema v34)
v1.0.31
- fix(cli): bootstrap a CLI client cert bundle in
lv host initso locallvworks - docs: document the failover observability metrics (U9)
- feat(placement): fix zero-capacity scoring skew + wire DiskIOPS/NetBW telemetry (schema v33)
- feat(image): opt-in connect-time SSRF deny policy for URL image pulls (U8)
- feat(metrics): live container cgroup CPU/memory usage (A3b)
- feat(corrosion): GC superseded/orphaned recovery-code + LB-backend rows
- fix(cli): bootstrap a CLI client cert bundle in
v1.0.14
- feat(lb): continuous keepalived metric + precise remote VIP-health check
- docs: LB health observability (real backend status, degraded VIP, keepalived metric)
- feat(ct): Tier-1 container correctness — project, quota, audit, metrics
- feat(ct): container runtime primitives (Freeze/Unfreeze/RootFSPath) — Phase B/B0
- feat(ct): container backup & restore (full tar → pbsstore) — Phase B/B1
- feat(ct): container cold migration (lv ct migrate) — Phase B/B3
v1.0.12
- docs: correct stale inline comments on already-shipped paths
- fix: close audit leftovers — F9 residual, F10 IPv6 SG, P2-2 interval
- feat(compose): containers as full compose citizens — lifecycle, LB backends, complete teardown
- fix(migrate,lb): preserve stack association on migration + run multiple stack LBs per host
v1.0.11
- docs: revamp README — hero, comparison table, grouped features
- fix: dashboard "Recent Events" was always empty
- docs: add animated terminal cast to the README hero
- fix(cluster): GC clock_skew, reclaim departed watermarks sooner, expose replication backlog
- fix(fence): validate the watchdog device at startup, not at fence time
- fix(sync): stream the anti-entropy state dump in chunks
- feat(replication): expose per-peer backlog + log peers that fall behind
v1.0.5
- ci: add schema-version and docs/code triangulation guardrails
- docs: schema additive-only/never-rename rule + Grafana host-pressure panel
- fix(lxc): make OCI pull→create work, surface lxc stderr, refresh default release
- @colonelpanik made their first contribution in https://github.com/colonelpanik/litevirt/pull/1