Skip to content
rninja

Home / Glossary

The vocabulary of faster builds

rninja lives in the world of build graphs, content-addressed caches, and async schedulers. If a term on the how-it-works page was new, here it is in plain language.

Drop-in replacement
A tool that keeps the same input format and command-line surface as the thing it replaces, so existing setups work unchanged. rninja is a drop-in replacement for ninja.
build.ninja
The build file format ninja executes. Generators like CMake, GN, and Meson emit it. rninja parses the exact same file — it does not regenerate it.
Generator (CMake / GN / Meson)
A tool that turns a high-level project description into a build.ninja. rninja sits below the generator: you keep generating build.ninja the same way and rninja executes it.
Incremental build
Rebuilding only the parts of a project affected by a change, instead of everything. ninja is already good at this; rninja makes the surviving work cacheable across runs.
Warm vs cold build
A cold build has an empty cache and computes everything; a warm build reuses cached results. rninja’s biggest wins are on warm incremental builds — the ~2x–5x range quoted in its docs.
Content-addressed cache
A cache keyed by a hash of content rather than a name or timestamp. Identical inputs map to the same key, so a hit is a guaranteed-equivalent result.
Action cache
rninja hashes a whole ninja action — inputs, command line, and observed environment — and caches its outputs. That is coarser than a compiler cache and can skip an entire graph edge.
Remote cache
An optional cache shared across machines. rninja streams content-addressed blobs over async-nng so laptops and CI runners reuse each other’s artifacts. Opt-in via RNINJA_REMOTE_URL.
sled
The embedded, crash-safe key-value store that backs rninja’s local cache index, so an interrupted build cannot corrupt the store.
tokio
The async Rust runtime powering rninja’s scheduler. It keeps cores busy on cache misses where stock ninja stalls on single-threaded bookkeeping.
async-nng
The async transport rninja uses for the optional remote cache. One small endpoint can serve blobs to a whole team.
Determinism
A build is deterministic when identical inputs always produce identical outputs. Deterministic actions cache perfectly; non-deterministic outputs (timestamps, random seeds) lower the hit rate.