Skip to content

Repository files navigation

nixpkgs-multiverse

Please read this blog post for context.

Every nixpkgs revision, reachable from a single evaluation. One flake input, no juggling nixpkgs pinned at N commits.

The whole index is browsable at https://nixmultiverse.com/

Search any attribute for every version it ever shipped, with copy-paste run and pin commands, plus the full revision and release tables.

lotr meme "One flake to rule them all"

Documentation: Design · Comparisons · Selectors · The Nix API · The mvs CLI · NixOS / nix-darwin / home-manager module · Replacing nixpkgs inputs · Without flakes · Building the index · The store-path index

Also published at https://nixmultiverse.com/docs/.

Questions, ideas, and "does it handle X?" are welcome in the Discord thread.

Status

github master branch workflow ci workflow

Quickstart

Every version of every package ever packaged in nixpkgs, from 2012 to 2026, as an installable:

$ nix run 'github:fzakaria/nixpkgs-multiverse#versions.python3."3.6.2"' -- --version
Python 3.6.2

# the latest version of a package
$ nix run 'github:fzakaria/nixpkgs-multiverse#latest.python3' -- --version
Python 3.14.6

# a whole revision: the newest indexed, a release channel, or a commit
$ nix run github:fzakaria/nixpkgs-multiverse#tip.hello
$ nix run github:fzakaria/nixpkgs-multiverse#26.05.hello
$ nix shell github:fzakaria/nixpkgs-multiverse#967d40bec14b.python3

The commands above fetch and evaluate a ~378 MB nixpkgs tree the first time. The fast path skips both: the store-path index already knows the path Hydra built, so Nix substitutes it straight from cache.nixos.org — seconds instead of minutes, after tomberek's fastpkgs trick. Append the output (.out) — a fake derivation has nothing to build, only a path to fetch:

$ nix shell 'github:fzakaria/nixpkgs-multiverse#fast.versions.python3."3.8.9".out'
$ nix build 'github:fzakaria/nixpkgs-multiverse#fast.latest.hello.out'

The same questions answered offline, out of a database baked into the flake, by the mvs tool:

$ nix run github:fzakaria/nixpkgs-multiverse#mvs -- query versions python3
python3 · 64 versions · 2012-07-05 .. 2026-08-16
VERSION   FIRST       LAST        REVS
3.2.3     2012-07-05  2013-03-01  8

3.14.7    2026-08-12  current     3

Pin a package from a NixOS, nix-darwin, or home-manager configuration:

{
  # Use darwinModules.default on nix-darwin or homeManagerModules.default in
  # home-manager.
  imports = [ inputs.multiverse.nixosModules.default ];

  multiverse.enable = true;
  multiverse.pins.python3 = "3.8.9";
}

Enumerating versions fetches nothing — it reads an index file. A revision is materialised the first time you force a derivation.

From here, the Nix API covers selecting revisions by date, release, or commit; the mvs CLI covers the command line; and the module covers system configuration.

License

MIT, please see LICENSE.

The Nix expressions and tooling are original work. revisions.json, index/versions.json and index/history.json are generated metadata about nixpkgs: revisions, dates, hashes and version strings, not nixpkgs source. Nixpkgs itself is MIT and is fetched at evaluation time.

About

Any version of any nixpkgs package, from one flake input

Topics

Resources

Stars

368 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Contributors

Languages