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.