Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Release 3.23.1 (2026-10-05)

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 check with import-from-derivation and no daemon) by @edolstra in DeterminateSystems/nix-src#662
  • Fix a Too many retries in GC_allocobj abort in nix flake show on 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.getFlake on 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-going when a check fails by @edolstra in DeterminateSystems/nix-src#660
  • Fix a possible SIGBUS in the daemon due to the ZFS -shm workaround 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-darwin as an extra platform on Apple silicon systems with Rosetta 2, and makes nix flake prefetch-inputs skip relative path inputs) by @edolstra in DeterminateSystems/nix-src#666

Performance improvements

Miscellaneous changes

New Contributors

Full Changelog: v3.23.0…v3.23.1