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.
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.
- 306,387 package versions across 31,962 attributes, from 1,537 revisions
- 2012-07-05 → 2026-08-23, newest
56c02bc00adc·nixos-26.11pre1060451
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.python3The 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 3Pin 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.
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.
