cargo-fuzz
A `cargo` subcommand for fuzzing with `libFuzzer`! Easy to use!
0.13.2
4.2M downloads/mo
#4906 most downloaded on crates.io
rust-fuzz/cargo-fuzz
What this package is like to depend on
Last release 2 months ago
09 Jun 2026
Release timing varies
gaps range from 2 weeks to 1.3 years
Most releases are documented
notes for 28 of 40 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
40 releases · first in 2017
1 release in the last 12 months
see the full history below
Release timeline
40 releases · Feb 2017 to Jun 2026Releases
latest 40-
0.13.209 Jun 2026Release notes
Open source →Merge pull request #446 from fitzgen/bump-to-v0.13.2
Bump to version 0.13.2
Release notes
Open source →Released 2026-06-09.
Added
- Added
--fuzz-engineflag tocargo fuzz init.
Changed
- Updated some crate dependencies.
- Process coverage files in parallel.
- Added
-
0.13.127 Jun 2025Release notes
Open source →Merge pull request #419 from fitzgen/bump-to-version-0.13.1
Bump to version 0.13.1 and fix release build CI
Release notes
Open source →Released 2025-06-26.
Fixed
- Fixed a bug in debug info configuration where we accidentally used a
rustcflag that affected not only the debug info level, but also whether split debug info was enabled and whether debug info stripping was enabled. Now we correctly configure precisely and only the debug info level and not any other debug info related settings.
- Fixed a bug in debug info configuration where we accidentally used a
-
0.13.026 Jun 2025Release notes
Open source →Released 2025-06-25.
Added
- Added
--disable-branch-foldingCLI flag to toggle whether LLVM will fold branches or not. This can have an affect on coverage. - Added
--strip-dead-codeCLI flag to toggle whether dead code is stripped from builds or not. This can have an affect on coverage. - Added
--codegen-unitsCLI flag. The default is 1, which gives best fuzzing throughput. You can, however, provide a larger value to significantly reduce compile times at the cost of worsening fuzzing throughput. - Added basic support for fuzzing on windows via the
--no-include-main-msvcflag. - Added single-letter aliases for subcommands, e.g.
cargo fuzz bforcargo fuzz build.
Changed
- No longer strips debug info in dev builds.
- Only generate line table debug info in default builds. This preserves symbolicated backtraces and builds much faster than when generating full debug info.
- Added
-
0.12.020 Feb 2024Release notes
Open source →Released 2024-02-20.
Removed
- Removed the definition of
cfg(fuzzing_repro)fromcargo fuzz runon select inputs. This caused too many recompiles in practice during the common fuzzing workflow where you are fuzzing, find a crash, repeatedly run the fuzzer on just the crashing input until you fix the crash, and then start fuzzing in general again and the process repeats.
- Removed the definition of
-
0.11.425 Jan 2024Release notes
Open source →Released 2024-01-25.
Changed
cargo fuzz initwill not put the generated fuzzing crate in a separate workspace by default anymore. There is an option to generate a workspace if that is still the desired behavior:--fuzzing-workspace=true.
Fixed
- Fixed
cargo fuzz init's generated dependencies inCargo.toml.
-
0.11.302 Jan 2024Release notes
Open source →Released 2024-01-02.
Added
- Added a "careful mode" inspired by the
cargo-carefulproject - Added the ability to use a custom LLVM binaries install path instead of the
default distributed by
rustup
Changed
- Improved code coverage collection by using the
-merge=1option - Reproducing crashes will now build with
---cfg fuzzing_repro
Fixed
- Initializing a fuzz directory in a workspace is fixed
- Added a "careful mode" inspired by the
-
0.11.213 Feb 2023Release notes
Open source →Released 2023-02-13.
Changed
- No longer rebuilds the fuzz target binary for each coverage run.
-
0.11.125 Oct 2022Release notes
Open source →Released 2022-10-25.
Fixed
- Fixed the suggested reproducer command outputted by
cargo fuzz tminto preserve any build flags (such as sanitizers) the same way thatcargo fuzz fun's suggested reproducer command will.
- Fixed the suggested reproducer command outputted by
-
0.11.027 Sep 2021Release notes
Open source →Released YYYY-MM-DD.
Added
-
Added the
--no-trace-comparesflag which opts out of the-sanitizer-coverage-trace-comparesLLVM argument.Using this may improve fuzzer throughput at the cost of worse coverage accuracy. It also allows older CPUs lacking the
popcntinstruction to usecargo-fuzz; the*-trace-comparesinstrumentation assumes that the instruction is available.
-
-
0.10.213 May 2021Release notes
Open source →Released 2020-05-13.
Added
- Added the
--fuzz-dir <dir>flag to all subcommands, so that you can put your fuzzing files in a directory other thanmy_crate/fuzzif you want. #262
- Added the
-
0.10.119 Apr 2021Release notes
Open source →Released 2020-04-19.
Added
-
Added the
--strip-dead-codeto allow stripping dead code in the linker.By default, dead code is linked because LLVM's code coverage instrumentation assumes it is present in the coverage maps for some targets. Some code bases, however, require stripping dead code to avoid "undefined symbol" linker errors. This flag allows controlling whether dead code is stripped or not in your build. #260
Fixed
- The
cargo fuzz coveragesubcommand now passes the raw coverage files to thellvm-profdatacommand as a whole directory, rather than as individual files, which avoids an issue where too many command-line arguments were provided in some scenarios. #258
-
-
0.10.010 Mar 2021Release notes
Open source →Released 2021-03-10.
Added
- Added the
cargo fuzz coveragesubcommand to generate coverage data for a fuzz target. Learn more in the Coverage chapter of the Rust Fuzzing Book!
- Added the
-
0.9.226 Feb 2021 -
0.9.122 Feb 2021 -
0.9.025 Jan 2021 -
0.8.025 Jun 2020Release notes
Open source →Released 2020-06-25.
Changed
cargo fuzz buildandcargo fuzz rundefault to building with optimizations and debug assertions by default now. This is the most common configuration for running fuzzers, so we've made it the default. To build without optimizations, use the--devflag, which enables Cargo's development profile. To build without debug assertions, use the--releaseflag, which enables Cargo's release profile.
Fixed
- Building with memory
sanitizer via the
--sanitizer=memoryflag works correctly now! Previously, we did not rebuildstdwith memory sanitizer enabled, and so programs compiled with memory sanitizer would immediately segfault in practice.
-
0.7.609 Jun 2020Release notes
Open source →Released 2020-06-09.
Changed
- Updated locked dependencies away from yanked versions.
-
0.7.509 Jun 2020Release notes
Open source →Released 2020-06-09.
Added
- Added a
-v/--verboseflag for enabling verbose cargo builds. This was always implicitly enabled before, but now is optional. - New fuzz targets are now configured not to be tested or documented when you
run
cargo test --allandcargo doc --alland the fuzz crate is a part of a workspace. Previously, this causedcargoto accidentally start running the fuzzers.
Changed
- The
-sanitizer-coverage-trace-gepsand-sanitizer-coverage-prune-blocks=0flags are not passed to LLVM anymore, as they created a lot of overhead for fuzz targets, without actually guiding fuzzing much.
- Added a
-
0.7.431 Mar 2020Release notes
Open source →Released 2020-03-31.
Added
- Added the
cargo fuzz fmt <target> <input>subcommand. This prints thestd::fmt::Debugoutput of the input. This is especially useful when the fuzz target takes anArbitraryinput type.
- Added the
-
0.7.301 Feb 2020 -
0.7.223 Jan 2020Release notes
Open source →Released 2020-01-22.
Changed
- New projects will be initialized with
libfuzzer-sysversion 0.3.0.
- New projects will be initialized with
-
0.7.116 Jan 2020Release notes
Open source →Released 2020-01-15.
Changed
- Updated
Cargo.lockfile's self version forcargo-fuzz, so that building doesn't change the lock file.
- Updated
-
0.7.015 Jan 2020Release notes
Open source →Released 2020-01-15.
Added
cargo fuzzwill show you theDebugoutput of failing inputs. This is particularly useful when you're usingArbitraryto create structured fuzz inputs. This requires that your fuzz target is usinglibfuzzer-sys >= 0.2.0from crates.io.cargo fuzzwill now suggest common next tasks after finding a failing input. It gives you instructions on how to reproduce the failure, and how to run test case minimization.
Changed
- New fuzz projects will use
libfuzzer-sysversion0.2.0from crates.io now, instead of a git dependency. This also pulls inarbitraryversion0.3.0and all the new goodies it contains.
-
0.6.020 Dec 2019 -
0.5.521 Nov 2019Nothing published for this version
-
0.5.420 Oct 2019Nothing published for this version
-
0.5.205 Feb 2018Nothing published for this version
-
0.5.112 Dec 2017Nothing published for this version
-
0.5.002 Oct 2017 -
0.4.322 Jun 2017Nothing published for this version
-
0.4.227 Apr 2017Nothing published for this version
-
0.4.102 Apr 2017Nothing published for this version
-
0.4.030 Mar 2017 -
0.3.114 Mar 2017Nothing published for this version
-
0.3.004 Mar 2017 -
0.2.228 Feb 2017Nothing published for this version
-
0.2.124 Feb 2017Nothing published for this version
-
0.2.023 Feb 2017 -
0.1.122 Feb 2017Nothing published for this version
-
0.1.021 Feb 2017Nothing published for this version