Kache 1.1.0 fixes stale cache hits in Rust and C/C++, improves Rust edit loops, and adds reuse from an authorized local cache mounted read-only. It also repairs daemon upgrades and recovery when a cache volume fills up.
Install or update:
cargo install kache --locked --version 1.1.0New installations can run kache init, then use Cargo as usual. Other installation methods.
Highlights
- Cache keys now account for more source, build-script and native-library inputs. Inputs changed during compilation prevent affected results from being stored.
- Rust edit loops retain incremental state after ordinary compile errors. Learning units seed that state from one compile's emitted dependency information.
- Read-only consumers can restore remote entries from a stopped daemon, and writable jobs can restore from a trusted local fallback mounted read-only.
Added
- Local fallback: writable jobs can reuse an authorized host cache without modifying it. Use a read-only mount and keep it within the same trust domain. #1470 by @jleni, adopted from @temporaryfix.
- Build scripts: enable hermetic cached runs by setting
build_script_hermetic = truein[cache]. This remains off by default. #1444 by @AlJohri. - Build explanations:
kache explain <crate>names changed compiler-reported environment inputs without logging their values. Configured Cargo target directories can reuse matching donor units. #1443 by @jleni.
Fixed
- Cache correctness: settled-timestamp checks, workspace-tree guards and build-script declarations prevent several stale Rust and C/C++ hits. Results are withheld when relevant inputs change during compilation. #1488, #1491 by @jleni.
- Native outputs: restored C/C++ objects now trigger Make relinking, dependency paths follow the consumer checkout, and corrected native-library keys account for repeated link specifications and Apple install names. #1481, #1496 by @jleni.
- Build-script launchers: symlinked installations, including Homebrew paths, produce working executable pins. #1496 by @jleni.
- Remote access: read-only sessions keep their write restriction when starting a daemon. Upload workers process jobs concurrently, and accepted GC requests are no longer replayed after ambiguous timeouts. #1479 by @jleni.
- Cleanup: busy Cargo profiles preserve recent-use evidence. Opt-in live-unit receipts protect outputs Cargo still considers fresh. Full-disk recovery can request eviction after a refused store. #1480, #1485, #1491 by @jleni.
- macOS debugging: adaptive-incremental executables retain their debug information. #1440 by @alanxone.
- APT updates: package uploads finish before repository indexes advertise them. Failed package uploads leave the live indexes unchanged. #1536 by @jleni, contributed by Viktor (@viktorius007).
Performance
- Workspace guards share tree-memo work and reuse settled small-file hashes after metadata changes. #1493, #1520 by @jleni.
- Adaptive Rust units retain incremental state through ordinary errors and avoid a separate discovery compile when first learning their inputs. #1491, #1497 by @jleni.
Upgrade notes
- The first upgrade rebuilds file-hash and C/C++ memo data. Expect a cold build for C/C++ units and affected Rust units from packages with build scripts under the corrected keys.
- Existing cleanup settings now also apply to eligible targets in sibling Git worktrees. Free-space recovery stays off by default;
cache.auto_recover_min_free_bytesenables it. - If the old daemon remains after an upgrade, run
kache daemon restart. Using 1.0.x and 1.1.0 together can repeatedly replace the shared daemon. - A selected AWS profile now fails explicitly if it cannot supply credentials. It no longer falls through to a different workload identity.
- With
cache.ignore_env = true, enable hermetic runs throughbuild_script_hermeticin the file;KACHE_BUILD_SCRIPT_HERMETICnow follows the environment-override policy.
New Contributors
Contributors
Full changelog: v1.0.0...v1.1.0