Skip to content

Tracking Stabilization

Overview

Experimental features move through a predictable lifecycle: an idea becomes a merged implementation behind a flag, ships in a Nix release as opt-in behavior, and eventually either stabilizes (the flag is removed and the behavior is always on) or is removed entirely. This page is about how to track that progress—not a second catalog of every flag.

Version stamp (Phase 5.1 re-check, 2026-07-31): named experimental-feature flags exist since Nix 2.4. Facts below match the Nix stable manual for 2.34.x (experimental features/manual/nix/2.34/…; manual title 2.34.9) and local nix (Nix) 2.34.8. Flag names and status change between releases—re-check that manual page and release notes when upgrading.

Upstream sources of truth are that manual list, release notes, and per-feature tracking issues or milestones on the Nix repository. This wiki’s sibling leaf pages document selected flags; refresh this page when a new Nix stable release or NixOS nix pin bump lands. Do not invent stabilization dates—treat a feature as stabilized only when release notes remove its flag.

For how flags are enabled and how they relate to RFCs, see Feature flags overview.

Details

Lifecycle (from the manual).

  1. Idea — design discussion, sometimes an RFC, sometimes not.
  2. PR with flag — implementation merges with a named flag, disabled by default.
  3. Experimental in release — users who opt in exercise real workflows; behavior may change between releases.
  4. Outcomestabilize (remove the flag; behavior becomes normal Nix) or remove (drop implementation and flag).

Stabilization is a judgment call, not a schedule. The project typically looks for:

  • Evidence of use — real configs, flakes, and tooling depend on the feature in production-like settings.
  • Design confidence — APIs and semantics are unlikely to need breaking changes.
  • Understood interactions — behavior with other flags, the store, and downstream tools is documented and predictable.
  • Acceptable maintenance — the cost of supporting the feature long term is justified.

RFCs vs flags. RFCs and feature flags are orthogonal. An RFC socializes and records a design; a flag gates whether an implementation is available. A feature can ship flagged without an RFC, an RFC can precede code by months, or both can run in parallel. Process docs: RFC process. Flag mechanics: Feature flags overview.

Where to look (practical tracking).

Source What it tells you
experimental-features.html Current flag names and short descriptions for your manual version (authoritative list)
Release notes When flags were added, changed, stabilized, or removed
Nix GitHub issues / milestones Per-feature stabilization work (linked from many manual entries)
nix.conf / NixOS nix.settings What you have enabled (see Feature flags overview)
This wiki — leaf pages below Focused notes for selected flags; not a substitute for the manual

As of Nix 2.34.x (stable manual 2.34.9). The manual lists 21 named flags. Widely used flags such as flakes and nix-command remain experimental—still listed with tracking links; not stabilized in 2.34. Example of a completed lifecycle in this series: no-url-literals was stabilized in 2.34 (flag removed; behavior now via lint-url-literals—see 2.34 release notes). Flags without a dedicated wiki leaf are catalogued in Experimental backlog (for example blake3-hashes, external-builders, fetch-closure, local-overlay-store). Treat the manual as complete; this page’s sibling inventory is a curated subset.

Maintenance cadence for this wiki. After each Nix stable release (and when NixOS pins a new nix version—see Release cadence):

  1. Skim release notes for experimental-feature adds, removals, and stabilizations.
  2. Diff the manual’s flag list against Feature flags overview and Experimental backlog; add or retire sibling leaves as flags appear or disappear.
  3. Re-stamp version numbers on this page and those two cousins; update cross-links if tracking issues or milestones move; do not speculate on future stabilization dates.

Inventory (sibling leaves). Individual flags are documented on dedicated pages—use those for behavior and enablement, not this page:

The domain index is Experimental Features. New flags may appear in a release before this list is updated—always check the manual first.

Examples

See which experimental features are effective on this machine (merged from experimental-features and extra-experimental-features in nix.conf). Requires the nix-command feature:

nix config show experimental-features

Example output (verified on Nix 2.34.8; yours will differ):

fetch-tree flakes nix-command

Inspect raw nix.conf settings (when you need the split between replace vs append):

grep -E 'experimental-features|extra-experimental-features' /etc/nix/nix.conf ~/.config/nix/nix.conf 2>/dev/null

After upgrading Nix, read the release notes section for experimental features before assuming a flag still exists or behaves the same:

nix --version
# Then open: https://nix.dev/manual/nix/stable/release-notes/
# And the flag list: https://nix.dev/manual/nix/stable/development/experimental-features.html

Follow stabilization work for a specific flag: open its entry on experimental-features.html—many entries link to a GitHub issue or milestone (e.g. flakes points at its tracking milestone).

References

See also