v3.23.0
Pre-releaseRelease 3.23.0 (2026-10-01)
- Based on upstream Nix 2.35.2.
OpenTelemetry Support
Determinate Nix now has support for sending telemetry to OpenTelemetry collectors. It emits traces for many Nix activities, such as building and substituting. It propagates trace context across Nix daemon calls, ssh-ng:// remote store calls, remote builds, and binary cache requests. For more information, see our documentation.
PR: DeterminateSystems/nix-src#615
nix flake bake
Given a flake, the new experimental command nix flake bake generates a new flake in which all derivations have been pre-evaluated, i.e. replaced by pseudo-derivations consisting of pre-computed output paths. These output paths must be available in a binary cache.
For example, the following command "bakes" the patchelf flake:
# nix flake bake github:NixOS/patchelf --dest-dir /tmp/patchelf-bakedThe resulting flake consists of a JSON file listing all the output paths and other metadata of flake outputs, along with a flake.nix shim:
# ls -l /tmp/patchelf-baked/
total 9
-rw-r--r-- 1 eelco users 6097 Oct 1 18:58 flake.nix
-rw-r--r-- 1 eelco users 7532 Oct 1 18:58 outputs.jsonThis baked flake can be used normally by commands like nix build and nix run:
# nix run /tmp/patchelf-baked -- --version
patchelf 0.19.2Note: this requires the baked-derivations experimental feature both in the client and the daemon.
PR: DeterminateSystems/nix-src#450
builtins.wasm Improvements
We've made API improvements to builtins.wasm to allow Wasm modules to read files and access attribute sets more efficiently. We've also enabled the compilation cache, avoiding recompilation of the same Wasm module across multiple Nix invocations.
PRs: DeterminateSystems/nix-src#633, DeterminateSystems/nix-src#634, DeterminateSystems/nix-src#647
Parallel Evaluation Improvements
Parallel evaluation now uses fibers instead of threads. This allows better CPU utilization: Nix only starts eval-cores threads, and whenever a fiber is blocked waiting for a value to be finished by another thread, its thread can switch to another fiber that is ready to run.
PRs: DeterminateSystems/nix-src#597, DeterminateSystems/nix-src#635, DeterminateSystems/nix-src#636, DeterminateSystems/nix-src#641, DeterminateSystems/nix-src#644
New Experimental Build System
Nix can now be built with Nix as the C++ build system instead of Meson/Ninja, providing an incremental build, ccache-like caching, and substitution and remote building of individual compilation units. It does not require a development shell or build directory that can get out of sync. It relies on builtins.wasm to compute the C++ dependency graph at evaluation time.
To try it out:
# nix build ./packaging/nix-makePRs: DeterminateSystems/nix-src#632, DeterminateSystems/nix-src#640, DeterminateSystems/nix-src#642
Async Path Writer
The asynchronous path writer now skips paths that are already valid (DeterminateSystems/nix-src#637), and also handles paths written by builtins.toFile (DeterminateSystems/nix-src#638). Together these improved the runtime of nix flake show on a flake consisting of three NixOS configurations from 12.8s to 8.5s.
Miscellaneous Changes
- Rename CLAUDE.md -> AGENTS.md by @edolstra in DeterminateSystems/nix-src#639
- addErrorContext: Don't force the message inside the exception handler by @edolstra in DeterminateSystems/nix-src#643
Full Changelog: v3.22.5...v3.23.0