Ninja is a small build system with a focus on speed. It differs from other build systems in two major respects: it is designed to have its input files generated by a higher-level build system, and it is designed to run builds as fast as possible.

Why yet another build system?

Where other build systems are high-level languages Ninja aims to be an assembler.

Ninja build files are human-readable but not especially convenient to write by hand. (See the generated build file used to build Ninja itself.) These constrained build files allow Ninja to evaluate incremental builds quickly.

Should you use Ninja?

Ninja's low-level approach makes it perfect for embedding into more featureful build systems; see a list of existing tools. Ninja is used to build Google Chrome, parts of Android, LLVM, and can be used in many other projects due to CMake's Ninja backend.

See the manual for more: philosophical background, whether and how you can use Ninja for your project, platform support, and details about the language semantics.

What's new

The last Ninja release is v1.12.1, released 11 May 2024. Read the release notes.

Getting Ninja

You can download the Ninja binary or find it in your system's package manager.

Or, build from source:

$ git clone git:// && cd ninja
$ git checkout release
$ cat