Nix Flakes
Last updated: Oct 28, 2026
Rationale
Fluid Attacks uses Nix Flakes to build, develop, and distribute software in a fast, secure, and reproducible way.
- It lets Fluid Attacks make modular and reproducible packages or environments for any programming language and system architecture.
- It gives only the building blocks for this purpose.
- It gives standard interfaces to declare the inputs and outputs of a piece of software.
- It uses pure Nix. Thus, modularity and flexibility are better, but it is also harder to learn.
- It has first-class support implementations for all the programming languages that Fluid Attacks uses at this time.
- It supports declarative configurations for language-specific package managers, for example, uv and npm.
- It does not give declarative support for external services by default.
- It supports fully cryptographically-signed environments for security and reproducibility.
- You can easily integrate it with Cachix for performance.
- It supports garbage collection, which makes it easy to release disk space.
- It supports automatic shell activation with nix-direnv for the development experience.
- It has a large community and very good support.
Alternatives
These are alternatives to Nix Flakes that Fluid Attacks examined or used before:
Makes
- Fluid Attacks developed Makes in 2021. It was an entry-level framework to help developers who were new to Nix. Fluid Attacks deprecated it in 2025 and replaced it with Nix Flakes. It is a Nix wrapper to make reproducible tasks.
- It only gives a method to run tasks on Linux-based machines. Thus, it has a bad effect on development environments and modularity.
- It gives standard interfaces to declare the inputs and outputs of a piece of software.
- Its interfaces hide the interfaces of Nix, to make the system easier to use for developers.
- Fluid Attacks must add support for each programming language that it uses. This increases the maintenance work.
- It supports declarative configurations for language-specific package managers, for example, uv and npm.
- Fluid Attacks must add support for each external service that it uses. This increases the maintenance work.
- It supports fully cryptographically-signed environments for security and reproducibility.
- It has its own Cachix integration for performance.
- It does not have garbage collection, but you can use the garbage collection of Nix.
- Its shell activation support is very small. This has a bad effect on the development experience.
- Only Fluid Attacks maintains it, and it gets almost no support from other sources.
Fluid Attacks last reviewed Makes on May 26, 2025.
devenv
- devenv gives a Nix wrapper to make reproducible environments for any programming language and system architecture.
- It only gives development environments. Thus, it has a very bad effect on reproducibility and modularity.
- It does not give standard interfaces to declare the inputs and outputs of a piece of software.
- Its interfaces are similar to the interfaces of Makes. Thus, it is much easier for Fluid Attacks to learn.
- It has declarative support by default for all the programming languages that Fluid Attacks uses at this time.
- It supports declarative configurations for language-specific package managers, for example, Poetry and npm.
- It has declarative support by default for a large list of services, for example, DynamoDB, OpenSearch, and Nginx.
- It supports fully cryptographically-signed environments for security and reproducibility.
- It has Cachix support for performance.
- It supports garbage collection, which makes it easy to release disk space.
- It supports automatic shell activation for the development experience.
- Because it is a Nix wrapper, its community is smaller and its support is not as good.
Fluid Attacks last reviewed devenv on Jan 27, 2025.
Devbox
- Devbox gives a Nix wrapper to make reproducible tasks for any programming language and system architecture.
- It gives only the building blocks for this purpose. It is less flexible than Nix Flakes, Makes, and devenv.
- It does not give standard interfaces to declare the inputs and outputs of a piece of software.
- Its interfaces try to hide Nix fully with JSON. Thus, it is less flexible, but it is much simpler.
- It has declarative support by default for all the programming languages that Fluid Attacks uses at this time.
- It supports declarative configurations for language-specific package managers, for example, Poetry and npm.
- It has declarative support by default for a small list of services, but most of them are not necessary for Fluid Attacks at this time.
- It supports fully cryptographically-signed environments for security and reproducibility.
- It has its own cache for performance. Fluid Attacks already knows Cachix. Thus, this cache would make Devbox harder to learn.
- It does not give information about garbage collection.
- It supports automatic shell activation for the development experience.
- Because it is a Nix wrapper, its community is smaller and its support is not as good.
Fluid Attacks last reviewed Devbox on Jan 27, 2025.
Flox
- Flox gives a Nix wrapper to make reproducible tasks for any programming language and system architecture.
- It gives only the building blocks for this purpose. It is less flexible than Nix Flakes, Makes, and devenv.
- It does not give standard interfaces to declare the inputs and outputs of a piece of software.
- Its interfaces try to hide Nix fully with a custom approach. Thus, it is less flexible and harder for Fluid Attacks to learn.
- It does not support programming languages. Thus, users must write configurations in a procedural way.
- It does not support language-specific package managers. Thus, users must write configurations in a procedural way.
- It does not support services. Thus, users must write configurations in a procedural way.
- It does not seem to give a method to pin environments. Thus, the environments are not stable.
- It does not support Cachix. It uses FloxHub, which makes it harder for Fluid Attacks to learn.
- It does not give information about garbage collection.
- It does not give information about automatic shell activation.
- Because it is a Nix wrapper, its community is smaller and its support is not as good.
Fluid Attacks last reviewed Flox on Jan 27, 2025.
Usage
Fluid Attacks uses Nix Flakes to manage and serve all its software.
Guidelines
Installation
You only have to install Determinate Nix.
How to use it
You can run the components that you select. For example:
nix run "gitlab:fluidattacks/universe?dir=forces" -- --help
nix run "gitlab:fluidattacks/universe?dir=melts" -- --help
nix run "gitlab:fluidattacks/universe?dir=skims" -- --helpTroubleshooting
- You must have a stable internet connection.
- You must have a stable DNS resolver.
Fluid Attacks recommends one of these resolvers:
- IPv4:
1.1.1.1,8.8.8.8,8.8.4.4 - IPv6:
2001:4860:4860::8888,2001:4860:4860::884
- IPv4:
- If the problem continues, send a message to [email protected]
Search for vulnerabilities in your apps for free with Fluid Attacks' automated security testing! Start your 21-day free trial and discover the benefits of the Essential plan. If you prefer the Advanced plan, which includes the expertise of Fluid Attacks' pentesting team, complete this contact form.