The split changes what an editor can know.
Zig 0.17 runs a project's build.zig configuration code in a different executable from the maker that handles packages and executes the build graph. The release notes say the maker can stay built when build.zig changes. They also say some commands can skip configuration when a cached graph is reusable.[1]
The resulting configuration is serialized in a compact binary format. Passing --listen=- starts the Build Server Protocol. A connected client can inspect the configured graph, watch step start and completion events, read errors and generated-file records, and request a specific step.[1]
The editor should display the phase it observed, not collapse the route into "build passed."
A cache hit is a claim about inputs.
Zig now lets configuration declare dependencies on file contents, file metadata, directory contents, or directory metadata. If configuration reads state the cache cannot track, the graph can poison the configuration cache. The maker then discards that configuration file instead of reusing it.[1]
This distinction belongs in editor output. "Configuration reused" and "configuration reran because an input changed" are useful facts. "The cache was poisoned" is also useful. A single spinner hides the reason and makes stale-graph bugs harder to diagnose.
The protocol is real, and the integration is unfinished.
The release notes state that the maker/configurer split breaks ZLS build integration in Zig 0.17.0. The Zig and ZLS teams are still working on the protocol. Zig issue 36497 describes a planned monitor process that would own terminal output, progress, file watching, debouncing, and build summaries while the maker stays focused on the graph and execution.[2]
That is a design direction, not a finished compatibility promise. A tool can speak the protocol and still need version-specific handling, a tested target, and a fallback for missing graph data.
Incremental speed has a target boundary.
Zig says most projects targeting x86_64-linux can now use zig build -fincremental --watch. The release also says the new ELF linker is still disabled by default outside that path and lists known regressions, including a response-file break caused by the maker/configurer split.[1]
Zig core team member Matthew Lugg explains how the compiler tracks changed source regions and invalidates dependent analysis units. His July demonstration rebuilt one application in 50 to 70 milliseconds after a roughly five-second initial build. That is one demonstrated project on one machine, not a general latency guarantee.[3]
Adopt the route, not the headline.
- Pin Zig 0.17.0 and the target tuple in the run record.
- Record whether configuration ran, reused a graph, or rejected reuse.
- Save the requested build step and the graph revision the client inspected.
- Keep generated files, diagnostics, test output, and known-regression checks beside the result.
- Test the editor integration separately from the command-line build.
We downloaded the official x86_64-linux archive, matched its SHA-256 value to the official download index, ran zig version, initialized a fresh project, and completed zig build test. That smoke check proves the inspected archive can create and test its starter project here. It does not test the Build Server Protocol, ZLS, cache poisoning, incremental latency, or a production repository.[4]