Skip to main content

A high-performance local compiler cache daemon

Project description

zccache

A blazing fast cpp compiler cache

New Project

Inspired by sccache, but optimized for local-first use with aggressive file metadata caching and filesystem watching.

Performance

Benchmark: 50 C++ files, warm cache

Scenario Bare Clang sccache zccache vs sccache vs bare clang
Single-file, Cold 10.336s 17.292s 11.489s 1.5x faster 0.9x
Single-file, Warm 10.141s 1.331s 0.031s 43x faster 324x faster
Multi-file, Cold 9.898s 9.906s 10.337s 1.0x faster 1.0x
Multi-file, Warm 10.422s 9.809s 0.023s 419x faster 446x faster

Cold = first compile (empty cache). Warm = median of 5 subsequent runs. Single-file = 50 sequential clang++ -c unit.cpp invocations. Multi-file = one clang++ -c *.cpp invocation. sccache cannot cache multi-file compilations — its "warm" multi-file time is a full recompile.

Run the benchmark yourself: uv run perf

Build system integration (ninja, meson, cmake, make)

zccache is a drop-in compiler wrapper. Point your build system's compiler at zccache <real-compiler> and it handles the rest:

# meson native file
[binaries]
c = ['zccache', '/usr/bin/clang']
cpp = ['zccache', '/usr/bin/clang++']
# CMake
set(CMAKE_C_COMPILER_LAUNCHER zccache)
set(CMAKE_CXX_COMPILER_LAUNCHER zccache)

The first build (cold cache) runs at near-bare speed. Subsequent rebuilds (ninja -t clean && ninja, or touching source files) serve cached artifacts via hardlinks in under a second.

Single-roundtrip IPC: In drop-in mode, zccache sends a single CompileEphemeral message that combines session creation, compilation, and session teardown — eliminating 2 of 3 IPC roundtrips per invocation.

Session stats: Track hit rates per-build with --stats:

eval $(zccache session-start --stats --log build.log)
export ZCCACHE_SESSION_ID=...
# ... build runs ...
zccache session-stats $ZCCACHE_SESSION_ID   # query mid-build
zccache session-end $ZCCACHE_SESSION_ID     # final stats

Persistent cache: Artifacts are stored in ~/.cache/zccache/artifacts/ (or %LOCALAPPDATA%\zccache\artifacts\ on Windows) and survive daemon restarts. No need to re-warm the cache after a reboot.

Multi-file compilation (fast path)

When a build system passes multiple source files to a single compiler invocation (e.g. gcc -c a.cpp b.cpp c.cpp -o ...), zccache treats this as a fast path:

  1. Each source file is checked against the cache in parallel.
  2. Cache hits are served immediately — their .o files are written from the cache.
  3. Remaining cache misses are batched into a single compiler process, preserving the compiler's own process-reuse and memory-sharing benefits.
  4. The outputs of the batched compilation are cached individually for future hits.

This hybrid approach means the first build populates the cache per-file, and subsequent builds serve as many files as possible from cache while still letting the compiler handle misses efficiently in bulk.

Recommendation: Configure your build system to pass multiple source files per compiler invocation whenever possible. This gives zccache the best opportunity to parallelize cache lookups and minimize compiler launches.

Concurrency

The daemon uses lock-free concurrent data structures (DashMap) for artifact and metadata lookups, so parallel compilation requests from multiple build workers never serialize on a global lock.

Status

Early development — architecture and scaffolding phase.

Goals

  • Extremely fast on local machines (daemon keeps caches warm)
  • Portable across Linux, macOS, and Windows
  • Correct under heavy parallel compilation (no stale cache hits)
  • Simple deployment (single binary)

Architecture

See docs/ARCHITECTURE.md for the full system design.

Key components

Crate Purpose
zccache-cli Command-line interface (zccache binary)
zccache-daemon Daemon process (IPC server, orchestration)
zccache-core Shared types, errors, config, path utilities
zccache-protocol IPC message types and serialization
zccache-ipc Transport layer (Unix sockets / named pipes)
zccache-hash blake3 hashing and cache key computation
zccache-fscache In-memory file metadata cache
zccache-artifact Disk-backed artifact store with redb index
zccache-watcher File watcher abstraction (notify backend)
zccache-compiler Compiler detection and argument parsing
zccache-test-support Test utilities and fixtures

Building

cargo build --workspace

Testing

cargo test --workspace

Documentation

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

zccache-1.0.16-py3-none-win_amd64.whl (2.3 MB view details)

Uploaded Python 3Windows x86-64

zccache-1.0.16-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

zccache-1.0.16-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

zccache-1.0.16-py3-none-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

zccache-1.0.16-py3-none-macosx_10_12_x86_64.whl (2.2 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file zccache-1.0.16-py3-none-win_amd64.whl.

File metadata

  • Download URL: zccache-1.0.16-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.11

File hashes

Hashes for zccache-1.0.16-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 037c73158d2a41316abbcfe8dbe2ef2330d5ca9d7e67bc6e25e34a3cf0eea39a
MD5 76728dc89bdbd7b95cb6943942f62c05
BLAKE2b-256 2507141181b38bb7de7eadff65ef0117ad70a8316b544b8d55c4e257eadb3b6b

See more details on using hashes here.

File details

Details for the file zccache-1.0.16-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zccache-1.0.16-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a460bd9a4b4846d7c94f216e832fa3047ff4f00a4da44e12a23142d49585a0ea
MD5 b66ef7efd408fe817bb32b2a61d42815
BLAKE2b-256 928a9416ff955f26d9ae0b040d72db8c5483a16f38459dd513a167a94594b2bb

See more details on using hashes here.

File details

Details for the file zccache-1.0.16-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for zccache-1.0.16-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ac4f94e354c972ecad7945a9f5908b4dc6ddaaa51335a51b7db95e2dab1d6e5a
MD5 ac18eece3a97fb2f9bf689207a21c11a
BLAKE2b-256 b851e794e2a8168be2aa3e81d74351d1f89cd4d4f510e4a9ae0b02f0dccb7adc

See more details on using hashes here.

File details

Details for the file zccache-1.0.16-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zccache-1.0.16-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9be4dcdc2e47115152bb4ab0ac59e3d3d6e8b2d238d406d3201bfb6fb580f435
MD5 53d37405b8d3e03df0e37e26e8a47c1f
BLAKE2b-256 0065cc86972c6402f4ae6362bc34f03a5f2db7017209c50587c289ea9f92fbca

See more details on using hashes here.

File details

Details for the file zccache-1.0.16-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for zccache-1.0.16-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 37d8b0d4e6ba20cccda58cf5aec1d5d2cf462e5385aa13a66908bdf3d145a2bd
MD5 57924626d0fd555e4d8f1b8ac9412ce6
BLAKE2b-256 17efc5a9e3e6a7a991006d1f969e7de6c8c0263655127183813103facc2e10ee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page