Finding packages
Finding packages
In order to install a package, you need to know its attribute-path.
nix-versions
is only possible thanks to the awesome people who have built public web services that allow us to search not only historic versions, but also packages by matching on their attribute-path, and provided programs.
On nixpkgs attribute-paths
You can think of the nixpkgs collection as a tree of json-like objects but implemented in the nix-language. Installable packages (derivations
) are leafs of that tree. An attribute-path
is an string of dot-separated keys leading to an installable package.
Most of the installable packages have pretty much simple guessable attribute-paths, available from the root of the tree, like:
emacs
,ruby
,go
,cargo
,zig
,nodejs
However other packages like pip
are accessible under a nested package-set, and their attribute-path looks like python312Packages.pip
. This is because sometimes a package is bound to a particular version of their runtime or simply organized as part of a particular package set, eg. there's also rubyPackages_3_4.*
, kdePackages.*
, etc. It pretty much depends on how the package maintainers decide to organize that tree of 200_000+ packages.
Search Backends
Currently, nix-versions
can interface to the following backends:
search.nixos.org - This is the official NixOS website used to search for packages. Most people use it via ther web interface, but thanks to nix-search-cli we can query their ElasticSearch database and find packages by name or provided programs (more on this bellow).
Lazamar index - Thanks to Lazamar, people can search historical versions of packages by channel. (You can think of a nixpkgs channel as a particular branch, eg
nixpkgs-unstable
or a particular releasenixos-24.05
, see their website for available channels.)NixHub API - The nice guys at Jetify built this versions index for their wesome devbox product. And kindly have provided a public API.
history.nix-packages.com API - Another community provided API providing historic versions for nixpkgs.
When searching for packages by wildcards on their attribute-name or provided program-names, we use search.nixos.org
.
For searching versions, we can use any of the other backends. NixHub is pre-selected as default versions backend, since it seems to be updated more frequently.
Backend Prefixes
For each package spec it is possible to specify the backend that will be used to search for versions of it by using a prefix like nixhub:
, lazamar:<channel>
, history:
, system:
.
Of these system:
is the only one that is not a remote service. It will query your local nixpkgs
tree and return the current version that is available for some package.
You can mix them on a single command line to compare version availability on the different indexes:
nix-versions --one system:emacs emacs nixhub:emacs lazamar:emacs lazamar:nixos-23.05:emacs history:emacs
see command output
Name Version NixInstallable VerBackend emacs 30.1 nixpkgs#emacs system emacs 30.1 nixpkgs/0740f6f#emacs nixhub emacs 30.1 nixpkgs/0740f6f#emacs nixhub emacs 30.0.93 nixpkgs/21808d2#emacs30 lazamar:nixpkgs-unstable emacs 29.1 nixpkgs/157de78#emacs29 lazamar:nixos-23.05 emacs 29.4 nixpkgs/83c6601#emacs history
You can also change the default backend for those that do not use a particular backend-prefix by using the --nixhub
, --lazamar
and --history
options.
Interlude (nix-search-cli
)
We recommend the amazing nix-search-cli tool which we use internally to interact with search.nixos.org, but that you can use from your terminal to search for packages by name, description, programs, license, homepage, and more.
# Search programs whose name matches pip
nix run nixpkgs#nix-search-cli -- --name pip --max-results 3
see command output
python313Packages.pip @ 25.0.1 : pip pip3 python312Packages.pip @ 25.0.1 : pip pip3 pipx @ 1.7.1 : pipx
Be sure to checkout their help documentation nix-search-cli --help
for more advanced examples.
Wildcards in package names
Thanks to our integration with nix-search-cli
, It is possible to include the *
wildcard in a package name.
nix-versions 'cargo-*' --one
see command output
Name Version NixInstallable VerBackend cargo-zigbuild 0.19.8 nixpkgs/0d53485#cargo-zigbuild nixhub cargo-xwin 0.18.4 nixpkgs/0d53485#cargo-xwin nixhub cargo-xbuild 0.6.6 nixpkgs/0d53485#cargo-xbuild nixhub cargo-workspaces 0.3.6 nixpkgs/0d53485#cargo-workspaces nixhub cargo-wizard 0.2.2 nixpkgs/0d53485#cargo-wizard nixhub cargo-wipe 0.3.3 nixpkgs/0d53485#cargo-wipe nixhub cargo-whatfeatures 0.9.13 nixpkgs/0d53485#cargo-whatfeatures nixhub cargo-watch 8.5.3 nixpkgs/0d53485#cargo-watch nixhub cargo-wasi 0.1.28 nixpkgs/0d53485#cargo-wasi nixhub cargo-vibe 2022-12-29 nixpkgs/0d53485#cargo-vibe nixhub
Packages by program name
It is possible to list packages that provide a given program by prefixing with bin/
.
nix-versions bin/emacsclient@28
see command output
Name Version NixInstallable VerBackend emacs-nox 28.1 nixpkgs/994df04#emacs-nox nixhub emacs-nox 28.2 nixpkgs/09ec6a0#emacs-nox nixhub emacs-gtk 28.1 nixpkgs/994df04#emacs-gtk nixhub emacs-gtk 28.2 nixpkgs/09ec6a0#emacs-gtk nixhub emacs 28.1 nixpkgs/994df04#emacs nixhub emacs 28.2 nixpkgs/09ec6a0#emacs nixhub
Listing different ruby implementations.
nix-versions bin/ruby
see command output
Name Version NixInstallable VerBackend ruby_3_4 3.4.0-preview2 nixpkgs/de18642#ruby_3_4 nixhub ruby_3_4 3.4.1 nixpkgs/2d068ae#ruby_3_4 nixhub ruby_3_4 3.4.2 nixpkgs/0d53485#ruby_3_4 nixhub ruby_3_2 3.2.1 nixpkgs/98f3b08#ruby_3_2 nixhub ruby_3_2 3.2.2 nixpkgs/dd5621d#ruby_3_2 nixhub ruby_3_2 3.2.3 nixpkgs/92d295f#ruby_3_2 nixhub ruby_3_2 3.2.4 nixpkgs/4ae2e64#ruby_3_2 nixhub ruby_3_2 3.2.5 nixpkgs/2262165#ruby_3_2 nixhub ruby_3_2 3.2.6 nixpkgs/0d53485#ruby_3_2 nixhub ruby_3_1 3.1.0 nixpkgs/3a641de#ruby_3_1 nixhub ruby_3_1 3.1.1 nixpkgs/4c3c80d#ruby_3_1 nixhub ruby_3_1 3.1.2 nixpkgs/194c2aa#ruby_3_1 nixhub ruby_3_1 3.1.3 nixpkgs/98f3b08#ruby_3_1 nixhub ruby_3_1 3.1.4 nixpkgs/96ba1c5#ruby_3_1 nixhub ruby_3_1 3.1.6 nixpkgs/0d53485#ruby_3_1 nixhub ruby 2.5.8 nixpkgs/b76d44b#ruby_2_5 nixhub ruby 2.6.6 nixpkgs/1184852#ruby_2_6 nixhub ruby 2.6.7 nixpkgs/3e0ce8c#ruby_2_6 nixhub ruby 2.6.8 nixpkgs/718895c#ruby_2_6 nixhub ruby 2.7.1 nixpkgs/83162ab#ruby_2_7 nixhub ruby 2.7.2 nixpkgs/1184852#ruby_2_7 nixhub ruby 2.7.3 nixpkgs/3e0ce8c#ruby_2_7 nixhub ruby 2.7.4 nixpkgs/f366af7#ruby_2_7 nixhub ruby 2.7.5 nixpkgs/0343e34#ruby nixhub ruby 2.7.6 nixpkgs/e394505#ruby nixhub ruby 2.7.7 nixpkgs/98f3b08#ruby nixhub ruby 2.7.8 nixpkgs/fd04bea#ruby_2_7 nixhub ruby 3.0.0 nixpkgs/54c1e44#ruby_3_0 nixhub ruby 3.0.1 nixpkgs/3e0ce8c#ruby_3_0 nixhub ruby 3.0.2 nixpkgs/f366af7#ruby_3_0 nixhub ruby 3.0.3 nixpkgs/4c3c80d#ruby_3_0 nixhub ruby 3.0.4 nixpkgs/e394505#ruby_3_0 nixhub ruby 3.0.5 nixpkgs/98f3b08#ruby_3_0 nixhub ruby 3.0.6 nixpkgs/a71323f#ruby_3_0 nixhub ruby 3.1.0 nixpkgs/3a641de#ruby_3_1 nixhub ruby 3.1.1 nixpkgs/4c3c80d#ruby_3_1 nixhub ruby 3.1.2 nixpkgs/194c2aa#ruby_3_1 nixhub ruby 3.1.3 nixpkgs/98f3b08#ruby_3_1 nixhub ruby 3.1.4 nixpkgs/96ba1c5#ruby_3_1 nixhub ruby 3.1.5 nixpkgs/038fb46#ruby nixhub ruby 3.1.6 nixpkgs/0d53485#ruby_3_1 nixhub ruby 3.2.1 nixpkgs/98f3b08#ruby_3_2 nixhub ruby 3.2.2 nixpkgs/dd5621d#ruby_3_2 nixhub ruby 3.2.3 nixpkgs/92d295f#ruby_3_2 nixhub ruby 3.2.4 nixpkgs/4ae2e64#ruby_3_2 nixhub ruby 3.2.5 nixpkgs/2262165#ruby_3_2 nixhub ruby 3.2.6 nixpkgs/0d53485#ruby_3_2 nixhub ruby 3.3.0-preview1 nixpkgs/46688f8#ruby_3_3 nixhub ruby 3.3.0-preview2 nixpkgs/75a5226#ruby_3_3 nixhub ruby 3.3.0-preview3 nixpkgs/fd04bea#ruby_3_3 nixhub ruby 3.3.0-rc1 nixpkgs/ca16221#ruby_3_3 nixhub ruby 3.3.0 nixpkgs/1c74cc2#ruby_3_3 nixhub ruby 3.3.1 nixpkgs/3f316d2#ruby_3_3 nixhub ruby 3.3.2 nixpkgs/038fb46#ruby_3_3 nixhub ruby 3.3.4 nixpkgs/0cb2fd7#ruby_3_3 nixhub ruby 3.3.5 nixpkgs/566e53c#ruby nixhub ruby 3.3.6 nixpkgs/0d53485#ruby nixhub ruby 3.4.0-preview2 nixpkgs/de18642#ruby_3_4 nixhub ruby 3.4.1 nixpkgs/2d068ae#ruby_3_4 nixhub ruby 3.4.2 nixpkgs/0d53485#ruby_3_4 nixhub logstash7-oss 7.5.1 nixpkgs/14b0f20#logstash7-oss nixhub logstash7-oss 7.10.2 nixpkgs/481afad#logstash7-oss nixhub logstash7-oss 7.11.1 nixpkgs/2df15ba#logstash7-oss nixhub logstash7-oss 7.16.1 nixpkgs/059530f#logstash7-oss nixhub logstash7-oss 7.17.4 nixpkgs/3007746#logstash7-oss nixhub logstash7-oss 7.17.9 nixpkgs/9f9fcc1#logstash7-oss nixhub logstash7-oss 7.17.10 nixpkgs/dd5621d#logstash7-oss nixhub logstash7-oss 7.17.16 nixpkgs/0d53485#logstash7-oss nixhub logstash7-oss 7.17.27 nixpkgs/0740f6f#logstash7-oss nixhub jruby 9.2.18.0 nixpkgs/fdb42a7#jruby nixhub jruby 9.2.14.0 nixpkgs/b4e193a#jruby nixhub jruby 9.4.8.0 nixpkgs/34a6264#jruby nixhub jruby 9.3.2.0 nixpkgs/98bb5b7#jruby nixhub jruby 9.2.19.0 nixpkgs/2df15ba#jruby nixhub jruby 9.4.6.0 nixpkgs/5fd8536#jruby nixhub jruby 9.2.17.0 nixpkgs/f36a65f#jruby nixhub jruby 9.4.11.0 nixpkgs/e8d0b02#jruby nixhub jruby 9.4.4.0 nixpkgs/a71323f#jruby nixhub jruby 9.3.9.0 nixpkgs/932fc16#jruby nixhub jruby 9.2.12.0 nixpkgs/2b7c0dc#jruby nixhub jruby 9.2.11.1 nixpkgs/e912fb8#jruby nixhub jruby 9.4.3.0 nixpkgs/75a5226#jruby nixhub jruby 9.3.6.0 nixpkgs/6c6409e#jruby nixhub jruby 9.4.9.0 nixpkgs/50165c4#jruby nixhub jruby 9.4.12.0 nixpkgs/0d53485#jruby nixhub jruby 9.3.8.0 nixpkgs/31acb60#jruby nixhub jruby 9.4.10.0 nixpkgs/d98abf5#jruby nixhub jruby 9.3.3.0 nixpkgs/52dc75a#jruby nixhub jruby 9.3.4.0 nixpkgs/1a1bd86#jruby nixhub jruby 9.2.13.0 nixpkgs/5101b35#jruby nixhub jruby 9.4.5.0 nixpkgs/10b8130#jruby nixhub jruby 9.4.7.0 nixpkgs/b60793b#jruby nixhub jruby 9.2.16.0 nixpkgs/316b825#jruby nixhub jruby 9.2.15.0 nixpkgs/0867f62#jruby nixhub jruby 9.3.7.0 nixpkgs/994df04#jruby nixhub graalvmPackages.truffleruby 24.1.1 nixpkgs/2d068ae#graalvmPackages.truffleruby nixhub graalvmPackages.truffleruby 24.1.2 nixpkgs/0d53485#graalvmPackages.truffleruby nixhub
Packages by program wildcard
The program can also include *
wildcards.
nix-versions 'bin/cargo*' --one
see command output
Name Version NixInstallable VerBackend steel 0.6.0-unstable-2025-03-17 nixpkgs/44e422b#steel nixhub sqlx-cli 0.8.3 nixpkgs/0d53485#sqlx-cli nixhub solana-cli 1.18.26 nixpkgs/573c650#solana-cli nixhub rustup 1.27.1 nixpkgs/0d53485#rustup nixhub rustfmt 1.85.0 nixpkgs/0d53485#rustfmt nixhub probe-rs-tools 0.27.0 nixpkgs/0d53485#probe-rs-tools nixhub espflash 3.3.0 nixpkgs/0d53485#espflash nixhub clippy 1.85.0 nixpkgs/0d53485#clippy nixhub cargonode 0.1.3 nixpkgs/0d53485#cargonode nixhub cargo2junit 0.1.13 nixpkgs/0d53485#cargo2junit nixhub
Finding versions on a particular nixpkgs channel.
Using the Lazamar index, you can search for versions of programs at a particular NixOS release or nixpkgs branch. See their webpage for existing channels you can use.
The following example lists the latest versions of emacs at nixos-21.05
, nixos-23.05
and nixpkgs-unstable
.
nix-versions lazamar:nixos-21.05:emacs lazamar:nixos-23.05:emacs lazamar:emacs --one
see command output
Name Version NixInstallable VerBackend emacs 27.2 nixpkgs/903b8cc#emacs lazamar:nixos-21.05 emacs 29.1 nixpkgs/157de78#emacs29 lazamar:nixos-23.05 emacs 30.0.93 nixpkgs/21808d2#emacs30 lazamar:nixpkgs-unstable
Setting default versions backend
If no prefix has been specified, the default versions backend is used (NixHub). But you can also override the default backend via the --nixhub
, --history
, --channel <lazamar-channel>
options.
nix-versions --lazamar emacs --one
see command output
Name Version NixInstallable VerBackend emacs 30.0.93 nixpkgs/21808d2#emacs30 lazamar:nixpkgs-unstable