nixfredFLOXFIELD GUIDE · BY NIX UNOFFICIAL
LEARN / NIX 101 FOR FLOX PEOPLE

Nix 101 for Flox people

Nix builds every package into its own hash-named folder under /nix/store, records exactly which other folders it needs, and can fetch a prebuilt copy from a cache instead of compiling. Flox keeps those guarantees and wraps them in a manifest, a catalog and a shared registry, so most users never write Nix.

This page is drawn from the Nix reference manual (https://nix.dev/manual/nix/stable/store/store-path, https://nix.dev/manual/nix/stable/glossary, https://nix.dev/manual/nix/stable/language/derivations, https://nix.dev/manual/nix/stable/command-ref/new-cli/nix3-flake, https://nixos.org/manual/nix/stable/package-management/binary-cache-substituter.html, https://nixos.org/), Flox’s docs (https://flox.dev/docs/concepts/packages-and-catalog, https://flox.dev/docs/concepts/base-catalog, https://flox.dev/docs/concepts/package-groups, https://flox.dev/docs/man/manifest.toml) and Flox’s blog posts cited inline. The Nix manual pages were fetched 2026-11-04 and showed Nix 2.34.9 (https://nix.dev/manual/nix/stable/store/store-path). Nix facts here come from the Nix project; Flox facts come from Flox.

The 30-second version

Nix, in Flox’s words, is “three complementary things rolled into one”: a cross-platform package manager, a virtual environment manager, and “a declarative build system, complete with its own functional expression language” (https://flox.dev/blog/enterprise-nix-its-time-to-bring-nix-to-work/). The Nix project says builds run “in isolation from each other”, so “if a package works on one machine, it will also work on another” (https://nixos.org/).

Flox’s relationship to it: “Under the hood, Flox uses Nix to ensure reproducibility” without requiring you to learn Nix (https://flox.dev/docs/).

The vocabulary, one idea at a time

flowchart LR
  N[Nixpkgs<br/>recipes] --> D[Derivation<br/>build spec with a hash]
  D -->|substituter has it| C[Binary cache<br/>download]
  D -->|cache miss| B[Sandbox build]
  C --> S[Store path<br/>/nix/store/hash-name]
  B --> S
  S --> CL[Closure<br/>path plus everything it needs]
Whiteboard diagram (rendered from the source mermaid)

Store paths

A store path is a name in the Nix store. The manual’s example is /nix/store/q06x3jll2yfzckz2bzqak089p43ixkkq-firefox-33.1, made of the store directory, a digest, and a readable name (https://nix.dev/manual/nix/stable/store/store-path). The digest is “A 20-byte digest for identification” (https://nix.dev/manual/nix/stable/store/store-path). Flox describes the effect: packages are “installed to unique paths with locations determined by the cryptographic checksum of their inputs and build instructions”, which avoids conflicts and allows “atomic upgrades and rollbacks” (https://flox.dev/blog/nix-pure-genius/).

Say: “Two versions of the same library never fight, because they live at different addresses.” You can see these paths in a Flox lockfile, which lists /nix/store/... paths for each package output (https://flox.dev/docs/concepts/environments).

Derivations

The Nix glossary: “A derivation can be thought of as a pure function that produces new store objects from existing store objects.” It runs in a sandbox that, by default, only reads the store objects it declared (https://nix.dev/manual/nix/stable/glossary). Flox’s explanation of why this matters: with Nix, “every input” (sources, compilers, flags, environment variables) is declared explicitly, so you do not begin with a package, “you begin with a build” (https://flox.dev/blog/the-experienced-novice-dives-into-nix/).

Closures

The glossary defines the closure of a store path as the set of store paths directly or indirectly reachable from it, and “For correct deployment it is necessary to deploy whole closures, since otherwise at runtime files could be missing.” (https://nix.dev/manual/nix/stable/glossary). Flox’s version: a package’s closure provides “everything that application requires all the way down to and including libc” (https://flox.dev/blog/nix-pure-genius/). This is also why Flox can make small container images: Nix knows the runtime closure, so images can contain only that (https://flox.dev/blog/nix-and-containers-why-not-both/).

Nixpkgs

Nixpkgs is the community recipe collection. The Nix site says “Choose from over 140 000 Packages” at the time of fetch (https://nixos.org/). Flox’s own post, dated 2026-01-03, says “over 120,000” [verify: the two counts differ and neither source says how it counts] (https://flox.dev/blog/nixpkgs-the-big-recipe-book-of-open-source/). Flox’s argument for it: “Nixpkgs maintains more packages than anybody with an order of magnitude fewer maintainers” because recipes share one reviewable language (https://flox.dev/blog/nixpkgs-the-big-recipe-book-of-open-source/).

Substituters and caches

A substituter is “An additional store from which Nix can obtain store objects instead of building them”, often a binary cache (https://nix.dev/manual/nix/stable/glossary). The default public cache is https://cache.nixos.org (https://nixos.org/manual/nix/stable/package-management/binary-cache-substituter.html). Flox explains the lookup: the derivation’s hash is checked against the cache; if the path exists Nix fetches it, and if not it builds locally. Flox calls this move “substitution” (https://flox.dev/blog/nixpkgs-the-big-recipe-book-of-open-source/).

Flox also runs a cache. Nix users add https://cache.flox.dev to extra-substituters and the Flox public key to extra-trusted-public-keys (https://flox.dev/docs/concepts/cuda-catalog-and-cache).

Flakes

The manual: “Flakes are the unit for packaging Nix code in a reproducible and discoverable way.” A flake is a tree with a flake.nix that declares inputs and outputs (https://nix.dev/manual/nix/stable/command-ref/new-cli/nix3-flake). That page also warns: “This program is experimental and its interface is subject to change.” (https://nix.dev/manual/nix/stable/command-ref/new-cli/nix3-flake). Flox supports installing from a flake: a manifest entry with a flake key accepts a flake installable (https://flox.dev/docs/man/manifest.toml), and a 2024 Flox post says it “probably won’t matter to most Flox users, but will matter a great deal to Nix experts” (https://flox.dev/blog/extending-flox-with-nix-flakes/).

Why Nix is hard

Flox says this plainly, which is useful when a customer already tried Nix:

What Flox adds on top

Nix gives youFlox addsSource
Derivations and Nix expressionsA TOML manifest and git-like CLI: “flox install, activate, push”https://flox.dev/blog/enterprise-nix-its-time-to-bring-nix-to-work/
Nixpkgs recipesA Base Catalog built from a Flox-maintained fork of nixpkgs, sampled daily from nixos-unstable, with version historyhttps://flox.dev/docs/concepts/package-groups, https://flox.dev/docs/concepts/base-catalog
Decentralized by designFloxHub: central sharing of environments, with generationshttps://flox.dev/docs/concepts/floxhub, https://flox.dev/docs/concepts/generations
Flakes for packagingPrivate catalogs and flox publish for your own buildshttps://flox.dev/docs/concepts/packages-and-catalog, https://flox.dev/docs/concepts/publishing
Dependency conflicts to solve by handPackage groups: each group resolves against one nixpkgs commithttps://flox.dev/docs/concepts/package-groups
Nix-built imagesflox containerize and imageless Kuberneteshttps://raw.githubusercontent.com/flox/flox/main/README.md, https://flox.dev/

Flox’s summary of the split: “Nix begins with the build, Flox begins with the environment.” (https://flox.dev/blog/the-experienced-novice-dives-into-nix/). The README adds that Flox “is additive to Nix, not a replacement” (https://raw.githubusercontent.com/flox/flox/main/README.md).

Escape hatches for Nix people

How to explain it

Advice, with the facts underneath:

Gaps to flag

Where to go next

← What Flox is · The architecture →