⚠️ More information in our blog
Highlights
- Reflink-first restores. Cache hits try a copy-on-write reflink before a hardlink or plain copy, giving cheap restores on APFS, Btrfs, and XFS without the single-filesystem limit of hardlinks.
- C/C++ build caching. Initial support for single-source
-cobject compiles (cc/gcc/g++/clang/clang++), behind a conservative argument allow-list: any flag kache has not classified forces a safe passthrough rather than a silent miscache. - Fallback compiler-wrapper. Compiles kache declines (link steps, MSVC, unmodeled flags) can be handed to a secondary wrapper such as
sccacheinstead of running uncached. Opt in viaKACHE_FALLBACKor[cache] fallback. - Windows groundwork. Cross-platform daemon IPC and cache restore, Task Scheduler daemon install, portable file locking, Unicode-safe path normalization, and an exploratory Windows CI job. Not a finished port yet, but the foundation is in place.
- Source path exclusions.
cache.excludeglob patterns in.kache.tomlbypass kache entirely for chosen source paths. - Correctness hardening. rustc cache-key fixes (
--emitkeying, path-portable dep-info, DWARFcomp_dirremapping), path-independent C/C++ objects, output discovery from rustc artifact notifications, and LTO + stripped release builds.
What's Changed
- docs: rewrite site to mirror README polish, flatten layout by @jleni in #46
- Revise README installation instructions by @jleni in #48
- feat(windows): swap to rustls-aws-lc and add exploratory CI (#45) by @jleni in #50
- refactor(compiler): introduce Compiler trait, route rustc through it by @jleni in #53
- refactor(link): try reflink before hardlink/copy by @jleni in #54
- ci(coverage): bump threshold to 35% (push-only) + HTML artifact by @jleni in #55
- fix(doctor): use
whereinstead ofwhichon Windows by @emmanuelm41 in #62 - refactor(compiler): centralize per-artifact dispatch via ArtifactKind by @jleni in #56
- fix(doctor): clean stale lock files with --fix on Windows by @emmanuelm41 in #63
- build: enable LTO, codegen-units=1, and strip for release by @jleni in #66
- refactor(compiler): post-restore actions + verify-then-sign + classify centralization by @jleni in #65
- test(e2e): add end-to-end smoke test for cache lifecycle by @emmanuelm41 in #69
- feat(compiler): C-family wrapper skeleton with passthrough + e2e by @jleni in #70
- refactor(compiler): extract Platform trait for OS-specific concerns by @jleni in #72
- fix(cc): pass through the cc-crate compiler-family probe by @jleni in #73
- feat(windows): cross-platform daemon IPC and cache restore by @jleni in #64
- feat(windows): add Task Scheduler support for daemon install by @emmanuelm41 in #76
- test(e2e): add
relocatephase to expose cache-key path leaks by @jleni in #74 - test(e2e): binary-content inspection in [verify] (forbidden_substrings) by @jleni in #83
- feat(path_normalizer): cross-platform path handling — Windows variants, Unicode safety, NFC normalization by @jleni in #84
- feat(cc): C-family argument parser + refuse-to-cache detection (PR5-A) by @jleni in #86
- feat(cc): single-source C/C++ object caching (PR5-B + PR5-C) by @jleni in #87
- fix(daemon): socket roundtrip tests hang on macOS by @jleni in #89
- ci: run the test suite and e2e harness on macOS by @jleni in #90
- ci: fall back to GitHub-hosted macOS runners outside kunobi-ninja by @jleni in #91
- feat(e2e): deterministic op-count metrics + assertions by @jleni in #92
- test(e2e): differential + invalidation checks for C/C++ caching by @jleni in #93
- fix(cc): allow-list flag classifier — close the silent-miscache hole by @jleni in #94
- feat(cc): compiler-probe memoization + resolved-invocation cache key by @jleni in #97
- fix(e2e): carry the toolchain pin into the relocate phase by @jleni in #98
- fix(cc): make compiled objects path-independent (#78) by @jleni in #99
- fix(rustc): path-portable dep-info — relocated cache hits stay fresh by @jleni in #100
- fix(cache_key): key on --emit; add rustc key-correctness matrix by @jleni in #101
- feat(rustc): discover outputs from rustc artifact notifications by @jleni in #102
- fix(restore): compute artifact content before materializing it by @jleni in #103
- fix(path-normalizer): remap the rustc CWD so DWARF comp_dir is clean by @jleni in #104
- feat(cache): add source path exclusions by @jleni in #105
- test(e2e): falsifiability — negative-control mode + direct dep-info assertion by @jleni in #106
- test(e2e): add rust-debug debug-profile fixture by @jleni in #107
- test(e2e): add workspace + cargo-check breadth fixtures by @jleni in #108
- feat(config): fall back to a secondary compiler-wrapper (sccache) on passthrough by @jleni in #110
Full Changelog: v0.2.0...v0.3.0