Netsuke turns a YAML-plus-Jinja Netsukefile into a static Ninja plan. Describe the graph once; let Ninja do the running.
Describe what you want to build, not how. Netsuke figures out the steps, ensuring reproducibility across machines.
Netsuke compiles your graph to Ninja, leveraging its blazing fast incremental builds and parallelism.
Structured builds with explicit dependencies are safer by default. Shell escaping and YAML-first validation reduce common error classes.
One tool, many workflows. Build C++, Rust, Python, documentation, and assets in a single unified graph.
The Netsukefile is plain YAML with controlled Jinja expansion. Structure stays declarative; the dynamic parts stay visible.
foreach and when for explicit expansion and filtering
# Reusable commands live in rules
netsuke_version: "1.0.0"
vars:
cc: "clang"
rules:
- name: "compile"
command: "{{ cc }} -c {{ ins }} -o {{ outs }}"
targets:
- name: "build/main.o"
rule: "compile"
sources: "src/main.c"
- name: "docs/manual.html"
command: "pandoc {{ ins }} -o {{ outs }}"
sources: "README.md"
Load manifest files from disk
Validate the manifest as YAML
Process templates & variables
Deserialize and render string fields
Check cycles & missing deps
Execute via Ninja backend
Netsuke respects your time. Output is minimal when things go right, and helpful when they go wrong.
Comparing Netsuke to traditional Makefiles.
| Feature | Make / Shell Scripts | Netsuke |
|---|---|---|
| Configuration | Imperative, shell-dependent | Declarative, structured |
| Parallelism | Manual flags (-j), flaky | Automatic, max core usage |
| Clean Builds | Often required manually | Correct by default |
| Learning Curve | Steep (obscure syntax) | Gentle (Python-like) |
| Cross-platform | Difficult (Unix vs Windows) | First-class citizen |