---
name: "nix3-show-derivation"
section: "1"
platform: "linux"
package: "nix-bin"
version: "2.8.0-1.1+b1"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/nix3-show-derivation"
---

# nix3-show-derivation(1)

show the contents of a store derivation

**Warning**: This program is **experimental** and its interface is subject to change.

## Name

`nix show-derivation` - show the contents of a store derivation

## Synopsis

`nix show-derivation` \[*option*…\] *installables*…

## Examples

- •

  Show the store derivation that results from evaluating the Hello package:

```
# nix show-derivation nixpkgs#hello
{
"/nix/store/s6rn4jz1sin56rf4qj5b5v8jxjm32hlk-hello-2.10.drv": {
  …
}
}
```

- •

  Show the full derivation graph (if available) that produced your NixOS system:

```
# nix show-derivation -r /run/current-system
```

- •

  Print all files fetched using `fetchurl` by Firefox’s dependency graph:

```
# nix show-derivation -r nixpkgs#firefox \
| jq -r '.[] | select(.outputs.out.hash and .env.urls) | .env.urls' \
| uniq | sort
```

-

  Note that `.outputs.out.hash` selects *fixed-output derivations* (derivations that produce output with a specified content hash), while `.env.urls` selects derivations with a `urls` attribute.

## Description

This command prints on standard output a JSON representation of the store derivations to which *installables* evaluate. Store derivations are used internally by Nix. They are store paths with extension `.drv` that represent the build-time dependency graph to which a Nix expression evaluates.

By default, this command only shows top-level derivations, but with `--recursive`, it also shows their dependencies.

The JSON output is a JSON object whose keys are the store paths of the derivations, and whose values are a JSON object with the following fields:

- •

  `outputs`: Information about the output paths of the derivation. This is a JSON object with one member per output, where the key is the output name and the value is a JSON object with these fields:

  - •

    `path`: The output path.

  - •

    `hashAlgo`: For fixed-output derivations, the hashing algorithm (e.g. `sha256`), optionally prefixed by `r:` if `hash` denotes a NAR hash rather than a flat file hash.

  - •

    `hash`: For fixed-output derivations, the expected content hash in base-16.

-

  Example:

```
"outputs": {
"out": {
  "path": "/nix/store/2543j7c6jn75blc3drf4g5vhb1rhdq29-source",
  "hashAlgo": "r:sha256",
  "hash": "6fc80dcc62179dbc12fc0b5881275898f93444833d21b89dfe5f7fbcbb1d0d62"
}
}
```

- •

  `inputSrcs`: A list of store paths on which this derivation depends.

- •

  `inputDrvs`: A JSON object specifying the derivations on which this derivation depends, and what outputs of those derivations. For example,

```
"inputDrvs": {
"/nix/store/6lkh5yi7nlb7l6dr8fljlli5zfd9hq58-curl-7.73.0.drv": ["dev"],
"/nix/store/fn3kgnfzl5dzym26j8g907gq3kbm8bfh-unzip-6.0.drv": ["out"]
}
```

-

  specifies that this derivation depends on the `dev` output of `curl`, and the `out` output of `unzip`.

- •

  `system`: The system type on which this derivation is to be built (e.g. `x86_64-linux`).

- •

  `builder`: The absolute path of the program to be executed to run the build. Typically this is the `bash` shell (e.g. `/nix/store/r3j288vpmczbl500w6zz89gyfa4nr0b1-bash-4.4-p23/bin/bash`).

- •

  `args`: The command-line arguments passed to the `builder`.

- •

  `env`: The environment passed to the `builder`.

## Options

- •

  `--recursive` / `-r`\
   Include the dependencies of the specified derivations.

**Common evaluation options:**

- •

  `--arg` *name* *expr*\
   Pass the value *expr* as the argument *name* to Nix functions.

- •

  `--argstr` *name* *string*\
   Pass the string *string* as the argument *name* to Nix functions.

- •

  `--eval-store` *store-url*\
   The Nix store to use for evaluations.

- •

  `--impure`\
   Allow access to mutable paths and repositories.

- •

  `--include` / `-I` *path*\
   Add *path* to the list of locations used to look up `<...>` file names.

- •

  `--override-flake` *original-ref* *resolved-ref*\
   Override the flake registries, redirecting *original-ref* to *resolved-ref*.

**Common flake-related options:**

- •

  `--commit-lock-file`\
   Commit changes to the flake’s lock file.

- •

  `--inputs-from` *flake-url*\
   Use the inputs of the specified flake as registry entries.

- •

  `--no-registries`\
   Don’t allow lookups in the flake registries. This option is deprecated; use `--no-use-registries`.

- •

  `--no-update-lock-file`\
   Do not allow any updates to the flake’s lock file.

- •

  `--no-write-lock-file`\
   Do not write the flake’s newly generated lock file.

- •

  `--override-input` *input-path* *flake-url*\
   Override a specific flake input (e.g. `dwarffs/nixpkgs`). This implies `--no-write-lock-file`.

- •

  `--recreate-lock-file`\
   Recreate the flake’s lock file from scratch.

- •

  `--update-input` *input-path*\
   Update a specific flake input (ignoring its previous entry in the lock file).

**Options that change the interpretation of installables:**

- •

  `--derivation`\
   Operate on the store derivation rather than its outputs.

- •

  `--expr` *expr*\
   Interpret installables as attribute paths relative to the Nix expression *expr*.

- •

  `--file` / `-f` *file*\
   Interpret installables as attribute paths relative to the Nix expression stored in *file*. If *file* is the character -, then a Nix expression will be read from standard input.
