metadata - The Cargo Book

# cargo metadata

## NAME

cargo-metadata - Machine-readable metadata about the current package

## SYNOPSIS

`cargo metadata [OPTIONS]`

## DESCRIPTION

Output the resolved dependencies of a package, the concrete used versions including overrides, in JSON to stdout.

It is recommended to include the `--format-version` flag to future-proof your code to ensure the output is in the format you are expecting.

See the cargo_metadata crate for a Rust API for reading the metadata.

## OUTPUT FORMAT

The output has the following format:

    {
        /* Array of all packages in the workspace.
           It also includes all feature-enabled dependencies unless --no-deps is used.
        */
        "packages": [
            {
                /* The name of the package. */
                "name": "my-package",
                /* The version of the package. */
                "version": "0.1.0",
                /* The Package ID, a unique identifier for referring to the package. */
                "id": "my-package 0.1.0 (path+file:///path/to/my-package)",
                /* The license value from the manifest, or null. */
                "license": "MIT/Apache-2.0",
                /* The license-file value from the manifest, or null. */
                "license_file": "LICENSE",
                /* The description value from the manifest, or null. */
                "description": "Package description.",
                /* The source ID of the package. This represents where
                   a package is retrieved from.
                   This is null for path dependencies and workspace members.
                   For other dependencies, it is a string with the format:
                   - "registry+URL" for registry-based dependencies.
                     Example: "registry+https://github.com/rust-lang/crates.io-index"
                   - "git+URL" for git-based dependencies.
                     Example: "git+https://github.com/rust-lang/cargo?rev=5e85ba14aaa20f8133863373404cb0af69eeef2c#5e85ba14aaa20f8133863373404cb0af69eeef2c"
                */
                "source": null,
                /* Array of dependencies declared in the package's manifest. */
                "dependencies": [
                    {
                        /* The name of the dependency. */
                        "name": "bitflags",
                        /* The source ID of the dependency. */
                        "source": "registry+https://github.com/rust-lang/crates.io-index",
                        /* The version requirement for the dependency.
                           Dependencies without a version requirement have a value of "*".
                        */
                        "req": "^1.0",
                        /* The dependency kind.
                           "dev", "build", or null for a normal dependency.
                        */
                        "kind": null,
                        /* If the dependency is renamed, this is the new name for
                           the dependency as a string.  null if it is not renamed.
                        */
                        "rename": null,
                        /* Boolean of whether or not this is an optional dependency. */
                        "optional": false,
                        /* Boolean of whether or not default features are enabled. */
                        "uses_default_features": true,
                        /* Array of features enabled. */
                        "features": [],
                        /* The target platform for the dependency.
                           null if not a target dependency.
                        */
                        "target": "cfg(windows)"
                    }
                ],
                /* Array of Cargo targets. */
                "targets": [
                    {
                        /* Array of target kinds.
                           - lib targets list the `crate-type` values from the
                             manifest such as "lib", "rlib", "dylib",
                             "proc-macro", etc. (default ["lib"])
                           - binary is ["bin"]
                           - example is ["example"]
                           - integration test is ["test"]
                           - benchmark is ["bench"]
                           - build script is ["custom-build"]
                        */
                        "kind": [
                            "bin"
                        ],
                        /* Array of crate types.
                           - lib and example libraries list the `crate-type` values
                             from the manifest such as "lib", "rlib", "dylib",
                             "proc-macro", etc. (default ["lib"])
                           - all other target kinds are ["bin"]
                        */
                        "crate_types": [
                            "bin"
                        ],
                        /* The name of the target. */
                        "name": "my-package",
                        /* Absolute path to the root source file of the target. */
                        "src_path": "/path/to/my-package/src/main.rs",
                        /* The Rust edition of the target.
                           Defaults to the package edition.
                        */
                        "edition": "2018",
                        /* Array of required features.
                           This property is not included if no required features are set.
                        */
                        "required-features": ["feat1"]
                    }
                ],
                /* Set of features defined for the package.
                   Each feature maps to an array of features or dependencies it
                   enables.
                */
                "features": {
                    "default": [
                        "feat1"
                    ],
                    "feat1": [],
                    "feat2": []
                },
                /* Absolute path to this package's manifest. */
                "manifest_path": "/path/to/my-package/Cargo.toml",
                /* Package metadata.
                   This is null if no metadata is specified.
                */
                "metadata": {
                    "docs": {
                        "rs": {
                            "all-features": true
                        }
                    }
                },
                /* Array of authors from the manifest.
                   Empty array if no authors specified.
                */
                "authors": [
                    "Jane Doe <user@example.com>"
                ],
                /* Array of categories from the manifest. */
                "categories": [
                    "command-line-utilities"
                ],
                /* Array of keywords from the manifest. */
                "keywords": [
                    "cli"
                ],
                /* The readme value from the manifest or null if not specified. */
                "readme": "README.md",
                /* The repository value from the manifest or null if not specified. */
                "repository": "https://github.com/rust-lang/cargo",
                /* The default edition of the package.
                   Note that individual targets may have different editions.
                */
                "edition": "2018",
                /* Optional string that is the name of a native library the package
                   is linking to.
                */
                "links": null,
            }
        ],
        /* Array of members of the workspace.
           Each entry is the Package ID for the package.
        */
        "workspace_members": [
            "my-package 0.1.0 (path+file:///path/to/my-package)",
        ],
        /* The resolved dependency graph, with the concrete versions and features
           selected. The set depends on the enabled features.
           This is null if --no-deps is specified.
        */
        "resolve": {
            /* Array of nodes within the dependency graph.
               Each node is a package.
            */
            "nodes": [
                {
                    /* The Package ID of this node. */
                    "id": "my-package 0.1.0 (path+file:///path/to/my-package)",
                    /* The dependencies of this package, an array of Package IDs. */
                    "dependencies": [
                        "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)"
                    ],
                    /* The dependencies of this package. This is an alternative to
                       "dependencies" which contains additional information. In
                       particular, this handles renamed dependencies.
                    */
                    "deps": [
                        {
                            /* The name of the dependency.
                               If this is a renamed dependency, this is the new
                               name.
                            */
                            "name": "bitflags",
                            /* The Package ID of the dependency. */
                            "pkg": "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)"
                        }
                    ],
                    /* Array of features enabled on this package. */
                    "features": [
                        "default"
                    ]
                }
            ],
            /* The root package of the workspace.
               This is null if this is a virtual workspace. Otherwise it is
               the Package ID of the root package.
            */
            "root": "my-package 0.1.0 (path+file:///path/to/my-package)"
        },
        /* The absolute path to the build directory where Cargo places its output. */
        "target_directory": "/path/to/my-package/target",
        /* The version of the schema for this metadata structure.
           This will be changed if incompatible changes are ever made.
        */
        "version": 1,
        /* The absolute path to the root of the workspace. */
        "workspace_root": "/path/to/my-package"
    }

## OPTIONS

### Output Options

--no-deps

  Output information only about the workspace members and don’t fetch dependencies.

--format-version VERSION

  Specify the version of the output format to use. Currently `1` is the only possible value.

### Feature Selection

When no feature options are given, the `default` feature is activated for every selected package.

--features FEATURES

  Space or comma separated list of features to activate. These features only apply to the current directory’s package. Features of direct dependencies may be enabled with `<dep-name>/<feature-name>` syntax.

--all-features

  Activate all available features of all selected packages.

--no-default-features

  Do not activate the `default` feature of the current directory’s package.

### Display Options

-v
--verbose

  Use verbose output. May be specified twice for "very verbose" output which includes extra output such as dependency warnings and build script output. May also be specified with the `term.verbose` config value.

-q
--quiet

  No output printed to stdout.

--color WHEN

  Control when colored output is used. Valid values:

  - `auto` (default): Automatically detect if color support is available on the terminal.

  - `always`: Always display colors.

  - `never`: Never display colors.

  May also be specified with the `term.color` config value.

### Manifest Options

--manifest-path PATH

  Path to the `Cargo.toml` file. By default, Cargo searches in the current directory or any parent directory for the `Cargo.toml` file.

--frozen
--locked

  Either of these flags requires that the `Cargo.lock` file is up-to-date. If the lock file is missing, or it needs to be updated, Cargo will exit with an error. The `--frozen` flag also prevents Cargo from attempting to access the network to determine if it is out-of-date.

  These may be used in environments where you want to assert that the `Cargo.lock` file is up-to-date (such as a CI build) or want to avoid network access.

### Common Options

-h
--help

  Prints help information.

-Z FLAG…​

  Unstable (nightly-only) flags to Cargo. Run `cargo -Z help` for details.

## ENVIRONMENT

See the reference for details on environment variables that Cargo reads.

## Exit Status

0

  Cargo succeeded.

101

  Cargo failed to complete.

## EXAMPLES

1. Output JSON about the current package:

       cargo metadata --format-version=1

## SEE ALSO

cargo(1)