Skip to content

v3.23.0

Pre-release
Pre-release

Choose a tag to compare

@detsys-spaghetti detsys-spaghetti released this 01 Oct 18:24
8bb6b35

Release 3.23.0 (2026-10-01)

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-baked

The 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.json

This baked flake can be used normally by commands like nix build and nix run:

# nix run /tmp/patchelf-baked -- --version
patchelf 0.19.2

Note: 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-make

PRs: 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

Full Changelog: v3.22.5...v3.23.0