Determinate Nix version 3.8.0, based on version 2.30.0 of upstream Nix, includes a variety of important improvements.
An improved nix flake check
The nix flake check
command no longer downloads flake outputs in cases when no building is necessary.
This command validates that all of a flake’s output successfully evaluate and that all outputs can thus be built.
If the outputs are available in a binary cache, then both properties have already been confirmed to be true, and nix flake check
shouldn’t need to re-evaluate.
Notably, downloading the output from the binary cache is not strictly necessary for the validation.
That’s because nix flake check
never created any garbage collection roots, and therefore makes no guarantees about the build product being in the local store.
Previously, nix flake check
would download a flake output if the full build is available in a binary cache.
Some users may find that this change significantly reduces costly bandwidth and CI workflow time. In our internal testing, we saw a reduction of several minutes in some of our repositories.
Relevant pull request
Improved flake locking for transitive dependencies
Determinate Nix now re-locks all transitive dependencies when changing a
This fixes an issue where Nix wouldn’t re-lock those inputs in some scenarios and thus incorrectly used the old inputs’ dependencies.
Relevant pull request
A smarter determinate-nixd upgrade
If you try to upgrade Determinate Nix when you’re already on the latest version, Determinate Nixd now exits instead of upgrading again. This is a small improvement but a nice quality-of-life boost.
Some users also reported determinate-nixd version
timing out the first time it’s run after a reboot.
That should be fixed now as well.
Lazy trees is rolled out to 20% of users
In the last release, we rolled out lazy trees to 5% of Determinate Nix users. After a successful 5% rollout, we’re now expanding this group to 20% of users.
You can see if you’re enrolled in the lazy trees rollout using the determinate-nixd version
command:
determinate-nixd version
If Determinate Nix is up to date, you should see this:
Determinate Nixd daemon version: 3.8.0Determinate Nixd client version: 3.8.0
You are running the latest version of Determinate Nix.
The feature lazy-trees is enabled.
If you see any bugs or would like to opt out, please contact support@determinate.systems.
Lazy trees is a massive usability and performance improvement to flakes and we’re excited to see it roll out to thousands more users daily.
How to get Determinate Nix
If you already have Determinate Nix installed, you can upgrade to 3.8.0 with one Determinate Nixd command:
sudo determinate-nixd upgrade
If you don’t yet have Determinate Nix installed, you can install it on macOS using our graphical installer:

Install Determinate Nix on macOS now
Apple Silicon and Intel
On Linux:
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | \ sh -s -- install --determinate
On NixOS, we recommend using our dedicated NixOS module or our NixOS ISO (NixOS installer for x86_64, NixOS installer for ARM) with Determinate Nix pre-installed.
On GitHub Actions:
on: pull_request: workflow_dispatch: push: branches: - main
jobs: nix-ci: runs-on: ubuntu-latest # Include this block to log in to FlakeHub and access private flakes permissions: id-token: write contents: read steps: - uses: actions/checkout@v4 - uses: DeterminateSystems/determinate-nix-action@v3 - uses: DeterminateSystems/flakehub-cache-action@main - uses: DeterminateSystems/nix-flake-checker-action@main - run: nix flake check
In Amazon Web Services:
data "aws_ami" "detsys_nixos" { most_recent = true owners = ["535002876703"]
filter { name = "name" values = ["determinate/nixos/epoch-1/*"] }
filter { name = "architecture" values = ["x86_64"] }}