cargo-package
Package a Rust crate for distribution
TLDR
Perform checks and create a .crate file (equivalent of cargo publish --dry-run)
Display what files would be included in the tarball without actually creating it
SYNOPSIS
cargo package [OPTIONS]
PARAMETERS
--no-verify
Skip verification of the contents of the package. This means it won't build the package before packaging.
--no-metadata-check
Skip checking `Cargo.toml` for missing metadata. Useful if you're packaging for reasons other than publishing to crates.io.
--allow-dirty
Allow the cargo package command to be run even if the working directory is dirty. This is useful for testing or packaging non-public versions.
--dry-run
Perform all checks and create a temporary archive, but do not write the `.crate` file to disk. Useful for seeing what would be packaged.
-p
Package only the specified package. If omitted, packages the current workspace root package.
-j
Number of parallel jobs to run.
--target
Build for the target triple.
--profile
Build with the given profile. (e.g., `dev`, `release`).
--all-features
Activate all available features.
--no-default-features
Do not activate the `default` feature.
--features
Space-separated list of features to activate.
--workspace
Package the workspace root, even if not the current directory.
--manifest-path
Path to the `Cargo.toml` file.
--verbose, -v
Use verbose output.
--quiet, -q
Do not print cargo log messages.
--color
Coloring: auto, always, never.
--frozen
Require `Cargo.lock` and `Cargo.toml` to be up-to-date and disallow network access.
--locked
Require `Cargo.lock` to be up-to-date.
--offline
Disallow network access.
--config
Set a configuration value.
-Z
Unstable (nightly-only) flag.
--help, -h
Prints help information.
DESCRIPTION
The cargo package command is a crucial part of the Rust ecosystem's publishing workflow. Its primary purpose is to take a Rust package (a crate) and create a .crate archive file, which is the standardized format for distributing Rust packages. This archive typically contains the source code of the package, its Cargo.toml manifest, and any other necessary files specified in Cargo.toml's include or exclude directives.
Before creating the archive, cargo package performs several important checks to ensure the package is ready for publishing. These checks include:
- Verifying that the working directory is clean (no uncommitted changes).
- Building the package to ensure it compiles successfully with the specified features and targets.
- Running metadata checks to ensure Cargo.toml has essential fields like description, license or license-file, and documentation.
CAVEATS
- By default, cargo package requires the Git working directory to be clean. This prevents accidentally packaging uncommitted or untracked changes. Use --allow-dirty to bypass this for testing purposes.
- The command does not actually publish your package to a registry; it only creates the .crate archive. You must use cargo publish for that.
- Skipping verification checks with --no-verify or --no-metadata-check is generally not recommended for packages intended for public distribution, as it might lead to non-compiling or improperly described packages.
OUTPUT FILE
The command generates a .crate file (e.g., my_crate-1.0.0.crate) in the target/package directory of your project. This file is a gzipped tar archive containing all necessary files for the package.
VERIFICATION STEPS
The default verification process ensures that the package builds successfully, its tests pass (if any), and its metadata meets publishing requirements. This helps catch potential issues before a package is published and consumed by others.
HISTORY
The cargo package command is an integral part of Cargo, the Rust package manager, which was initially introduced alongside the Rust programming language itself. Cargo's development began around 2014, aiming to provide a robust and easy-to-use system for managing Rust projects, their dependencies, and their distribution. The package command has been a core component of Cargo's release workflow since its early stable versions, facilitating the creation of reproducible .crate archives necessary for publishing to crates.io, Rust's official package registry. Its design reflects Rust's emphasis on correctness and safety, performing checks before packaging to ensure a higher quality of published crates.
SEE ALSO
cargo publish(1), cargo build(1), cargo check(1), cargo doc(1), cargo clean(1)