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.24.2 (2026-11-03)

SQLite-based tarball cache

The cache of unpacked tarballs used by builtins.fetchTarball, builtins.fetchTree and tarball-based flake inputs (such as github:NixOS/nixpkgs) is now a SQLite database, ~/.cache/nix/tarball-cache-detsys-v1.sqlite, instead of a bare Git repository. The Git cache’s lookups and locking were a bottleneck for multi-threaded evaluation: in our flake regression tests with eval-cores = 24, the total evaluation time dropped by 51%. Single-threaded evaluation is 5 to 9% faster.

Flake lock files and NAR hashes are unaffected. Inputs fetched by earlier versions will be fetched again once. The old ~/.cache/nix/tarball-cache-v2 directory is no longer used and can be deleted to reclaim disk space.

PR: DeterminateSystems/nix-src#646

Reduced stack usage in the evaluator

Nix now uses much less stack space during evaluation, so deeply recursive Nix expressions can go roughly twice as deep before overflowing the stack. For example, a chain of function calls like go = i: 1 + go (i - 1) can now reach a depth of about 57,500 on a 60 MiB stack, up from about 29,700. The hottest recursive functions in the evaluator used most of their stack frames for error handling, debugger support and other paths that don’t run on a normal call; those paths have been moved out of line, shrinking these stack frames by a factor of 3 to 4.

PR: DeterminateSystems/nix-src#752

Performance improvements

  • When use-cgroups is enabled, builders are now created directly in their cgroup instead of being moved into it afterwards, which blocked the daemon for up to a few milliseconds per build. Building 10,000 trivial derivations went from 164.5s to 127.9s. PRs: DeterminateSystems/nix-src#738, DeterminateSystems/nix-src#743
  • On macOS, starting child processes is faster when the file descriptor limit is high, since Nix now asks the system for the list of open file descriptors instead of trying to close every possible one. PR: DeterminateSystems/nix-src#753, cherry-picked from NixOS/nix#16717 by @xokdvium

Bug fixes

  • Progress indicators (such as the progress bar and nix top) no longer show derivations as being built while they’re still waiting for a build slot or a build user; the “building” activity now starts when the build actually starts, as it did before 3.19.0. PR: DeterminateSystems/nix-src#745
  • Pressing Ctrl-C during a build no longer prints a building <drv>... line for every running build before error: interrupted by the user. PR: DeterminateSystems/nix-src#744
  • nix top now shows the CPU usage of builds and processes that started since the previous update, so short-lived processes such as compiler invocations no longer have an empty %CPU column. PR: DeterminateSystems/nix-src#736
  • Fix nix copy to a local store crashing when renaming a directory into the store fails with EXDEV, which can happen on overlayfs even within a single filesystem; Nix now copies the directory instead. Other rename failures are now reported as errors instead of being silently ignored. PR: DeterminateSystems/nix-src#751
  • Errors while reading a directory are no longer ignored, which could make Nix continue with a truncated listing. For example, the garbage collector could miss GC roots. PR: DeterminateSystems/nix-src#754
  • Stack overflows in the evaluator now reliably produce a crash report. Previously, a stack overflow during parallel evaluation could kill Nix without an error message, and crash dumps for stack overflows on the main thread were often too large to be accepted by Sentry. PR: DeterminateSystems/nix-src#755
  • Fix Nix aborting with an assertion failure if ca-derivations is enabled after the local store has been opened, e.g. by a flake’s nixConfig with --accept-flake-config. Nix now prints an error asking you to enable ca-derivations in nix.conf or on the command line instead. PR: DeterminateSystems/nix-src#733
  • With ca-derivations enabled, querying realisations from an ssh:// store (e.g. nix build --eval-store <local> --store ssh://..., or an ssh:// substituter) no longer terminates Nix with operation 'queryRealisation' is not supported by store. PR: DeterminateSystems/nix-src#747
  • Fix a callback called twice assertion failure when a sandboxed build with ca-derivations queries a realisation that it’s not allowed to access. PR: DeterminateSystems/nix-src#748, cherry-picked from NixOS/nix#16176 by @lisanna-dettwyler
  • User and group database lookups are now thread-safe, avoiding corrupted results when several threads acquire build users at the same time. PR: DeterminateSystems/nix-src#741

Miscellaneous changes

Full Changelog: v3.24.1…v3.24.2