Ninja

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. For the Chrome browser on Linux (the motivating project behind Ninja), Ninja is under a second for a no-op build where the equivalent Makefiles took over ten seconds.

Ninja's low-level approach makes it perfect for embedding into more featureful build systems. Via gyp it can build Chrome and v8 and node.js etc.; via CMake it can build LLVM and KDE and Blender etc.

See the extensive 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.4.0, released 12 September 2013. Read the release notes.

Getting Ninja

$ git clone git://github.com/martine/ninja.git && cd ninja
$ git checkout release
$ cat README

Or install from automated systems (warning: frequently out of date):

Arch
See AUR.
Debian/Ubuntu
$ apt-get install ninja-build
Gentoo
$ emerge dev-util/ninja
MacPorts
$ port install ninja
HomeBrew
$ brew install ninja
FreeBSD
$ pkg install ninja