# Packages

Packages allow you to add executables and libraries/headers to your environment.

To declare packages, refer to the `pkgs` input and specify `packages` as a list: Add packages to the `packages` list

**devenv.nix**

```nix
{ pkgs, ... }:


{
  packages = [
    # Executables
    pkgs.git
    pkgs.jq
    # Libraries
    pkgs.libffi
    pkgs.zlib
  ];
}
```

Packages are added to the PATH when you activate the shell:

```sh
$ jq
jq: command not found


$ devenv shell
Building shell ...
Entering shell ...


(devenv) $ jq --version
jq-1.6
```

## Package outputs

Nixpkgs splits many packages into several outputs, such as `bin`, `dev`, `lib`, `man` or `doc`. Adding a package to `packages` gives the shell its `dev` output (or `out` when there is none) together with the `bin`, `lib` and `include` outputs it propagates, so headers, pkg-config files and libraries are available to compilers and linkers. Outputs like `doc`, `debug` and `static` are left out.

To get exactly one output, select it explicitly:

**devenv.nix**

```nix
{ pkgs, ... }:


{
  packages = [
    # Only the shared libraries, without the `openssl` command line tool.
    pkgs.openssl.out
  ];
}
```

## Installing a specific version

Add the [nixpkgs-multiverse](https://github.com/fzakaria/nixpkgs-multiverse) input once:

```sh
devenv inputs add nixpkgs-multiverse github:fzakaria/nixpkgs-multiverse
```

Packages are then available by their Nixpkgs attribute and version:

**devenv.nix**

```nix
{ pkgs, multiverse, ... }:


{
  packages = [
    pkgs.git
    multiverse.cmake."3.16.5"
    multiverse.bun."0.7.0"
  ];
}
```

The `nixpkgs-multiverse` input is pinned in `devenv.lock`. Historical Nixpkgs revisions are fetched lazily, so only revisions providing packages you use are downloaded. The unmodified input remains available as `inputs."nixpkgs-multiverse"` for advanced use. See [Pinning an individual package version](/pinning/#pinning-an-individual-package-version) for the reproducibility and update workflow.

### Pinning several packages

**New in version 2.2.3**

`multiverse.pins` needs a recent `nixpkgs-multiverse`. Run `devenv update nixpkgs-multiverse` if you added the input earlier.

A multiverse costs one fetch and one evaluation per Nixpkgs revision it touches, not per package. Each version above resolves to the newest revision that shipped it, so two pins from different years mean two Nixpkgs trees.

`multiverse.pins` takes the whole set at once, resolves it through the fewest revisions that can serve it, and returns the packages:

**devenv.nix**

```nix
{ multiverse, ... }:


{
  packages = multiverse.pins {
    cmake = "3.26.4";
    bun = "0.7.0";
  };
}
```

Both packages come back at exactly the versions you asked for. What minimizing decides is which revision serves each, so a pin can land on an older build of the same version.

The `mvs solve` command spells out the plan behind the answer from a terminal, and [the raw input](/inputs/) exposes it to Nix as data. See [the fewest nixpkgs](https://fzakaria.com/2026/08/17/nixpkgs-multiverse-the-fewest-nixpkgs) for how the plan is computed and why it is minimal.

Multiverse indexes top-level package attributes from published Nixpkgs releases and `nixos-unstable` channel revisions. If a package or version is not indexed, you can still [fetch it from another nixpkgs input](/recipes/nix/).

## Searching

Use the site search (Ctrl+K, or Cmd+K on macOS) to search **Docs**, **Options**, and **Packages** together with one query. Results are grouped by source and load independently. Options and packages come from the public `mcp.devenv.sh` catalog, with a suggested match followed by other results. Package versions in that catalog may differ from your project’s pinned input. Use the command below to search your project’s exact Nixpkgs version.

To search for available packages, use `devenv search <NAME>`:

```sh
$ devenv search ncdu
name         version  description
----         -------  -----------
pkgs.ncdu    2.2.1    Disk usage analyzer with an ncurses interface
pkgs.ncdu_1  1.17     Disk usage analyzer with an ncurses interface
pkgs.ncdu_2  2.2.1    Disk usage analyzer with an ncurses interface




No options found for 'ncdu'.


Found 3 packages and 0 options for 'ncdu'.
```

This will search [available packages](https://search.nixos.org/packages?channel=unstable\&query=ncdu) for the exact pinned version of Nixpkgs input in your `devenv.lock`.

## Searching for a file

If you’d like to see what package includes a specific file, for example `libquadmath.so`:

```sh
$ nix run github:nix-community/nix-index-database libquadmath.so
(rPackages.RcppEigen.out)                       302,984 x /nix/store/24r9jkqyf2nd5dlg1jyihfl82sa9nwwb-gfortran-12.3.0-lib/lib/libquadmath.so.0.0.0
(zsnes2.out)                                    693,200 x /nix/store/z23qmfjaj5p50n3iki7zkjjgjzia16v1-gcc-12.3.0-lib/lib/libquadmath.so.0.0.0
(zulip.out)                                           0 s /nix/store/xnlcrrg3b9fgwry6qh3fxk3hnb0whs5z-zulip-5.10.2-usr-target/lib/libquadmath.so.0.0.0
(zulip.out)                                           0 s /nix/store/xnlcrrg3b9fgwry6qh3fxk3hnb0whs5z-zulip-5.10.2-usr-target/lib64/libquadmath.so.0.0.0
(zulip.out)                                           0 s /nix/store/48dnfgadck1mzncy002cs1a9hpddmdmz-zulip-5.10.2-fhs/usr/lib/libquadmath.so.0.0.0
(zettlr-beta.out)                                     0 s /nix/store/nlq9rpakv852kkm7lwhzgb8iap1izpdm-zettlr-beta-3.0.0-beta.7-fhs/usr/lib/libquadmath.so.0.0.0
(zettlr-beta.out)                                     0 s /nix/store/8ypzmv66kvi6qrdlga9yg60gl396n7ny-zettlr-beta-3.0.0-beta.7-usr-target/lib/libquadmath.so.0.0.0
(zettlr-beta.out)                                     0 s /nix/store/8ypzmv66kvi6qrdlga9yg60gl396n7ny-zettlr-beta-3.0.0-beta.7-usr-target/lib64/libquadmath.so.0.0.0
(zettlr.out)                                          0 s /nix/store/5xq9qch1fnknn3z97wcdvcf5vgjfm2ip-zettlr-2.3.0-fhs/usr/lib/libquadmath.so.0.0.0
(zecwallet-lite.out)                                  0 s /nix/store/rllm8zagppnjf4kh14drwwg93gsxwaja-zecwallet-lite-1.8.8-fhs/usr/lib/libquadmath.so.0.0.0
...
```