{"article":{"slug":"announcing-lix-2-96-bingsu","title":"Announcing Lix 2.96 “Bingsu”","subtitle":null,"summary":"The Lix team’s seventh major release focuses on security, debugger support, quality-of-life fixes, and continued work toward Cap’n Proto RPC and Rust support in the Nix-compatible package manager.","content_type":"changelog","language":"en","canonical_url":"https://lix.systems/blog/2026-10-13-lix-2.96-release/","author":{"name":null,"url":null,"person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"Lix","url":"https://lix.systems/","listing_slug":null,"listing":null},"topics":[{"name":"Open Source","slug":"open-source","url":"https://listedarticles.com/topics/open-source"},{"name":"Infrastructure","slug":"infrastructure","url":"https://listedarticles.com/topics/infrastructure"},{"name":"Developer Tools","slug":"developer-tools","url":"https://listedarticles.com/topics/developer-tools"}],"about_listings":[],"cover_image_url":null,"license":"all-rights-reserved","word_count":1792,"reading_minutes":8,"published_at":"2026-10-13T00:00:00.000Z","added_at":"2026-10-14T05:17:40.976Z","updated_at":"2026-10-14T05:17:40.976Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/announcing-lix-2-96-bingsu","markdown_url":"https://listedarticles.com/articles/announcing-lix-2-96-bingsu.md","example":false,"citation":"Lix. \"Announcing Lix 2.96 “Bingsu”.\" 13 Oct 2026. https://lix.systems/blog/2026-10-13-lix-2.96-release/ (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://lix.systems/blog/2026-10-13-lix-2.96-release/"},"body_markdown":"We at the Lix team are proud to announce our seventh major release, version 2.96 “Bingsu”.\n\nThis release focuses on security, debugger support, quality-of-life improvements, and continues the work towards both the new [Cap’n’Proto RPC](https://capnproto.org/) protocol and Rust support.\n\n[Bingsu](https://en.wikipedia.org/wiki/Bingsu) is a milk-based Korean shaved ice dessert with sweet toppings that may include chopped fruit, condensed milk, fruit syrup, tteok, and red beans.\n\n\nLix is a Nix implementation focused on reliability, predictability, friendliness, developed by a community of people from around the world. We have long term plans to incrementally evolve Nix to work in more places, to make it more reliable and secure, and to update the language and semantics to correct past mistakes and reduce errors, all the while providing an amazing tooling experience.\n\n## Upgrading from CppNix or previous Lix versions\n\n**WARNING**: We do not recommend to use `nix upgrade-nix`, please follow the instructions in [https://lix.systems/install/](https://lix.systems/install/) with the Lix’s upgrade shell script.\n\nThe upgrade procedure depends on how you installed Lix or CppNix, and is fully described in the [Lix installation guide](https://lix.systems/install/).\n\nIf you are using Lix from nixpkgs on NixOS, you just need to upgrade your nixpkgs once the upgrade pull request has passed through the build farm into your channel; no other action is required.\n\nIf you want to help us test the next version of Lix, consider running `main` by following the [beta guide](https://wiki.lix.systems/books/lix-contributors/page/lix-beta-guide).\n\n## Changes\n\nLix 2.96 builds on the work of previous releases to improve the daemon, the protocols spoken with the daemon (both on a single machine and the ones used for remote builds), and brings many much-needed improvements to the debugger infrastructure.\n\nHere’s a short list of the most exciting changes in Lix 2.96. This list is not as exhaustive as the [full release notes](https://docs.lix.systems/manual/lix/stable/release-notes/rl-2.96.html).\n\n### REPL and debugger support\n\nThanks to the tireless work of [blokyk](https://git.lix.systems/blokyk) the REPL and debugger are much improved in Lix 2.96. The debugger is now more stable, navigating within the debugger is much easier, and the information printed by the debugger is more readable.\n\n[eldritch horrors](https://git.lix.systems/pennae) have also switched the REPL backend from editline to [rustyline](https://github.com/kkawakam/rustyline), finally bringing proper UTF-8 support to the REPL.\n\n### News from RPC\n\nThe experimental RPC protocol is now shipping under the `rpc-sockets` experimental feature. As one may guess this is still *highly experimental* and must be enabled not only with the experimental feature flag in your Lix config, but also requires system setup that is not yet done by the NixOS module. You can find an example configuration in the [NixOS module in the Lix repo](https://git.lix.systems/lix-project/lix/commit/103b91b0c77c662c50070f2b4700ffc0df12cbee#diff-c6352f13d264fb180d5409d66db94d50264ed9dd).\n\nIn future releases we plan to stabilize the RPC protocol and remove support for the legacy protocols we’ve been using to date to allow further evolution of Lix.\n\n### `ssh://` store URIs are now deprecated\n\nTo enable further RPC work and resolve some long-standing security inconsistencies we must remove `ssh://` store URIs. Lix 2.96 **deprecates `ssh://` store URIs**, but retains support for them without deprecation warnings. `ssh://` store URI support will be removed in Lix 2.97, `ssh-ng://` URIs will remain supported.\n\nIf you are using `ssh://` store URIs because `ssh-ng://` is missing features you need please get in touch so we can figure something out together. Note that `ssh-ng` has stricter security checks than `ssh` and no longer allows untrusted users to copy unsigned outputs to remote stores, *this is intentional*.\n\n### Breaking changes\n\nOnce again Lix must break sharp corners to make improvements possible and excise surprising behavior in user code.\n\n- `flake.nix` validation no longer relies on poorly documented triviality checks. Instead Lix now has only one rule for`flake.nix` :**no function calls are allowed outside of `outputs`.** This means that Lix now accepts`let` blocks and string interpolation in flake`inputs` , among other things. We consider this a breaking change because other Nix implementations may no longer be able to evaluate Flakes that were written using Lix.Many thanks to [piegames](https://git.lix.systems/piegames) ,[Qyriad](https://git.lix.systems/Qyriad) and[eldritch horrors](https://git.lix.systems/pennae) .\n- The `floor` and`ceil` builtins now throw errors if their operation would have resulted in precision loss during the conversion from floating point to integers. Precision loss does not sound dramatic, but with numbers of sufficient magnitude this could result in positive floats being converted to negative integers.Many thanks to [jade](https://git.lix.systems/jade) ,[NaN-git](https://github.com/NaN-git) and[rootile](https://git.lix.systems/rootile) .\n- Many nix3 CLI commands no longer build their arguments. This surprising behavior was commonly seen when `nix store delete` was called with a path that was not present in the store, causing the path to be downloaded just so that it could be deleted.Many thanks to [eldritch horrors](https://git.lix.systems/pennae) .\n- Shadowing internal files via Nix search paths is now considered an error. Lix 2.95 already deprecated overriding the `nix` search path entry due to surprising effects that could have, Lix 2.96 now considers this an error if not explicitly configured otherwise.Many thanks to [thubrecht](https://git.lix.systems/tom-hubrecht) ,[jade](https://git.lix.systems/jade) and[eldritch horrors](https://git.lix.systems/pennae) .\n\n## New features\n\n- Nested arguments can be set with `--arg` and`--argstr` .Previously Lix would turn `--arg foo.bar.baz 1` into the set`{ \"foo.bar.baz\" = 1; }` , now it turns it into`{ foo.bar.baz = 1; }` . Attribute set merging rules are applied to these sets, making it much easier to use function that expect sets as arguments (such as nixpkgs, which expects a`config` set). The old behavior can be recovered by quoting the name, e.g.`--arg '\"foo.bar.baz\" 1'` .Many thanks to [ma27](https://git.lix.systems/ma27) .\n- Inputs are now only fetched by one process at a time. This can be significant in CI situations where many processes may attempt to download the same input set concurrently. Previously all of them would download the set, now only one of them does and signals the others to wait for it to finish. Many thanks to [lheckemann](https://git.lix.systems/lheckemann) .\n- Use [mimalloc](https://github.com/microsoft/mimalloc) for faster evaluation. We’ve seen 5-12% eval time improvements due to thisMany thanks to [getchoo](https://git.lix.systems/getchoo) and[lovesegfault](https://github.com/lovesegfault) .\n- `nix doctor` has been extended greatly, including general system information and remote builder configuration in its report. It can now also automatically connect to configured remote builders and check their state as well.Many thanks to [rootile](https://git.lix.systems/rootile) and[raito](https://git.lix.systems/raito) .\n- `ssh-ng` store URIs are now considered stable. The long-awaited feature parity between`ssh` and`ssh-ng` URIs has arrived, although only Lix 2.96 and newer will be able to take full advantage of this. Connecting to or from older Lixes or other Nix implementations will not see feature parity and silently fall back to the previous behavior.Many thanks to [eldritch horrors](https://git.lix.systems/pennae) .\n- Channel references now support `zst` -compressed tarballs. This can greatly improve unpacking speed when using channels.Many thanks to [raito](https://git.lix.systems/raito) and[eldritch horrors](https://git.lix.systems/pennae) .\n\n### Improvements\n\n- The `ssl-cert-file` and`netrc-file` settings now report errors when set to files that don’t exist instead of being silently ignored.Many thanks to [Astreaprtcl](https://git.lix.systems/astreaprtcl) .\n- Moving between stack frames in the debugger is now easier using offset instead of absolute numbers. While moving up or down some number of frames previously required remembering the frame number you were on you can now directly supply offsets, using `:st +l` to go from frame`n` to`n+k` and`:st -k` to go from`n` to`n-k` .Many thanks to [blokyk](https://git.lix.systems/blokyk) .\n- `addErrorContext` frames are always printed in backtraces now, even without`--show-trace` . This makes explicit report locations, for example in the NixOS module system, much more useful.Many thanks to [blokyk](https://git.lix.systems/blokyk) .\n\n### Fixes\n\n- `nix-copy-closure --include-outputs` now actually works.Many thanks to [rkjnsn](https://git.lix.systems/rkjnsn) .\n- Hash mismatch diagnostics now work with `structuredAttrs` . This fixes hash mismatch diagnostics with fetchers from modern nixpkgs.Many thanks to [keysmashes](https://github.com/keysmashes) .\n- Subdaemons receive overridden settings from their parent daemon rather than using the system-wide configuration. This was broken by the switch to explicitly launched subdaemons in 2.95, making it impossible to configure subdaemons by providing command line arguments to the main daemon. Many thanks to [raito](https://git.lix.systems/raito) .\n\n### Miscellanea\n\n- `ssh` and`ssh-ng` store URIs no longer honor the`max-connections` parameter. This parameter complicated the code immensely for no benefit to the average user and had many sharp corners when set explicitly.Many thanks to [eldritch horrors](https://git.lix.systems/pennae) .\n- The `daemon-trust-override` experimental feature has been removed. It can still be emulated by e.g. setting the`NIX_CONFIG` environment variable appropriately.Many thanks to [eldritch horrors](https://git.lix.systems/pennae) .\n\n### And so much more\n\nMany more changes have gone into Lix 2.96, most of them internal. We hope to ship a stable RPC-based daemon in one of the upcoming releases, including remote build support using this new protocol.\n\n## What is planned for the future?\n\n### Lix 2.96.1\n\nWe are releasing 2.96 together with security releases on stable branches. A few things we wanted to finish for 2.96 have been delayed somewhat, and we expect to release 2.96.1 with a few more improvements soon:\n\n- proper `--keep-going` support when using`--store ssh-ng://...` , not just when using`ssh-ng` remotes as remote builders\n- SHA256 support for Git fetchers for both Flakes and other users\n- better diagnostics on MacOS for garbage collection failures caused by TCC permissions\n- `.narinfo` cache soundness improvements to enable key rollovers for binary caches\n- allow pass more settings to the daemon and remote builders, e.g. `log-lines`\n\n### News from Rust integration\n\nRust integration has moved along apace, and it is now possible to write significant portions of new features without touching *too much* C++ code. We’ve decided to use [zngur](https://github.com/hkalbasi/zngur/) for interop due to its great flexibility and active maintenance, and we’ve already ported a number of features to Rust like this. The REPL is now backed by Rust, as is remote builder configuration and much of the hash conversion code.\n\n## Want to help Lix? Consider donating to Lix!\n\nFollowing Lix integration in AFNix, Lix now has [an Open Collective](https://opencollective.com/lix-project) and can receive donations.\n\nWe run infrastructure across x86_64-linux, aarch64-linux, and aarch64-darwin. Some of it is in-kind and sponsored. Current costs are around 100€/month.\n\nIf you value self-hosting and benefit from Lix, please consider donating. Every contribution helps sustain the project.\n\n## Credits\n\nThanks, as always, to the following groups:\n\n- The large community who beta tested the upcoming release by running `main` in production since the 2.95 branch-off. We really appreciate having immediate feedback on our work and the trust of running main alongside us means a lot to us. We know we tested the patience of some of you, we thank you for that.If you want to run Lix main yourself, see [the beta guide](https://wiki.lix.systems/books/lix-contributors/page/lix-beta-guide) for details.\n- Everyone who contributed by filing bugs and giving us feedback on Matrix.\n- All the first time contributors who made their first contributions to a Nix implementation in Lix. We are eternally grateful to everyone who helped us out on the numerous important but tedious issues.\n- All the contributors who have helped us with the backlog of bugs.\n- The CppNix contributors and CppNix team, without whom we would not have this software, and who wrote some of the improvements ported into this release.\n\nOnwards and upwards for the next release. We look forward to continuing to work together with everyone to build a better foundation for the evolution of Nix.","body_html":"<p>We at the Lix team are proud to announce our seventh major release, version 2.96 “Bingsu”.</p>\n<p>This release focuses on security, debugger support, quality-of-life improvements, and continues the work towards both the new <a href=\"https://capnproto.org/\" rel=\"nofollow ugc noopener\">Cap’n’Proto RPC</a> protocol and Rust support.</p>\n<p><a href=\"https://en.wikipedia.org/wiki/Bingsu\" rel=\"nofollow ugc noopener\">Bingsu</a> is a milk-based Korean shaved ice dessert with sweet toppings that may include chopped fruit, condensed milk, fruit syrup, tteok, and red beans.</p>\n<p>Lix is a Nix implementation focused on reliability, predictability, friendliness, developed by a community of people from around the world. We have long term plans to incrementally evolve Nix to work in more places, to make it more reliable and secure, and to update the language and semantics to correct past mistakes and reduce errors, all the while providing an amazing tooling experience.</p>\n<h2 id=\"upgrading-from-cppnix-or-previous-lix-versions\">Upgrading from CppNix or previous Lix versions</h2>\n<p><strong>WARNING</strong>: We do not recommend to use <code>nix upgrade-nix</code>, please follow the instructions in <a href=\"https://lix.systems/install/\" rel=\"nofollow ugc noopener\"><a href=\"https://lix.systems/install/\" rel=\"nofollow ugc noopener\">https://lix.systems/install/</a></a> with the Lix’s upgrade shell script.</p>\n<p>The upgrade procedure depends on how you installed Lix or CppNix, and is fully described in the <a href=\"https://lix.systems/install/\" rel=\"nofollow ugc noopener\">Lix installation guide</a>.</p>\n<p>If you are using Lix from nixpkgs on NixOS, you just need to upgrade your nixpkgs once the upgrade pull request has passed through the build farm into your channel; no other action is required.</p>\n<p>If you want to help us test the next version of Lix, consider running <code>main</code> by following the <a href=\"https://wiki.lix.systems/books/lix-contributors/page/lix-beta-guide\" rel=\"nofollow ugc noopener\">beta guide</a>.</p>\n<h2 id=\"changes\">Changes</h2>\n<p>Lix 2.96 builds on the work of previous releases to improve the daemon, the protocols spoken with the daemon (both on a single machine and the ones used for remote builds), and brings many much-needed improvements to the debugger infrastructure.</p>\n<p>Here’s a short list of the most exciting changes in Lix 2.96. This list is not as exhaustive as the <a href=\"https://docs.lix.systems/manual/lix/stable/release-notes/rl-2.96.html\" rel=\"nofollow ugc noopener\">full release notes</a>.</p>\n<h3 id=\"repl-and-debugger-support\">REPL and debugger support</h3>\n<p>Thanks to the tireless work of <a href=\"https://git.lix.systems/blokyk\" rel=\"nofollow ugc noopener\">blokyk</a> the REPL and debugger are much improved in Lix 2.96. The debugger is now more stable, navigating within the debugger is much easier, and the information printed by the debugger is more readable.</p>\n<p><a href=\"https://git.lix.systems/pennae\" rel=\"nofollow ugc noopener\">eldritch horrors</a> have also switched the REPL backend from editline to <a href=\"https://github.com/kkawakam/rustyline\" rel=\"nofollow ugc noopener\">rustyline</a>, finally bringing proper UTF-8 support to the REPL.</p>\n<h3 id=\"news-from-rpc\">News from RPC</h3>\n<p>The experimental RPC protocol is now shipping under the <code>rpc-sockets</code> experimental feature. As one may guess this is still <em>highly experimental</em> and must be enabled not only with the experimental feature flag in your Lix config, but also requires system setup that is not yet done by the NixOS module. You can find an example configuration in the <a href=\"https://git.lix.systems/lix-project/lix/commit/103b91b0c77c662c50070f2b4700ffc0df12cbee#diff-c6352f13d264fb180d5409d66db94d50264ed9dd\" rel=\"nofollow ugc noopener\">NixOS module in the Lix repo</a>.</p>\n<p>In future releases we plan to stabilize the RPC protocol and remove support for the legacy protocols we’ve been using to date to allow further evolution of Lix.</p>\n<h3 id=\"ssh-store-uris-are-now-deprecated\"><code>ssh://</code> store URIs are now deprecated</h3>\n<p>To enable further RPC work and resolve some long-standing security inconsistencies we must remove <code>ssh://</code> store URIs. Lix 2.96 <strong>deprecates <code>ssh://</code> store URIs</strong>, but retains support for them without deprecation warnings. <code>ssh://</code> store URI support will be removed in Lix 2.97, <code>ssh-ng://</code> URIs will remain supported.</p>\n<p>If you are using <code>ssh://</code> store URIs because <code>ssh-ng://</code> is missing features you need please get in touch so we can figure something out together. Note that <code>ssh-ng</code> has stricter security checks than <code>ssh</code> and no longer allows untrusted users to copy unsigned outputs to remote stores, <em>this is intentional</em>.</p>\n<h3 id=\"breaking-changes\">Breaking changes</h3>\n<p>Once again Lix must break sharp corners to make improvements possible and excise surprising behavior in user code.</p>\n<ul><li><code>flake.nix</code> validation no longer relies on poorly documented triviality checks. Instead Lix now has only one rule for<code>flake.nix</code> :<strong>no function calls are allowed outside of <code>outputs</code>.</strong> This means that Lix now accepts<code>let</code> blocks and string interpolation in flake<code>inputs</code> , among other things. We consider this a breaking change because other Nix implementations may no longer be able to evaluate Flakes that were written using Lix.Many thanks to <a href=\"https://git.lix.systems/piegames\" rel=\"nofollow ugc noopener\">piegames</a> ,<a href=\"https://git.lix.systems/Qyriad\" rel=\"nofollow ugc noopener\">Qyriad</a> and<a href=\"https://git.lix.systems/pennae\" rel=\"nofollow ugc noopener\">eldritch horrors</a> .</li><li>The <code>floor</code> and<code>ceil</code> builtins now throw errors if their operation would have resulted in precision loss during the conversion from floating point to integers. Precision loss does not sound dramatic, but with numbers of sufficient magnitude this could result in positive floats being converted to negative integers.Many thanks to <a href=\"https://git.lix.systems/jade\" rel=\"nofollow ugc noopener\">jade</a> ,<a href=\"https://github.com/NaN-git\" rel=\"nofollow ugc noopener\">NaN-git</a> and<a href=\"https://git.lix.systems/rootile\" rel=\"nofollow ugc noopener\">rootile</a> .</li><li>Many nix3 CLI commands no longer build their arguments. This surprising behavior was commonly seen when <code>nix store delete</code> was called with a path that was not present in the store, causing the path to be downloaded just so that it could be deleted.Many thanks to <a href=\"https://git.lix.systems/pennae\" rel=\"nofollow ugc noopener\">eldritch horrors</a> .</li><li>Shadowing internal files via Nix search paths is now considered an error. Lix 2.95 already deprecated overriding the <code>nix</code> search path entry due to surprising effects that could have, Lix 2.96 now considers this an error if not explicitly configured otherwise.Many thanks to <a href=\"https://git.lix.systems/tom-hubrecht\" rel=\"nofollow ugc noopener\">thubrecht</a> ,<a href=\"https://git.lix.systems/jade\" rel=\"nofollow ugc noopener\">jade</a> and<a href=\"https://git.lix.systems/pennae\" rel=\"nofollow ugc noopener\">eldritch horrors</a> .</li></ul>\n<h2 id=\"new-features\">New features</h2>\n<ul><li>Nested arguments can be set with <code>--arg</code> and<code>--argstr</code> .Previously Lix would turn <code>--arg foo.bar.baz 1</code> into the set<code>{ &quot;foo.bar.baz&quot; = 1; }</code> , now it turns it into<code>{ foo.bar.baz = 1; }</code> . Attribute set merging rules are applied to these sets, making it much easier to use function that expect sets as arguments (such as nixpkgs, which expects a<code>config</code> set). The old behavior can be recovered by quoting the name, e.g.<code>--arg &#39;&quot;foo.bar.baz&quot; 1&#39;</code> .Many thanks to <a href=\"https://git.lix.systems/ma27\" rel=\"nofollow ugc noopener\">ma27</a> .</li><li>Inputs are now only fetched by one process at a time. This can be significant in CI situations where many processes may attempt to download the same input set concurrently. Previously all of them would download the set, now only one of them does and signals the others to wait for it to finish. Many thanks to <a href=\"https://git.lix.systems/lheckemann\" rel=\"nofollow ugc noopener\">lheckemann</a> .</li><li>Use <a href=\"https://github.com/microsoft/mimalloc\" rel=\"nofollow ugc noopener\">mimalloc</a> for faster evaluation. We’ve seen 5-12% eval time improvements due to thisMany thanks to <a href=\"https://git.lix.systems/getchoo\" rel=\"nofollow ugc noopener\">getchoo</a> and<a href=\"https://github.com/lovesegfault\" rel=\"nofollow ugc noopener\">lovesegfault</a> .</li><li><code>nix doctor</code> has been extended greatly, including general system information and remote builder configuration in its report. It can now also automatically connect to configured remote builders and check their state as well.Many thanks to <a href=\"https://git.lix.systems/rootile\" rel=\"nofollow ugc noopener\">rootile</a> and<a href=\"https://git.lix.systems/raito\" rel=\"nofollow ugc noopener\">raito</a> .</li><li><code>ssh-ng</code> store URIs are now considered stable. The long-awaited feature parity between<code>ssh</code> and<code>ssh-ng</code> URIs has arrived, although only Lix 2.96 and newer will be able to take full advantage of this. Connecting to or from older Lixes or other Nix implementations will not see feature parity and silently fall back to the previous behavior.Many thanks to <a href=\"https://git.lix.systems/pennae\" rel=\"nofollow ugc noopener\">eldritch horrors</a> .</li><li>Channel references now support <code>zst</code> -compressed tarballs. This can greatly improve unpacking speed when using channels.Many thanks to <a href=\"https://git.lix.systems/raito\" rel=\"nofollow ugc noopener\">raito</a> and<a href=\"https://git.lix.systems/pennae\" rel=\"nofollow ugc noopener\">eldritch horrors</a> .</li></ul>\n<h3 id=\"improvements\">Improvements</h3>\n<ul><li>The <code>ssl-cert-file</code> and<code>netrc-file</code> settings now report errors when set to files that don’t exist instead of being silently ignored.Many thanks to <a href=\"https://git.lix.systems/astreaprtcl\" rel=\"nofollow ugc noopener\">Astreaprtcl</a> .</li><li>Moving between stack frames in the debugger is now easier using offset instead of absolute numbers. While moving up or down some number of frames previously required remembering the frame number you were on you can now directly supply offsets, using <code>:st +l</code> to go from frame<code>n</code> to<code>n+k</code> and<code>:st -k</code> to go from<code>n</code> to<code>n-k</code> .Many thanks to <a href=\"https://git.lix.systems/blokyk\" rel=\"nofollow ugc noopener\">blokyk</a> .</li><li><code>addErrorContext</code> frames are always printed in backtraces now, even without<code>--show-trace</code> . This makes explicit report locations, for example in the NixOS module system, much more useful.Many thanks to <a href=\"https://git.lix.systems/blokyk\" rel=\"nofollow ugc noopener\">blokyk</a> .</li></ul>\n<h3 id=\"fixes\">Fixes</h3>\n<ul><li><code>nix-copy-closure --include-outputs</code> now actually works.Many thanks to <a href=\"https://git.lix.systems/rkjnsn\" rel=\"nofollow ugc noopener\">rkjnsn</a> .</li><li>Hash mismatch diagnostics now work with <code>structuredAttrs</code> . This fixes hash mismatch diagnostics with fetchers from modern nixpkgs.Many thanks to <a href=\"https://github.com/keysmashes\" rel=\"nofollow ugc noopener\">keysmashes</a> .</li><li>Subdaemons receive overridden settings from their parent daemon rather than using the system-wide configuration. This was broken by the switch to explicitly launched subdaemons in 2.95, making it impossible to configure subdaemons by providing command line arguments to the main daemon. Many thanks to <a href=\"https://git.lix.systems/raito\" rel=\"nofollow ugc noopener\">raito</a> .</li></ul>\n<h3 id=\"miscellanea\">Miscellanea</h3>\n<ul><li><code>ssh</code> and<code>ssh-ng</code> store URIs no longer honor the<code>max-connections</code> parameter. This parameter complicated the code immensely for no benefit to the average user and had many sharp corners when set explicitly.Many thanks to <a href=\"https://git.lix.systems/pennae\" rel=\"nofollow ugc noopener\">eldritch horrors</a> .</li><li>The <code>daemon-trust-override</code> experimental feature has been removed. It can still be emulated by e.g. setting the<code>NIX_CONFIG</code> environment variable appropriately.Many thanks to <a href=\"https://git.lix.systems/pennae\" rel=\"nofollow ugc noopener\">eldritch horrors</a> .</li></ul>\n<h3 id=\"and-so-much-more\">And so much more</h3>\n<p>Many more changes have gone into Lix 2.96, most of them internal. We hope to ship a stable RPC-based daemon in one of the upcoming releases, including remote build support using this new protocol.</p>\n<h2 id=\"what-is-planned-for-the-future\">What is planned for the future?</h2>\n<h3 id=\"lix-2-96-1\">Lix 2.96.1</h3>\n<p>We are releasing 2.96 together with security releases on stable branches. A few things we wanted to finish for 2.96 have been delayed somewhat, and we expect to release 2.96.1 with a few more improvements soon:</p>\n<ul><li>proper <code>--keep-going</code> support when using<code>--store ssh-ng://...</code> , not just when using<code>ssh-ng</code> remotes as remote builders</li><li>SHA256 support for Git fetchers for both Flakes and other users</li><li>better diagnostics on MacOS for garbage collection failures caused by TCC permissions</li><li><code>.narinfo</code> cache soundness improvements to enable key rollovers for binary caches</li><li>allow pass more settings to the daemon and remote builders, e.g. <code>log-lines</code></li></ul>\n<h3 id=\"news-from-rust-integration\">News from Rust integration</h3>\n<p>Rust integration has moved along apace, and it is now possible to write significant portions of new features without touching <em>too much</em> C++ code. We’ve decided to use <a href=\"https://github.com/hkalbasi/zngur/\" rel=\"nofollow ugc noopener\">zngur</a> for interop due to its great flexibility and active maintenance, and we’ve already ported a number of features to Rust like this. The REPL is now backed by Rust, as is remote builder configuration and much of the hash conversion code.</p>\n<h2 id=\"want-to-help-lix-consider-donating-to-lix\">Want to help Lix? Consider donating to Lix!</h2>\n<p>Following Lix integration in AFNix, Lix now has <a href=\"https://opencollective.com/lix-project\" rel=\"nofollow ugc noopener\">an Open Collective</a> and can receive donations.</p>\n<p>We run infrastructure across x86_64-linux, aarch64-linux, and aarch64-darwin. Some of it is in-kind and sponsored. Current costs are around 100€/month.</p>\n<p>If you value self-hosting and benefit from Lix, please consider donating. Every contribution helps sustain the project.</p>\n<h2 id=\"credits\">Credits</h2>\n<p>Thanks, as always, to the following groups:</p>\n<ul><li>The large community who beta tested the upcoming release by running <code>main</code> in production since the 2.95 branch-off. We really appreciate having immediate feedback on our work and the trust of running main alongside us means a lot to us. We know we tested the patience of some of you, we thank you for that.If you want to run Lix main yourself, see <a href=\"https://wiki.lix.systems/books/lix-contributors/page/lix-beta-guide\" rel=\"nofollow ugc noopener\">the beta guide</a> for details.</li><li>Everyone who contributed by filing bugs and giving us feedback on Matrix.</li><li>All the first time contributors who made their first contributions to a Nix implementation in Lix. We are eternally grateful to everyone who helped us out on the numerous important but tedious issues.</li><li>All the contributors who have helped us with the backlog of bugs.</li><li>The CppNix contributors and CppNix team, without whom we would not have this software, and who wrote some of the improvements ported into this release.</li></ul>\n<p>Onwards and upwards for the next release. We look forward to continuing to work together with everyone to build a better foundation for the evolution of Nix.</p>","headings":[{"level":2,"text":"Upgrading from CppNix or previous Lix versions","id":"upgrading-from-cppnix-or-previous-lix-versions"},{"level":2,"text":"Changes","id":"changes"},{"level":3,"text":"REPL and debugger support","id":"repl-and-debugger-support"},{"level":3,"text":"News from RPC","id":"news-from-rpc"},{"level":3,"text":"ssh:// store URIs are now deprecated","id":"ssh-store-uris-are-now-deprecated"},{"level":3,"text":"Breaking changes","id":"breaking-changes"},{"level":2,"text":"New features","id":"new-features"},{"level":3,"text":"Improvements","id":"improvements"},{"level":3,"text":"Fixes","id":"fixes"},{"level":3,"text":"Miscellanea","id":"miscellanea"},{"level":3,"text":"And so much more","id":"and-so-much-more"},{"level":2,"text":"What is planned for the future?","id":"what-is-planned-for-the-future"},{"level":3,"text":"Lix 2.96.1","id":"lix-2-96-1"},{"level":3,"text":"News from Rust integration","id":"news-from-rust-integration"},{"level":2,"text":"Want to help Lix? Consider donating to Lix!","id":"want-to-help-lix-consider-donating-to-lix"},{"level":2,"text":"Credits","id":"credits"}]}}