6.8 KiB
Release 2.32.0 (2025-10-06)
-
C API:
nix_get_attr_name_byidx,nix_get_attr_byidxtake anix_value *instead ofconst nix_value *#13987In order to accommodate a more optimized internal representation of attribute set merges these functions require a mutable
nix_value *that might be modified on access. This does not break the ABI of these functions. -
C API: Add lazy attribute and list item accessors #14030
The C API now includes lazy accessor functions for retrieving values from lists and attribute sets without forcing evaluation:
nix_get_list_byidx_lazy()- Get a list element without forcing its evaluationnix_get_attr_byname_lazy()- Get an attribute value by name without forcing evaluationnix_get_attr_byidx_lazy()- Get an attribute by index without forcing evaluation
These functions are useful when forwarding unevaluated sub-values to other lists, attribute sets, or function calls. They allow more efficient handling of Nix values by deferring evaluation until actually needed.
Additionally, bounds checking has been improved for all
_byidxfunctions to properly validate indices before access, preventing potential out-of-bounds errors.The documentation for
NIX_ERR_KEYerror handling has also been clarified to specify when this error code is returned. -
Substituted flake inputs are no longer re-copied to the store #14041
Since 2.25, Nix would fail to store a cache entry for substituted flake inputs, which in turn would cause them to be re-copied to the store on initial evaluation. Caching these inputs results in a near doubling of a performance in some cases — especially on I/O-bound machines and when using commands that fetch many inputs, like
nix flake archive/prefetch-inputs -
Derivation JSON format now uses store path basenames (no store dir) only #13570 #13980
Experience with many JSON frameworks (e.g. nlohmann/json in C++, Serde in Rust, and Aeson in Haskell), has shown that the use of the store dir in JSON formats is an impediment to systematic JSON formats, because it requires the serializer/deserializer to take an extra paramater (the store dir).
We ultimately want to rectify this issue with all (non-stable, able to be changed) JSON formats. To start with, we are changing the JSON format for derivations because the
nix derivationcommands are --- in addition to being formally unstable --- less widely used than other unstable commands.See the documentation on the JSON format for derivations for further details.
-
Removed support for daemons and clients older than Nix 2.0 #13951
We have dropped support in the daemon worker protocol for daemons and clients that don't speak at least version 18 of the protocol. This first Nix release that supports this version is Nix 2.0, released in February 2018.
-
nix flake checknow skips derivations that can be substituted #13574Previously,
nix flake checkwould evaluate and build/substitute all derivations. Now, it will skip downloading derivations that can be substituted. This can drastically decrease the time invocations take in environments where checks may already be cached (like in CI). -
HTTP binary caches now support transparent compression for metadata
HTTP binary cache stores can now compress
.narinfo,.ls, and build log files before uploading them, reducing bandwidth usage and storage requirements. The compression is applied transparently using theContent-Encodingheader, allowing compatible clients to automatically decompress the files.Three new configuration options control this behavior:
narinfo-compression: Compression method for.narinfofilesls-compression: Compression method for.lsfileslog-compression: Compression method for build logs inlog/directory
Example usage:
nix copy --to 'http://cache.example.com?narinfo-compression=gzip&ls-compression=gzip' /nix/store/... nix store copy-log --to 'http://cache.example.com?log-compression=br' /nix/store/... -
Temporary build directories no longer include derivation names #13839
Temporary build directories created during derivation builds no longer include the derivation name in their path to avoid build failures when the derivation name is too long. This change ensures predictable prefix lengths for build directories under
/nix/var/nix/builds.
Contributors
This release was made possible by the following 32 contributors:
- Farid Zakaria (@fzakaria)
- dram (@dramforever)
- Ephraim Siegfried (@EphraimSiegfried)
- Robert Hensing (@roberth)
- Taeer Bar-Yam (@Radvendii)
- Emily (@emilazy)
- Jens Petersen (@juhp)
- Bernardo Meurer (@lovesegfault)
- Jörg Thalheim (@Mic92)
- Leandro Emmanuel Reina Kiperman (@kip93)
- Marie (@NyCodeGHG)
- Ethan Evans (@ethanavatar)
- Yaroslav Bolyukin (@CertainLach)
- Matej Urbas (@urbas)
- Jami Kettunen (@JamiKettunen)
- Clayton (@netadr)
- Grégory Marti (@gmarti)
- Eelco Dolstra (@edolstra)
- rszyma (@rszyma)
- Philip Wilk (@philipwilk)
- John Ericson (@Ericson2314)
- Tom Westerhout (@twesterhout)
- Tristan Ross (@RossComputerGuy)
- Sergei Zimmerman (@xokdvium)
- Jean-François Roche (@jfroche)
- Seth Flynn (@getchoo)
- éclairevoyant (@eclairevoyant)
- Glen Huang (@hgl)
- osman - オスマン (@osbm)
- David McFarland (@corngood)
- Cole Helbling (@cole-h)
- Sinan Mohd (@sinanmohd)
- Philipp Otterbein