background grid image
Image for post changelog-determinate-nix-3111
Sep 5, 2025 by Graham Christensen

Parallel evaluation comes to Determinate Nix

Determinate Nix 3.11.1 is out and it delivers parallel evaluation, a long-awaited improvement, to our users. In many real-world cases we’ve seen evaluation times cut in half or more. But that’s not all: we’ve drastically improved the default nix flake init template and fixed build cancellation on macOS.

Let’s take a closer look.

Parallel evaluation

Parallel evaluation (or parallel eval for short) is possibly the most exciting change we’ve shipped in months. It promises to speed up a wide range of Nix operations by distributing work across multiple processors. We plan to introduce parallel eval incrementally on a per-operation basis over the coming weeks and months.

We’ve started with these commands, which can now evaluate Nix expressions in parallel:

  • nix search
  • nix flake check
  • nix flake show
  • nix eval --json

As a real-world example, parallel eval has significantly reduced evaluation time for a flake we use internally that outputs multiple NixOS configurations. How significant? For this set of NixOS configurations, evaluation time was cut in half, from over 20 seconds to under 9 seconds.

Some other examples:

  • nix search "https://flakehub.com/f/NixOS/nixpkgs/0.1" cowsay --no-eval-cache used to take 15 seconds and now takes 6 seconds (a speedup of 2.5x)
  • nix flake check github:NixOS/hydra/7de71224795804b3f5e6aa5a038d8143ba6fc415 --no-build --no-eval-cache used to take 20 seconds and now takes less than 5.5 seconds (a speedup of 3.7x)

Parallel eval is currently in developer preview, and we’ve turned it on for our Trailblazers. If you’d like to try it right away, set eval-cores to 0 in your /etc/nix/nix.custom.conf:

/etc/nix/nix.custom.conf
eval-cores = 0 # Evaluate across all cores

With this release, we’ve also introduced a new builtin, builtins.parallel, that enables users to explicitly parallelize evaluation within a Nix expression. Using builtins.parallel can drastically improve the performance of projects using import-from-derivation (IFD). It reduced the evaluation time of github:edolstra/parallel-eval-test#ifd, for example, from 50 seconds to 10 seconds.

Using this new builtin requires turning on an additional experimental feature:

/etc/nix/nix.custom.conf
extra-experimental-features = parallel-eval
Potential breaking changes

builtins.parallel could have its semantics changed significantly or even be removed from Determinate Nix during the developer preview.

Relevant pull request

A useful nix flake init template default

Nix’s default flake template is extremely bare bones, and not a useful starting point.

Determinate Nix now uses a more fleshed out default template, including targeting multiple systems.

Relevant pull request

Build cancellation is repaired on macOS

A recent macOS update changed how signals are handled by Nix and broke using Ctrl-C to stop a build. Determinate Nix on macOS correctly handles these signals and stops the build.

Relevant pull request

How to get Determinate Nix

If you already have Determinate Nix installed, you can upgrade to 3.11.1 with one Determinate Nixd command:

Upgrade command for version 3.11.1
sudo determinate-nixd upgrade

If you don’t yet have Determinate Nix installed, you can upgrade or migrate to Determinate Nix 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@v5
- uses: DeterminateSystems/flake-checker-action@main
- uses: DeterminateSystems/determinate-nix-action@v3
- uses: DeterminateSystems/flakehub-cache-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