cargo-publish - Upload a package to the registry


cargo publish [options]


This command will create a distributable, compressed .crate file with the source code of the package in the current directory and upload it to a registry. The default registry is This performs the following steps:

  1. Performs a few checks, including:
    • Checks the package.publish key in the manifest for restrictions on which registries you are allowed to publish to.
  2. Create a .crate file by following the steps in cargo-package(1).
  3. Upload the crate to the registry. Note that the server will perform additional checks on the crate.

This command requires you to be authenticated with either the --token option or using cargo-login(1).

See the reference for more details about packaging and publishing.


Publish Options

Perform all checks without uploading.
--token token
API token to use when authenticating. This overrides the token stored in the credentials file (which is created by cargo-login(1)).

Cargo config environment variables can be used to override the tokens stored in the credentials file. The token for may be specified with the CARGO_REGISTRY_TOKEN environment variable. Tokens for other registries may be specified with environment variables of the form CARGO_REGISTRIES_NAME_TOKEN where NAME is the name of the registry in all capital letters.

Don't verify the contents by building them.
Allow working directories with uncommitted VCS changes to be packaged.
--index index
The URL of the registry index to use.
--registry registry
Name of the registry to publish to. Registry names are defined in Cargo config files. If not specified, and there is a package.publish field in Cargo.toml with a single registry, then it will publish to that registry. Otherwise it will use the default registry, which is defined by the registry.default config key which defaults to crates-io.

Package Selection

By default, the package in the current working directory is selected. The -p flag can be used to choose a different package in a workspace.

-p spec
--package spec
The package to publish. See cargo-pkgid(1) for the SPEC format.

Compilation Options

--target triple
为指定架构执行 Publish 。默认情况下为本机的架构。三元组的格式为 <arch><sub>-<vendor>-<sys>-<abi>。执行 rustc --print target-list 可得到支持的构建目标列表。

也可通过build.target指定(config value)。

注意,指定该标志参数会使Cargo产生的构建工件放在与平常不同的目录下。 详情参见build cache

--target-dir directory
用于存放生成的工件以及中间文件的目录。也可通过环境变量 config value指定。



可通过传递特性参数来控制启用哪些特性。如果没有给定要使用的特性, 则每个已选择的包都会自动使用default特性。

详见the features documentation

--features features
传递以空格或者逗号分隔的列表,其中给出要启用的特性。工作区成员的特性可通过包名/特性名的语法启用。 此参数可多次给定,以分别启用给定的特性。

Manifest Options

--manifest-path path
这两个选项用于保证Cargo.lock文件是最新的。如果该锁文件不存在,或者不是最新的,Cargo 会报错退出。其中--frozen选项会阻止Cargo访问网络以检查锁文件是否是最新的。

这些选项,可用于保证Cargo.lock文件是最新的(比如持续集成的构建过程), 或用于避免联网。

禁止Cargo访问网络。如果不添加此选项,Cargo在需要访问网络但网络不可用的情况下,会报错 并停止工作。添加此选项后,Cargo会尽可能尝试不使用网络来工作。

注意,在此情况下可能会产生与联网状态下不同的依赖解析(Dependency Resolution)结果。 Cargo只会使用本地已下载的crate,即便本地的索引副本中表明可能有新版本crate。在离线前下载 所需依赖的方法,参见 cargo-fetch(1)

也可以通过 net.offline config value指定。

Miscellaneous Options

-j N
--jobs N
要并行运行的作业数量。也可通过 config value指定。 默认为CPU数量。

Display Options

启用更加详细的输出。可两次使用来显示"非常详细"的输出,其中包含了诸如 依赖警告 以及 构建脚本输出 等额外的输出内容。 也可通过term.verbose指定。 config value.
不输出Cargo的日志信息。也可通过term.quiet指定。 config value.
--color when

  • auto (默认):自动检测终端是否支持带颜色的输出。
  • always:总显示带颜色的输出。
  • never:从不显示带颜色的输出。

也可通过term.color指定。 config value.

Common Options

If Cargo has been installed with rustup, and the first argument to cargo begins with +, it will be interpreted as a rustup toolchain name (such as +stable or +nightly). See the rustup documentation for more information about how toolchain overrides work.
Prints help information.
-Z flag
Unstable (nightly-only) flags to Cargo. Run cargo -Z help for details.


关于Cargo所读取的环境变量,可参见the reference


  • 0: Cargo命令执行成功
  • 101: Cargo命令未能完成.


  1. Publish the current package:

    cargo publish


cargo(1), cargo-package(1), cargo-login(1)