I want a better action graph serialization

The problem
A new blog post argues that build systems need a cleaner, simpler way to serialize their "action graph" — the machine-generated description of all build steps that a configure step emits (think the Makefiles CMake writes, or Ninja's serialized graph). The author frames this as a practical fix for a familiar pain: builds that go weird and then require poking until they behave. It’s part 3 of a 4-part series about build systems; the next installment will look at a better build executor.
Who uses an action graph?
Not every build tool writes its graph to disk. Bazel and Buck2 keep the graph in a persistent server; Nix takes a different tack entirely, rebuilding via input-addressed derivations and essentially forcing reconfigure on changes. It has been reported that some Nix maintainers have explored caching parts of the configure step to speed things up. Conversely, tools such as CMake, Meson and GN do serialize their graphs to files, which buys faster startup and easier local querying. It has also been reported that Google’s Blaze has allegedly started serializing parts of its graph to trim memory and startup costs.
Design goals
The post sketches what a better format would look like: simple and unambiguous to load, minimal filesystem touching during load, and flexible enough to represent "weird" edges — dynamic dependencies, compiler-generated depfiles, and the like. The point is pragmatic: make files easy for fast executors to read and for users to adopt incrementally, so a team can roll improved behavior into existing toolchains without a forklift upgrade. Who doesn’t want faster, less finicky rebuilds?
Why it matters
This is less academic than it sounds. Faster graph loads and clearer semantics mean quicker CI cycles, fewer midnight pings of "my build is weird," and better tooling for finding incorrect dependency edges. The emotional crux is simple: builds should be boring and reliable. If a serialization format can nudge us in that direction, it’s worth a closer look.
Comments