This release candidate splits the compiler client from kache-engine, adds incremental reuse between local worktrees, and checks real cache restores with kache doctor --probe. Custom installations must now ship both executables. Use this RC to validate installations and upgrades before 2.0.0 stable.
cargo install kache --locked --version 2.0.0-rc.1
kache initHighlights
- Compiler processes and artifact restores stay in the client while the daemon coordinates the cache pipeline on Linux, macOS and Windows.
- Compatible worktrees can reuse local incremental state on rustc 1.98 or later. Imports use private clones or copies.
kache doctor --probeverifies a cold compilation followed by a local cache hit.
Added
- Diagnostics:
kache doctor --probecompiles a small Rust library in a temporary local cache, removes the output, and checks that Kache restores identical bytes without invoking rustc again. Doctor also reports cache access failures, disk and inode pressure, and differences between client and daemon settings. #1707 by @jleni. - Incremental builds: compatible worktrees seed local incremental state automatically on rustc 1.98 or later. Set
KACHE_SEED_INCREMENTAL=0to opt out. #1647 by @jleni.
Fixed
- Remote resilience: speculative dependency lookups honor the circuit breaker and configured restore deadline, so optional requests do not keep retrying a degraded remote. #1715 by @jleni.
- Rust metadata: restored metadata stays writable for
cargo fixandcargo clippy --fix. Incremental imports no longer share writable files with their donor, including ThinLTO state. #1704 by @mvanhorn and @jleni. - Cache keys: track optional-header changes, the selected Linux linker, and Windows resource and default-library inputs. #1638, #1664, #1684, #1701 by @jleni, @viktorius007, @TastyCZ and @Veykril.
- Windows: opt-in executable caching restores matching PDBs alongside executables and rejects unsupported debug layouts. #1685 by @jleni, adopting @TastyCZ's contribution.
- C/C++ headers: transparent aliases of
__has_includeremain cacheable while optional-header changes still invalidate affected entries. #1713 by @jleni. - Worktree seeds: copied Cargo metadata refers to the receiving checkout, so removing the donor does not leave stale dependency paths. #1694 by @jleni.
- Statistics and sync: time-window reports include rotated event logs, text summaries show per-source hits, and filtered pulls resolve compiler target names. #1646, #1671, #1710 by @jleni and @TastyCZ.
Breaking Changes
- Installation: install matching
kacheandkache-engineexecutables in the same directory. Update scripts and container images that copy onlykache. Manual Windows installs use the paired ZIP; standalone EXE release assets are discontinued. #1639. - Daemon protocol: run
kache daemon restartafter upgrading. The new execution protocol rejects older peers before accepting compilation ownership. #1702. - Incremental state: finish active builds before upgrading. Managed incremental state starts cold once and is recreated with private files. #1704.
Performance
- The small client delegates cache planning to the persistent daemon while retaining native compiler execution and restores. #1639, #1702.
- Daemon admission scales with CPU count and Unix descriptor headroom. Override it with
cache.daemon_execution_concurrencyorKACHE_DAEMON_EXECUTION_CONCURRENCY, then restart the daemon. #1705.
New Contributors
Contributors
Credits include commit authors and coauthors of adopted contributions in this release.
Full changelog: v1.2.2...v2.0.0-rc.1