Release 3.23.1 (2026-10-05)
- Based on upstream Nix 2.35.2.
Build cgroups expose memory and I/O statistics
When the use-cgroups setting is enabled, the Nix daemon now enables the cpu, memory, io and pids controllers in its cgroup, so per-build cgroups expose memory.peak, io.stat and memory.events instead of only cpu.stat. This is useful for CI systems that want to measure the resource usage of builds. It requires the controllers to be delegated to the daemon’s cgroup (e.g. via Delegate=yes in the systemd unit). This change was backported from upstream Nix.
PR: DeterminateSystems/nix-src#655, cherry-picked from NixOS/nix#16024 by @DerDennisOP
nix profile history improvements
nix profile history previously reported “No changes” when a package was replaced by a different store path with the same version (e.g. after a rebuild due to a source or dependency change). It now prints a changed line for that case.
It also has a new flag --show-source that shows the locked flake reference of each added, removed, upgraded or changed package:
# nix profile history --show-source
...
Version 59 (2026-10-05) <- 58:
github:NixOS/nixpkgs#legacyPackages.x86_64-linux.hello: 2.12.2 changed (github:NixOS/nixpkgs/6fd8c75 -> github:NixOS/nixpkgs/ffc5e35)
PR: DeterminateSystems/nix-src#665
Cheap and non-blocking purging of the narinfo disk cache
On busy builders, the narinfo disk cache (~/.cache/nix/binary-cache-v*.sqlite) can grow to millions of entries. The daily purge of expired entries was a full table scan that could hold the SQLite write lock for minutes, blocking every concurrent nix copy. The purge now uses an index, runs in small chunks so that other processes wait at most a few hundred milliseconds, resumes where it left off if it’s interrupted, and is performed by only one process at a time.
PR: DeterminateSystems/nix-src#667
Bug fixes
- Fix a garbage collector segfault when substituting store paths during evaluation (e.g.
nix flake checkwith import-from-derivation and no daemon) by @edolstra in DeterminateSystems/nix-src#662 - Fix a
Too many retries in GC_allocobjabort innix flake showon large flakes by disabling bdwgc black-listing, which also speeds up evaluation by @edolstra in DeterminateSystems/nix-src#663 - Don’t crash if printing completions fails during unwinding by @edolstra in DeterminateSystems/nix-src#651
- Don’t treat running out of memory as a crash (Nix now exits with status 12 instead of aborting) by @edolstra in DeterminateSystems/nix-src#653
- Fix a stack overflow when parsing very long flake references by @edolstra in DeterminateSystems/nix-src#652
- Fix a segfault when multiple evaluator threads call
builtins.getFlakeon the same flake at the same time by @edolstra in DeterminateSystems/nix-src#657 - Fix a crash in the daemon when the build hook is killed while the worker is being interrupted by @edolstra in DeterminateSystems/nix-src#658
- Fix a crash in
nix flake check --keep-goingwhen a check fails by @edolstra in DeterminateSystems/nix-src#660 - Fix a possible
SIGBUSin the daemon due to the ZFS-shmworkaround dropping SQLite locks by @edolstra in DeterminateSystems/nix-src#664 - Sync with upstream 2.35-maintenance (fixes the store mtime in installer tarballs, adds
x86_64-darwinas an extra platform on Apple silicon systems with Rosetta 2, and makesnix flake prefetch-inputsskip relative path inputs) by @edolstra in DeterminateSystems/nix-src#666
Performance improvements
- Don’t
fsyncthe active build info file at the start of every build by @Jesssullivan in DeterminateSystems/nix-src#650
Miscellaneous changes
- Make the
nix pstest more robust by @edolstra in DeterminateSystems/nix-src#654 - packaging/nix-make/flake.lock: Update nix-wasm-module-make by @edolstra in DeterminateSystems/nix-src#656
- Add derivation metadata documentation to the Determinate Nix manual by @lucperkins in DeterminateSystems/nix-src#668
New Contributors
- @Jesssullivan made their first contribution in DeterminateSystems/nix-src#650
Full Changelog: v3.23.0…v3.23.1