| # Feature comparison with Ninja |
| |
| n2 is intended to be able to build any project that Ninja can load. Here is a |
| comparison of things n2 does worse and better than Ninja. |
| |
| ## Improvements |
| |
| Here are some things n2 improves over Ninja: |
| |
| - Builds are more incremental: n2 starts running tasks as soon as an out of date |
| one is found, rather than gathering all the out of date tasks before executing |
| as Ninja does. |
| - Fancier status output, modeled after Bazel. |
| [Here's a small demo](https://asciinema.org/a/F2E7a6nX4feoSSWVI4oFAm21T). |
| - `-d trace` generates a performance trace that can be visualized by Chrome's |
| `about:tracing` or alternatives (speedscope, perfetto). |
| |
| ## Missing |
| |
| - Windows is incomplete. |
| - Ninja has special handling of backslashed paths that |
| [n2 doesn't yet follow](https://github.com/evmar/n2/issues/42). |
| - Dynamic dependencies. |
| - `console` pool. n2 currently just treats `console` as an ordinary pool of |
| depth 1, and only shows console output after the task completes. In practice |
| this means commands that print progress when run currently show nothing until |
| they're complete. |
| - `subninja` is only partially implemented. |
| |
| ### Missing flags |
| |
| - `-l`, load average throttling |
| - `-n`, dry run |
| |
| #### Missing subcommands |
| |
| Most of `-d` (debugging), `-t` (tools). |
| |
| No `-w` (warnings). |