kache 0.11.0 — broader compiler coverage, and libc-aware keys
kache is a content-addressed build cache that plugs in as a RUSTC_WRAPPER (and a C/C++ compiler wrapper). 0.11.0 widens the set of toolchains and filesystems kache handles correctly — target-prefixed cross-compilers, zig, and non-reflink filesystems — and tightens several cache keys so more real builds hit soundly. It also landed contributions from a number of first-time contributors.
Why
A build cache is only as trustworthy as the weakest key it computes. This release chased down several places where the key was too loose (a musl binary and a glibc binary sharing an entry; a CUDA compile keyed on one preprocess) or the toolchain wasn't recognized at all (an aarch64-linux-gnu-gcc cross-compiler, a cargo-zigbuild zigcc wrapper). It also broadens zero-copy restore to filesystems that don't support reflinks.
What's new
- More compilers recognized. Target-prefixed C/C++ cross-compilers (e.g.
aarch64-linux-gnu-gcc) andcargo-zigbuild'szigccwrapper are now treated as their real compiler family instead of being passed through uncached. - libc-aware Linux keys. Native Linux outputs are keyed by the host libc, so a glibc build and a musl build of the same source no longer collide on one cache entry.
- CUDA compiles are refused, not mis-cached.
clang -x cudawas being keyed on a single-Epreprocess, but CUDA/HIP compile the same TU once per target with different predefined macros (__CUDA_ARCH__) — unsound to share. kache now declines them instead of risking a bad hit. - Hardlink fallback for non-reflink filesystems. On ext4-without-reflink or tmpfs, immutable blobs are hardlinked when a CoW reflink isn't available (dep-info, executables, and symlinks stay on the copy path), extending near-zero-copy restore beyond CoW volumes.
- Opportunistic background GC for local workflows, atomic + synchronized log rotation, and a
RemoteBackendtrait extracted over the transport layer (paving the way for a filesystem backend alongside S3). - Cross-compilation key fixes.
target_dir/workspace_rootare derived correctly for cross builds, and unrecognizedRUSTC_WORKSPACE_WRAPPERdrivers are detected by their inner rustc.
Thanks
0.11.0 includes first contributions from @aqeelat, @jlucaso1, @KokaKiwi, @lwintermelon, @Skory and others — thank you.
These notes were drafted with LLM assistance and edited by the maintainers (@jleni, @emmanuelm41).
What's Changed
- fix(rustc): detect unrecognized RUSTC_WORKSPACE_WRAPPER drivers by inner rustc by @aqeelat in #506
- refactor(remote): extract RemoteBackend trait for transport-specific concerns (#414) by @jlucaso1 in #515
- feat(gc): trigger background GC opportunistically for local workflows by @Ysh204 in #511
- docs: stop claiming bare
kacheopens the TUI by @emmanuelm41 in #524 - fix(events): make log rotation atomic and synchronized by @Ysh204 in #518
- docs: add AUR install method to README by @KokaKiwi in #523
- fix(compiler): detect bare workspace wrappers configured by Cargo by @Ysh204 in #519
- fix(args): derive target_dir and workspace_root correctly for cross-compilation by @Ysh204 in #521
- fix(daemon): add
statussubcommand the help text already promised by @aqeelat in #522 - chore: bump kache to v0.11.0-rc.1 by @emmanuelm41 in #529
- test(events): fix flaky concurrent tailer assertion on Windows by @emmanuelm41 in #536
- cc: recognize cargo-zigbuild zigcc wrappers as Clang-family compilers by @lwintermelon in #520
- refactor(store,events): extract shared atomic replace helper by @Ysh204 in #531
- test(events): harden concurrent rotation tests and cover rename-reset mutation by @Ysh204 in #532
- fix(compile): probe cargo outputs instead of readdir'ing out-dir by @Skory in #534
- fix(link): clarify storage-block sharing warning by @Ysh204 in #537
- feat(store): hardlink immutable blobs when CoW reflink is unavailable by @jleni in #548
- Fix rustc cache key ordering and key locking by @jleni in #549
- cc: refuse CUDA compiles instead of mis-caching or erroring by @jleni in #550
- Recognize target-prefixed C/C++ compiler wrappers by @jleni in #566
- Normalize configured container and sandbox roots by @jleni in #567
- Key native Linux outputs by host libc by @jleni in #568
- Avoid global env mutation in wrapper-chain tests by @jleni in #569
- chore: bump kache to v0.11.0 by @emmanuelm41 in #570
New Contributors
- @aqeelat made their first contribution in #506
- @jlucaso1 made their first contribution in #515
- @KokaKiwi made their first contribution in #523
- @lwintermelon made their first contribution in #520
- @Skory made their first contribution in #534
Full Changelog: v0.10.0...v0.11.0