CARGO-YANK(1)
π CARGO-YANK(1) β Remove a pushed crate from the index π
okay bestie, welcome to the cargo-yank page, straight out of the General Commands Manual. this one's short but it's important, so put your phone down for like four minutes. π«Ά
β¨ NAME β¨
cargo-yank β Remove a pushed crate from the index ποΈ
π SYNOPSIS π
cargo yank [options] crate@version
cargo yank [options] --version version [crate]
two whole shapes, pick your fighter. π₯
πΈ DESCRIPTION πΈ
the yank command takes a version of a crate you already published and removes it from the server's index. that's it. that's the whole job.
no cap: this command does not delete any data. the crate is still downloadable via the registry's download link. yanking is a vibe, not a shredder. π
so what actually changes? Cargo will not use a yanked version for any new project or checkout that doesn't already have a pre-existing lockfile. and if there are no longer any compatible versions left for your crate, Cargo will straight up generate an error. π
you gotta be authenticated for this β either with the --token option or by using cargo-login(1).
and if you don't specify the crate name? it just uses the package name from the current directory. convenient. iconic. π
π§ How yank works
picture this: the foo crate published version 1.5.0, and another crate, bar, declared a dependency on version foo = "1.5". now foo drops a new version β 2.0.0 β but it's not semver compatible, and oops, they found a critical issue with 1.5.0. π
if 1.5.0 gets yanked, then no new project or checkout without an existing lockfile will be able to use crate bar, because bar relies on 1.5. and that's a bad time for everybody.
so in this case, the maintainers of foo should first publish a semver compatible version like 1.5.1, and then yank 1.5.0. that way bar and every project that depends on bar keeps working. the way that order of operations mattersβ¦ π₯
another example, bestie. consider a crate bar with published versions 1.5.0, 1.5.1, 1.5.2, 2.0.0 and 3.0.0. here's what Cargo could use in the absence of a lockfile, for different SemVer requirements, after a given release gets yanked:
- if the yanked version is
1.5.0- with
bar = "1.5.0"β Use either1.5.1or1.5.2 - with
bar = "=1.5.0"β Return Error π - with
bar = "2.0.0"β Use2.0.0
- with
- if the yanked version is
1.5.1- with
bar = "1.5.0"β Use either1.5.0or1.5.2 - with
bar = "=1.5.0"β Use1.5.0 - with
bar = "2.0.0"β Use2.0.0
- with
- if the yanked version is
2.0.0- with
bar = "1.5.0"β Use either1.5.0,1.5.1or1.5.2 - with
bar = "=1.5.0"β Use1.5.0 - with
bar = "2.0.0"β Return Error π
- with
(yes, the columns are Yanked Version / SemVer requirement on one side and the three bar requirement flavours on the other. that's the whole grid. π)
π¦ When to yank
crates should only be yanked in exceptional circumstances. like:
- an accidental publish π
- unintentional SemVer breakages
- a significantly broken and unusable crate
if it's a security vulnerability situation? RustSec <https://rustsec.org/> is typically a less disruptive mechanism to inform users and encourage them to upgrade. it also avoids the possibility of significant downstream disruption irrespective of susceptibility to the vulnerability in question. so, like, consider it first. β¨
a common workflow is to yank a crate having already published a semver compatible version β this reduces the probability of preventing dependent crates from compiling. publish first, yank second. periodt. π
now, if you're dealing with copyright, licensing, or personal data issues on a published crate, simply yanking it may not suffice. in those cases you gotta contact the maintainers of the registry you used. for crates.io, go read their policies <https://crates.io/policies> and hit them up at <help@crates.io>. π§
and if credentials have been leaked? the recommended course of action is to revoke them immediately. once a crate has been published, it is impossible to determine if the leaked credentials have been copied. yanking only prevents Cargo from selecting this version when resolving dependencies by default. existing lock files or direct downloads are not affected, so yanking cannot stop further spreading of the leaked credentials. big yikes, be careful out there. π¨
π OPTIONS π
π― Yank Options
--vers version,--version versionβ the version to yank or un-yank. yes, two spellings, same energy. β¨--undoβ undo a yank, putting a version back into the index. the uno reverse card. π--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 <https://doc.rust-lang.org/cargo/reference/config.html> environment variables can be used to override the tokens stored in the credentials file. the token for crates.io may be specified with the
CARGO_REGISTRY_TOKENenvironment variable. tokens for other registries may be specified with environment variables of the formCARGO_REGISTRIES_NAME_TOKENwhereNAMEis the name of the registry in all capital letters. π
- Cargo config <https://doc.rust-lang.org/cargo/reference/config.html> environment variables can be used to override the tokens stored in the credentials file. the token for crates.io may be specified with the
--index indexβ the URL of the registry index to use.--registry registryβ name of the registry to use. registry names are defined in Cargo config files <https://doc.rust-lang.org/cargo/reference/config.html>. if not specified, the default registry is used, which is defined by theregistry.defaultconfig key β and that defaults tocrates-io. π
π 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 theterm.verboseconfig value <https://doc.rust-lang.org/cargo/reference/config.html>. π£οΈ-q,--quietβ do not print cargo log messages. may also be specified with theterm.quietconfig value <https://doc.rust-lang.org/cargo/reference/config.html>. π€«--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.colorconfig value <https://doc.rust-lang.org/cargo/reference/config.html>.
π«Ά Common Options
+toolchainβ 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+stableor+nightly). see the rustup documentation <https://rust-lang.github.io/rustup/overrides.html> for more information about how toolchain overrides work. π οΈ--config KEY=VALUEorPATHβ overrides a Cargo configuration value. the argument should be in TOML syntax ofKEY=VALUE, or provided as a path to an extra configuration file. this flag may be specified multiple times. see the command-line overrides section <https://doc.rust-lang.org/cargo/reference/config.html#command-line-overrides> for more information.-C PATHβ changes the current working directory before executing any specified operations. this affects things like where cargo looks by default for the project manifest (Cargo.toml), as well as the directories searched for discovering.cargo/config.toml, for example. this option must appear before the command name, for examplecargo -C path/to/my-project build.- > β οΈ this option is only available on the nightly channel <https://doc.rust-lang.org/book/appendix-07-nightly-rust.html> and requires the
-Z unstable-optionsflag to enable (see #10098 <https://github.com/rust-lang/cargo/issues/10098>). not for the faint of heart, bestie.
- > β οΈ this option is only available on the nightly channel <https://doc.rust-lang.org/book/appendix-07-nightly-rust.html> and requires the
-h,--helpβ prints help information. π-Z flagβ unstable (nightly-only) flags to Cargo. runcargo -Z helpfor details. π§ͺ
π ENVIRONMENT π
see the reference <https://doc.rust-lang.org/cargo/reference/environment-variables.html> for details on environment variables that Cargo reads. that's the whole section, she's brief but she's thorough. π
β EXIT STATUS β
0: Cargo succeeded. π101: Cargo failed to complete. π
π EXAMPLES π
- Yank a crate from the index:
cargo yank foo@1.0.7
π SEE ALSO π
cargo(1), cargo-login(1), cargo-publish(1)
and that's the whole page, bestie!! π this one came straight out of the General Commands Manual, filed under CARGO-YANK(1) β go forth and yank responsibly. mwah. πβ¨π¦
π¦ where this page comes from
- alpine 3.24: cargo-doc 1.96.1-r0 Β· Apache-2.0 OR MIT
- alpine 3.24: chromium-cargo-doc 1.97.0-r0 Β· Apache-2.0 OR MIT
- centos-stream 10: cargo 1.99.1-1.el10 Β· (Apache-2.0 OR MIT) AND (Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-3.0)
- centos-stream 9: cargo 1.99.1-1.el9 Β· (Apache-2.0 OR MIT) AND (Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-3.0)
- debian bookworm: cargo-web 1.96.0+dfsg1-1~deb12u2 Β· MIT OR Apache-2.0
- debian trixie: cargo-web 1.96.0+dfsg1-1~deb13u1+b1 Β· MIT OR Apache-2.0
- fedora 43: cargo 1.98.1-1.fc43
- fedora 43: cargo 1.99.0-1.fc43
- fedora 43: cargo 1.99.1-2.fc43 Β· (Apache-2.0 OR MIT) AND (Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-3.0)
- fedora 44: cargo 1.98.1-1.fc44
- fedora 44: cargo 1.99.0-1.fc44
- fedora 44: cargo 1.99.1-2.fc44 Β· (Apache-2.0 OR MIT) AND (Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-3.0)
- nixos 26.05: cargo 1.95.0
- opensuse-leap 16.0: cargo1.95 1.95.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.95 1.95.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.95 1.95.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.95 1.95.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.96 1.96.1-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.96 1.96.1-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.96 1.96.1-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.96 1.96.1-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.97 1.97.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.97 1.97.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.97 1.97.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.97 1.97.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.98 1.98.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.98 1.98.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.98 1.98.0-160000.1.1 Β· Apache-2.0 OR MIT
- opensuse-leap 16.0: cargo1.98 1.98.0-160000.1.1 Β· Apache-2.0 OR MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms