background grid image
Image for post changelog-determinate-nix-380
Jul 11, 2025 by Graham Christensen

Changelog: a faster nix flake check, improved flake locks, and lazy trees rolled out to 20% of users

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 flake input’s source URL.

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:

Check if Determinate Nix is due for an upgrade
determinate-nixd version

If Determinate Nix is up to date, you should see this:

Terminal window
Determinate Nixd daemon version: 3.8.0
Determinate 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:

Upgrade command for version 3.8.0
sudo determinate-nixd upgrade

If you don’t yet have Determinate Nix installed, you can install it on macOS using our graphical installer:

Logo for graphical installer

Install Determinate Nix on macOS now

Apple Silicon and Intel

On Linux:

Install Determinate Nix 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:

.github/workflows/nix-ci.yaml
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:

aws.tf
data "aws_ami" "detsys_nixos" {
most_recent = true
owners = ["535002876703"]
filter {
name = "name"
values = ["determinate/nixos/epoch-1/*"]
}
filter {
name = "architecture"
values = ["x86_64"]
}
}

Share
Avatar for Graham Christensen
Written by Graham Christensen

Graham is a Nix and Rust developer, with a passion and focus on reliability in the lower levels of the stack. He founded Determinate Systems, Inc to support Nix adoption at your workplace.

Would you like access to private flakes and FlakeHub Cache?

Sign up for FlakeHub