The section your link pointed to isn't on aflplusplus's page any more, so we've brought you to the top.
The fuzzer afl++ is afl with community patches, qemu 5.1 upgrade, collision-free coverage, enhanced laf-intel & redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, and a lot more!
AFLplusplus is an open-source, command-line fuzzing tool that finds crashes and undefined-behavior bugs by instrumenting a target program and mutating inputs to maximize code coverage; it is licensed under AGPL-3.0, with an Apache-2.0 exception for anything compiled into the fuzzing harness, and an optional commercial license for organizations that cannot use AGPL. It is aimed at developers and security researchers hardening C/C++ and binary-only targets before or after release, offering LLVM, QEMUQEMUAn open-source machine emulator and virtualizer that lets software run a guest OS or CPU architecture on a different host, giving cyber tools an isolated, inspectable execution environment without dedicated hardware., and Frida-based instrumentation modes with bug-detection oracles that catch arithmetic and out-of-bounds issues ASan misses. Its README describes it as a superior fork of Google's AFL, extending its speed, mutation strategies, and instrumentation. First committed in 2019, it remains active with 411 contributors, 776 commits in the past year, and a release 53 days ago.
The fuzzer afl++ is afl with community patches, qemu 5.1 upgrade, collision-free coverage, enhanced laf-intel & redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, and a lot more!
Which inputs make my program crash or hang, and can I reproduce them later?
mutates inputs while watching code coverage of the instrumented target, saving every input that triggers a new crash, hang, or coverage path into a queue directory you can replay against the binary
Is undefined behavior in my code actually reachable, or just theoretical?
halts the run the moment an undefined-behavior instrumented build hits one, turning a silent UB condition into a distinct, reproducible crash input
Am I fuzzing a binary I can't recompile, and where is time actually going?
runs the same mutation and scheduling engine over QEMU or Frida-based instrumentation instead of compiled-in coverage, so closed-source or binary-only targets get the same crash- and coverage-tracking without source access
Are two separate fuzzing runs on my target actually exploring different behavior?
compares the coverage maps and crash sets each run produced, letting you tell whether a second campaign is turning up genuinely new paths or just repeating the first
64 capabilities
· 2 backed by code, an API document or a real run
Built from aflplusplus's releases, docs, README and our own runs.
“Seen” marks the month we first spotted a release the vendor didn't date.
Group names and tags are our labels.
+Fuzzer session managementshippedProvides capabilities to auto-resume sessions, persist setup configurations, and enforce deterministic fuzzing modes in secondary instances.12 releases · 3 other sources · first seen Aug 2020▸
release
12 total
Adds SIGUSR2 signal handling to afl-fuzz to force an immediate sync (AFL internal sync and foreign -F directories) after the current queue entry finishes.
v5.03c · Sep 2026
· source
· release history
Introduces -s fixed_seed flag to set a deterministic seed without ignoring timing data, replacing previous behavior for benchmarking stability
v5.03c · Sep 2026
· source
· release history
Adds AFL_FORCE_FASTRESUME to skip saved target-hash validation on resume (requires unchanged coverage map size).
v4.40c · Mar 2026
· source
· release history
Implements new queue selection algorithm based on 2 core years of analysis to improve coverage
v4.21c · Jun 2024
· source
· release history
Adds -e extension option to afl-fuzz to save queue items and crashes with file extensions.
v4.20c · Apr 2024
· source
· release history
Enables better deterministic fuzzing with the new -D flag
v4.10c · Feb 2024
· source
· release history
example
Resume a campaign quickly when you know the binary changed but the coverage map size did not.$ AFL_FORCE_FASTRESUME=1 afl-fuzz -i- -o out/ -- ./target @@
v4.40c · Mar 2026
· source
Enable deterministic fuzzing to improve coverage in a session$ afl-fuzz -i in -o out -D -- ./fuzz_target
v4.10c · Feb 2024
· source
Use a wider naming capacity for -S/-M instances up to 50 characters.$ ./afl-fuzz -M fuzz_instance_with_long_custom_name_1234567890 ./target
v4.09c · Dec 2023
· source
+FreeBSD and macOS platform supportshippedSupports building and running AFL++ on FreeBSD and macOS, including afl-fuzz, afl-cc with LTO, frida mode, and lib* tools.13 releases · first seen Oct 2019▸
release
13 total
Changes macOS shared memory backend from SysV to POSIX, lifting kern.sysv.shmseg and kern.sysv.shmmax limits but requiring target recompilation
v5.03c · Sep 2026
· source
· release history
MacOS persistent mode now uses futex-based synchronization for higher speed and lower syscall overhead; opt out with AFL_FAST_CHILD_SYNC (requires macOS 2024+).
v5.01c · Jun 2026
· source
· release history
Restores and expands macOS support for afl-fuzz, afl-cc (including LTO), frida mode, and lib* tools.
v5.00c · Jun 2026
· source
· release history
Makes AFL_DUMP_MAP_SIZE work for CLASSIC instrumentation modes.
v4.34c · Oct 2025
· source
· release history
Adds AFL_QEMU_BLOCK_COV block coverage support in qemuafl.
v4.33c · Jun 2025
· source
· release history
+Alternative execution environmentsshippedSupports fuzzing targets in non-native or binary-only contexts using Unicorn emulation, QBDI for Android native libraries, and Wine for Win32 binaries.13 releases · first seen Jul 2019▸
Also counts toward: Command-line interface
release
13 total
Adds IJON support in qemu_mode for enhanced coverage-guided feedback in binary-only targets.
v4.35c · Dec 2025
· source
· release history
Adds AFL_EXITPOINT support in qemuafl for controlling exit points in QEMU mode.
v4.33c · Jun 2025
· source
· release history
afl-cc now inserts libAFLDriver.a early when -fsanitize=fuzzer is used, supporting LLVMFuzzerTestOneInput in .a archives.
v4.31c · Feb 2025
· source
· release history
+QEMU mode binary-only fuzzingshippedFuzzes binary-only targets using QEMU mode with non-colliding edge coverage, a qemu_bridge plugin interface for new processor targets, and faster persistent mode execution.11 releases · 1 other source · first seen Dec 2019▸
Also counts toward: Plugin API support, Plugin system
release
11 total
New qemu_bridge mode based on current QEMU version, enabling plugin support and new processor targets (WIP).
v5.01c · Jun 2026
· source
· release history
Faster persistent fuzzing in qemu_mode.
v5.01c · Jun 2026
· source
· release history
New qemu_bridge mode backed by the current QEMU version, enabling plugin support and new processor targets (WIP).
v5.01c · Jun 2026
· source
· release history
QEMU mode gains non-colliding coverage, eliminating hash collisions in edge bitmaps and improving precision for binary-only targets.
v5.01c · Jun 2026
· source
· release history
Faster persistent fuzzing in QEMU mode.
v5.01c · Jun 2026
· source
· release history
Non-colliding coverage in qemu_mode for more accurate edge tracking without hash collisions.
v5.01c · Jun 2026
· source
· release history
example
Fuzz a binary-only target with QEMU mode to take advantage of the new non-colliding coverage for more precise edge tracking.$ afl-fuzz -i seeds_dir -o output_dir -Q -- /path/to/target @@
v5.01c · Jun 2026
· source
+Instrumentation allow/deny listshippedControls which functions receive instrumentation via allow and deny lists matched with fnmatch() against both mangled and demangled names, with automatic reuse of compiler-supplied coverage lists for the PCGUARD pass.11 releases · first seen Apr 2020▸
release
11 total
When -fsanitize-coverage-allowlist=/-fsanitize-coverage-ignorelist= is passed without the corresponding AFL_LLVM_ALLOWLIST/AFL_LLVM_DENYLIST, the supplied list is automatically reused so the optimized PCGUARD pass honors it.
v5.02c · Jun 2026
· source
· release history
Instrument allow/deny list fun: entries are now matched verbatim with fnmatch() instead of having a leading * prepended automatically — existing entries that relied on implicit suffix matching must be updated to add an explicit leading *.
v5.02c · Jun 2026
· source
· release history
Passing -fsanitize-coverage-allowlist=/-fsanitize-coverage-ignorelist= without AFL_LLVM_ALLOWLIST/AFL_LLVM_DENYLIST now automatically reuses the supplied list so optimized PCGUARD honors it.
v5.02c · Jun 2026
· source
· release history
Allow/deny list fun: entries now matched verbatim via fnmatch() (breaking change: add a leading * manually for the old suffix-match behavior); entries are matched against both mangled and demangled/unqualified names, and fun: entries now permit : so C++ and Rust demangled names can be listed.
v5.02c · Jun 2026
· source
· release history
Instrument allow/deny list fun: entries in AFL_LLVM_ALLOWLIST/AFL_LLVM_DENYLIST (and GCC equivalents) are now matched verbatim with fnmatch() instead of having a * prepended automatically — existing entries that relied on the implicit leading * for suffix matching must be updated to add an explicit leading…
v5.02c · Jun 2026
· source
· release history
Allow/deny list fun: entries now matched verbatim via fnmatch() against both mangled and demangled names, and fun: prefix now permits : so demangled C++/Rust names can be listed directly.
v5.02c · Jun 2026
· source
· release history
+Ball-Larus path coverage instrumentationshippedAdds per-function Ball-Larus path coverage on top of edge coverage for LTO and PCGUARD instrumentation modes, with three strictness levels and optional composition with caller-site tracking.8 releases · 2 other sources · first seen Apr 2023▸
release
8 total
New AFL_LLVM_PATH / AFL_LLVM_LTO_PATH / AFL_LLVM_PATH_MODE env vars enable Ball-Larus per-function path coverage (three strictness levels) on top of edge coverage in LTO and PCGUARD modes.
v5.00c · Jun 2026
· source
· release history
Adds Ball-Larus per-function path coverage (AFL_LLVM_PATH) on top of edge coverage for LTO and PCGUARD, with three strictness levels (=1 relaxed, =2 restricted, =3 strict), optionally composed with AFL_LLVM_LTO_CALLER.
v5.00c · Jun 2026
· source
· release history
Adds complete hidden decision coverage to default pcguard instrumentation in afl-cc.
v4.35c · Dec 2025
· source
· release history
Adds complete hidden decision coverage to LTO instrumentation in afl-cc.
v4.35c · Dec 2025
· source
· release history
Adds AFL_LLVM_LTO_CALLER=1 and AFL_LLVM_LTO_CALLER_DEPTH env vars in afl-cc LTO mode for collision-free caller instrumentation.
v4.20c · Apr 2024
· source
· release history
AFL++ now supports up to 4 billion coverage edges, up from 6 million.
v4.20c · Apr 2024
· source
· release history
example
Compile a target with Ball-Larus strict path coverage on top of edge coverage to get finer-grained path feedback during fuzzing.$ AFL_LLVM_PATH=3 afl-clang-lto -o target_instrumented target.c -lz
v5.00c · Jun 2026
· source
Instrument C/C++ code with collision-free caller tracing and a depth of 2.$ AFL_LLVM_LTO_CALLER=1 AFL_LLVM_LTO_CALLER_DEPTH=2 afl-cc target.c -o target
v4.20c · Apr 2024
· source
+CmpLog intensity controlshippedAllows users to configure the intensity of cmplog analysis during fuzzing and skip it for initial seeds to balance speed and effectiveness.6 releases · 3 other sources · first seen Mar 2021▸
release
Adds scale support to CMPLOG via -l S flag
v4.09c · Dec 2023
· source
· release history
-l X option to enable base64 transformation solving
v4.08c · Aug 2023
· source
· release history
Adds -l R option to afl-fuzz for random colorization in cmplog mode
4.05c · Jan 2023
· source
· release history
Adds -l CLI option to afl-fuzz to set cmplog/redqueen intensity (1-3)
3.10c · Mar 2021
· source
· release history
Adds AFL_CMPLOG_ONLY_NEW environment variable to skip cmplog on initial seeds
3.10c · Mar 2021
· source
· release history
example
Enable random colorization in cmplog mode for broader mutation coverage$ afl-fuzz -l R -i input -o output ./target
4.05c · Jan 2023
· source
Control cmplog intensity during fuzzing to balance speed and effectiveness.$ afl-fuzz -i in -o out -l 2 ./target
3.10c · Mar 2021
· source
Skip cmplog analysis on initial seeds to save time if they are likely already explored.$ AFL_CMPLOG_ONLY_NEW=1 afl-fuzz -i in -o out ./target
3.10c · Mar 2021
· source
+Custom mutation strategiesshippedSupports custom mutation libraries and mutators, including grammar-based and token-aware mutations.9 releases · first seen Jan 2022▸
release
9 total
Adds post_run custom mutator function hook in afl-fuzz
v4.09c · Dec 2023
· source
· release history
Adds TritonDSE custom mutator in custom_mutators/aflpp_tritondse
4.07c · Jun 2023
· source
· release history
Adds SymQEMU custom mutator in custom_mutators/symqemu
4.07c · Jun 2023
· source
· release history
Adds new autotoken custom module for grammar-free text fuzzing
4.06c · Apr 2023
· source
· release history
Adds auto token insert, user token insert, and auto token overwrite mutation capabilities (previously only user token overwrite was supported)
4.01c · Jun 2022
· source
· release history
+LLVM version supportshippedafl-cc supports LLVM 23 and removes code paths for unsupported older LLVM versions.8 releases · first seen Jun 2019▸
release
8 total
Removed unsupported LLVM version code paths from afl-cc and LLVM passes, so builds relying on those LLVM versions will no longer work
v5.01c · Jun 2026
· source
· release history
+Fuzzer environment variable handlingshippedSupports passing environment variables to fuzzed targets, binding CPU affinity, and controlling file permissions created by the fuzzer.6 releases · 2 other sources · first seen Dec 2019▸
release
Loose file and shared memory permissions support for Android and iPhone targets.
v4.31c · Feb 2025
· source
· release history
added AFL_TRY_AFFINITY to try to bind to CPUs but don't error if it fails
3.13c · Jun 2021
· source
· release history
Introduces DEFAULT_PERMISSION in config.h, defaulting file creation permissions to 0600.
3.12c · Mar 2021
· source
· release history
Adds AFL_TARGET_ENV variable to pass extra environment variables (e.g., LD_LIBRARY_PATH) to the fuzzed target.
3.12c · Mar 2021
· source
· release history
AFL_TARGET_ENV variable added to afl-fuzz to pass extra environment variables (e.g., LD_LIBRARY_PATH) to the fuzzed target.
3.12c · Mar 2021
· source
· release history
DEFAULT_PERMISSION config setting added to config.h allowing control over file permissions for files created by the tool, defaulting to 0600.
3.12c · Mar 2021
· source
· release history
example
Inject shared library paths into the fuzzed target without modifying its startup script.$ AFL_TARGET_ENV="LD_LIBRARY_PATH=/custom/libs/afl-fuzz ./target
3.12c · Mar 2021
· source
Force instrumentation for the retrorewrite project using the new environment variable.$ AFL_AS_FORCE_INSTRUMENT=1 ./afl-gcc -o my_app my_app.c
2.60c · Dec 2019
· source
+Sanitizer integrationshippedCompiles targets with sanitizers such as UBSAN and configures halt-on-error so AFL++ treats undefined behaviour as a crash, surfacing memory-safety bugs during fuzzing.6 releases · 1 other source · first seen Feb 2020▸
release
Enforces halt on UBSAN errors in both afl-fuzz and afl-cc (via AFL_USE_UBSAN=1), making undefined-behavior findings actionable during fuzzing.
v5.01c · Jun 2026
· source
· release history
New SAND mode for more efficient fuzzing with sanitizers (see docs/SAND.md).
v4.31c · Feb 2025
· source
· release history
Adds CFI sanitizer variant to gcc targets in afl-cc
4.06c · Apr 2023
· source
· release history
New AFL_LLVM_USE_TSAN environment variable enables ThreadSanitizer support in the instrumentation layer.
4.00c · Jan 2022
· source
· release history
Enables Control Flow Integrity detection via the new AFL_USE_CFISAN compile-time flag
2.63c · Apr 2020
· source
· release history
Adds experimental UBSAN instrumentation via AFL_USE_UBSAN=1 environment variable
2.61c · Feb 2020
· source
· release history
example
Compile a target with UBSAN and enforce halt on errors so AFL++ treats UB as a crash, surfacing memory-safety bugs during fuzzing.$ AFL_USE_UBSAN=1 afl-cc -o target_ubsan target.c && afl-fuzz -i seeds_dir -o output_dir -- ./target_ubsan @@
v5.01c · Jun 2026
· source
+Remote and network fuzzing supportshippedEnables fuzzing targets on remote systems, embedded devices, or over networks using proxies, AFL tracer examples, or cross-compilation setups.6 releases · 1 other source · first seen Dec 2019▸
Also counts toward: Command-line interface
release
Adds afl-addseeds CLI tool for injecting new seeds into a running campaign
v4.09c · Dec 2023
· source
· release history
Adds examples/afl_network_proxy to enable fuzzing targets on embedded devices over the network
2.65c · May 2020
· source
· release history
Deprecates AFL_POST_LIBRARY in favor of AFL_CUSTOM_MUTATOR_LIBRARY
2.65c · May 2020
· source
· release history
Adds examples/afl_untracer for binary-only fuzzing with in-memory modifications on intel32/64 and aarch64
2.65c · May 2020
· source
· release history
Extends afl-tmin to minimize hangs using the new -H flag
2.63c · Apr 2020
· source
· release history
experimental/socket_fuzzing (preeny's desock_dup) added for network socket fuzzing.
2.60c · Dec 2019
· source
· release history
example
Fuzz a network binary by intercepting socket calls through the new ld_preload library.$ ./afl-gcc -o my_app my_app.c && AFL_PRELOAD=./experimental/socket_fuzzing/desock_dup.so ./afl-fuzz -i in -o out ./my_app @@
2.60c · Dec 2019
· source
+Campaign health monitoringshippedProvides the afl-health tool to analyse the health of a running multi-instance AFL++ campaign, with tips and SSH support for remote fuzzers.5 releases · 1 other source · first seen Jan 2022▸
Also counts toward: Command-line interface
release
afl-fuzz-i input directory and afl-showmap-i now follow symlinked test cases and symlinked subdirectories; foreign sync directories (-F) also import symlinked test cases.
v5.03c · Sep 2026
· source
· release history
New afl-health tool: advanced campaign health checker with tips, analysis, and SSH support — a more powerful replacement for afl-whatsup.
v5.02c · Jun 2026
· source
· release history
Adds -n option to afl-whatsup to disable colored output
v4.09c · Dec 2023
· source
· release history
Adds -m option to afl-whatsup to show only relevant stats
v4.09c · Dec 2023
· source
· release history
UI and fuzzer_stat entries renamed: unique crashes to saved crashes, total paths to corpus count, current path to current item, which may break custom scripts parsing these strings.
4.00c · Jan 2022
· source
· release history
example
Check the health of a running multi-instance AFL++ campaign, including remote fuzzers via SSH.$ afl-health -i /output/sync_dir
v5.02c · Jun 2026
· source
+GUI fuzzing integrationverifiedSupports fuzzing GUI programs by accepting a process ID and output file path to coordinate with afl++ during GUI-targeted campaigns.2 releases · 4 other sources · first seen Dec 2019▸
Also counts toward: Command-line interface
release
Adds GUIFuzz++ integration, enabling grey-box fuzzing of desktop graphical user interface applications.
v4.35c · Dec 2025
· source
· release history
Adds ./examples/socket_fuzzing example using preeny's desock_dup library for network fuzzing
2.60c · Dec 2019
· source
· release history
docs
Coverage-guided fuzzer that instruments binaries to discover crashes and bugs through automated input mutation.
command line
--outfile — The location where afl++ is writing output
v4.35c · Dec 2025
· command-line history
--pid — The pid of the gui program, provided by afl++
v4.35c · Dec 2025
· command-line history
+Custom mutation library supportshippedAllows users to define and load custom mutation strategies via external shared libraries or Python scripts, with options to combine with or replace default mutations.5 releases · 1 other source · first seen Jul 2019▸
Also counts toward: Plugin API support, Plugin system, Python scripting support, Scripting API, Scripting language support
release
Splicing phase is now disabled by default; new -u flag re-enables it manually (auto-enables after two cycles with no finds).
v4.31c · Feb 2025
· source
· release history
Adds AFL_CUSTOM_MUTATOR_LATE_SEND=1 to invoke the custom send() function after the target has been restarted.
v4.30c · Dec 2024
· source
· release history
Adds afl_custom_fuzz_send custom mutator API hook to send fuzz data to targets via IPC or other means
4.05c · Jan 2023
· source
· release history
Adds MOpt mutation mode (see docs/README.MOpt)
2.53c · Jul 2019
· source
· release history
Adds Python Module mutator support with autodetection of python2.7-dev (see docs/python_mutators.txt)
2.53c · Jul 2019
· source
· release history
example
Use the new Python mutator extension to customize mutation strategies via a custom script.$ export AFL_CUSTOM_MUTATOR_LIBRARY=/path/to/mutator.so && afl-fuzz -i input_dir -o output_dir ./target_fuzz
2.53c · Jul 2019
· source
+Persistent mode performanceshippedUses futex-based synchronization instead of pipes for persistent mode on Linux and macOS, reducing syscall overhead; the prior behaviour can be restored with AFL_FAST_CHILD_SYNC.4 releases · 1 other source · first seen Mar 2021▸
release
macOS persistent mode now uses futex-based synchronization for higher speed and lower syscall overhead (requires macOS 2024+); opt out with AFL_FAST_CHILD_SYNC.
v5.01c · Jun 2026
· source
· release history
Linux persistent mode now uses futex instead of pipes, reducing syscall overhead; opt out with AFL_FAST_CHILD_SYNC.
v5.00c · Jun 2026
· source
· release history
Reintroduces AFL_PERSISTENT and AFL_DEFER_FORKSRV environment variables to enable persistent mode and manual forkserver support externally
4.01c · Jun 2022
· source
· release history
Adds AFL_LLVM_INSTRUMENT=NATIVE option to afl-cc for native clang pc-guard support
3.10c · Mar 2021
· source
· release history
example
Use the new native clang pc-guard instrumentation mode for compiling targets.$ AFL_LLVM_INSTRUMENT=NATIVE afl-clang ./main.c -o main
3.10c · Mar 2021
· source
+Bug-detection oracle instrumentationshippedProvides afl-llvm-bug-pass.so with six runtime oracle modes (SCALAR, BUDGET, SIZEFILL, ALLOCSIZE, SLACK, SCALAR_SLICE) that surface arithmetic-bound and logical out-of-bounds bugs that ASan does not catch.4 releases · 1 other source · first seen Jun 2021▸
release
New afl-llvm-bug-pass.so instrumentation provides five runtime bug-detection oracles — SCALAR, BUDGET, SIZEFILL, ALLOCSIZE, and SLACK — catching arithmetic-bound and logical OOB bugs that ASan misses (including the CVE-2023-4863 / libwebp-Huffman class).
v5.00c · Jun 2026
· source
· release history
New -l Z scheduling mode in afl-fuzz, paired with AFL_LLVM_BUG_ALLOCSIZE_DERIVE=1, logs computed allocation sizes and max offsets into CmpLog RTN slots for dictionary mining.
v5.00c · Jun 2026
· source
· release history
Introduces afl-llvm-bug-pass.so with six runtime oracle modes (SCALAR, BUDGET, SIZEFILL, ALLOCSIZE, SLACK, and SCALAR_SLICE) that catch arithmetic-bound and logical OOB bugs ASan misses — including the CVE-2023-4863 libwebp-Huffman class.
v5.00c · Jun 2026
· source
· release history
Leak Sanitizer (AFL_USE_LSAN) added by Joshua Rogers, thanks!
3.13c · Jun 2021
· source
· release history
example
Enable the full bug-detection pass (all six oracle modes) to surface arithmetic-bound and OOB bugs that ASan misses, then fuzz with predicate-tightness scheduling to chase tight-comparison edges like CVE-2023-4863.$ AFL_LLVM_BUG=1 afl-clang-fast -o target_bug target.c && afl-fuzz -i seeds/ -o out/ -l M -- ./target_bug @@
v5.00c · Jun 2026
· source
+Post-processing hooksshippedAllows users to define custom post-processing steps that can filter or skip mutated inputs based on logic.4 releases · 1 other source · first seen Aug 2022▸
release
Adds faster stream mode to afl-showmap.
v4.40c · Mar 2026
· source
· release history
Adds AFL_POST_PROCESS_KEEP_ORIGINAL environment variable to preserve original input data on finds
4.07c · Jun 2023
· source
· release history
Allows post_process hooks to return NULL and 0 length to skip mutated inputs
4.02c · Aug 2022
· source
· release history
Adds post_process hook capability to return NULL/0 length to skip mutated inputs in afl-fuzz
4.02c · Aug 2022
· source
· release history
example
Preserve the original seed data before mutation for debugging post-processing steps.$ AFL_POST_PROCESS_KEEP_ORIGINAL=1 ./afl-fuzz -i seeds -o out ./target
4.07c · Jun 2023
· source
+Corpus and file path handlingshippedImproves the ability of corpus minimization tools to handle filenames containing spaces and adds options to print or record specific file metadata.3 releases · 2 other sources · first seen Mar 2021▸
release
Adds AFL_FINAL_SYNC environment variable to force fuzzer sync before termination
v4.09c · Dec 2023
· source
· release history
added AFL_PRINT_FILENAMES to afl-showmap/cmin to print the current filename
3.13c · Jun 2021
· source
· release history
afl-cmin now correctly handles filenames containing spaces
3.11c · Mar 2021
· source
· release history
example
Force a final synchronization before the fuzzer terminates using the new environment variable.$ AFL_FINAL_SYNC=1 ./afl-fuzz -i in -o out ./target
v4.09c · Dec 2023
· source
Minimize a corpus where inputs are in directories with spaces in their names.$ afl-cmin -i in_dir -o out_dir -- ./fuzz_target @@ 'file name.txt'
3.11c · Mar 2021
· source
+Fork server customizationshippedProvides advanced control over the fork server mechanism, including early installation, manual triggering, custom kill signals, and shared memory optimization.3 releases · 2 other sources · first seen Jul 2021▸
release
Adds AFL_FORK_SERVER_KILL_SIGNAL environment variable to control which signal kills the fork server child in afl-fuzz
4.05c · Jan 2023
· source
· release history
AFL_FORK_SERVER_KILL_SIGNAL environment variable added to allow customizing the signal sent to kill the fork server.
4.04c · Oct 2022
· source
· release history
Adds forkserver support to afl_analyze for better performance
3.14c · Jul 2021
· source
· release history
example
Customize the signal sent to the fork server process for controlled termination behavior$ AFL_FORK_SERVER_KILL_SIGNAL=9 afl-fuzz -i input -o output ./target
4.05c · Jan 2023
· source
Enable manual forkserver and persistent mode when not baked into the target binary$ AFL_PERSISTENT=1 AFL_DEFER_FORKSRV=1 afl-fuzz -i in_dir -o out_dir ./target @@
4.01c · Jun 2022
· source
+Instrumentation diagnostics and debuggingshippedOffers tools to dump instrumentation maps, log unstable edges for debugging, and configure complex coverage tracking modes.4 releases · first seen Jan 2022▸
release
Adds AFL_DUMP_MAP_SIZE to print the coverage/IJON breakdown to stderr.
v5.03c · Sep 2026
· source
· release history
Add AFL_QEMU_TRACK_UNSTABLE environment variable to log addresses of unstable edges in QEMU mode when combined with AFL_DEBUG=1.
4.03c · Sep 2022
· source
· release history
Add AFL_DUMP_MAP_SIZE=1 setting to dump the target's map size and exit before main().
4.03c · Sep 2022
· source
· release history
New GramaTron grammar mutator added to custom_mutators for structured input generation.
4.00c · Jan 2022
· source
· release history
+Value Profile instrumentationshippedImplements value profiling to track specific input values during fuzzing.4 releases · first seen Sep 2026▸
release
Adds Value Profile implementation enabled by AFL_LLVM_VALUE_PROFILE=1 and activated with -r <seconds> in afl-fuzz
v5.03c · Sep 2026
· source
· release history
Adds AFL_LLVM_MINMAX=1 env var to score min/max/abs intrinsics (branchless clamps); adds ~10% map entries at a ~20% throughput cost, default off.
v5.03c · Sep 2026
· source
· release history
Adds AFL_LLVM_VECTORS=1 env var to instrument vector selects and min/max operations in afl-cc
v5.03c · Sep 2026
· source
· release history
Adds AFL_LLVM_VALUE_PROFILE=1 env var to enable Value Profile instrumentation in fuzz targets, paired with the new afl-fuzz flag -r <seconds> to activate value-profile-guided mutation after a delay.
v5.03c · Sep 2026
· source
· release history
+Instrumentation boundary enforcementshippedCrashes the fuzzer immediately when a fuzzing input reaches a function marked as uninstrumented, enabling strict auditing of instrumentation boundaries.2 releases · 2 other sources · first seen Jun 2026▸
release
New AFL_LLVM_CRASHLIST env var: crash the fuzzer immediately when input reaches a function explicitly marked as not to be instrumented.
v5.02c · Jun 2026
· source
· release history
New AFL_LLVM_CRASHLIST environment variable: causes the fuzzer to crash immediately when a function marked as uninstrumented is entered via fuzzing input, enabling strict instrumentation boundary enforcement.
v5.02c · Jun 2026
· source
· release history
example
Detect when fuzzing input reaches a function intentionally excluded from instrumentation — useful for auditing allowlist completeness.$ AFL_LLVM_CRASHLIST=/path/to/denylist.txt afl-cc -o target target.c && afl-fuzz -i seeds/ -o out/ -- ./target @@
v5.02c · Jun 2026
· source
Compile a target with C11 complexity-aware scheduling so afl-fuzz prioritises inputs that hit code with more local variables.$ AFL_LLVM_C11=1 afl-cc -o target_fuzz target.c
v5.02c · Jun 2026
· source
+Adaptive MOpt mutatorshippedProvides a new adaptive MOpt mutator in afl-fuzz that dynamically adjusts mutation operator weights based on campaign feedback.4 releases · first seen Jul 2019▸
release
New adaptive MOpt mutator in afl-fuzz, replacing the outdated implementation — reportedly outperforms standard havoc in initial testing.
v5.01c · Jun 2026
· source
· release history
New adaptive MOpt mutator in afl-fuzz, replacing the outdated implementation, with early results outperforming standard havoc.
v5.01c · Jun 2026
· source
· release history
Integrates FrameShift mutation engine by default, improving time-to-coverage and total coverage; tune or disable via AFL_FRAMESHIFT_DISABLE and AFL_FRAMESHIFT_MAX_OVERHEAD.
v4.40c · Mar 2026
· source
· release history
Adds MOpt mutation mode (see docs/README.MOpt)
2.53c · Jul 2019
· source
· release history
+CmpLog predicate-tightness schedulingshippedProvides afl-fuzz cmplog scheduling modes that treat per-site minimum slack on inequality comparisons as coverage events and mine magic size constants from custom allocators into the dictionary.3 releases · 1 other source · first seen Jun 2026▸
release
New -l M scheduling mode in afl-fuzz treats per-site minimum slack on inequality CmpLog comparisons as a coverage event, marking queue entries favoured for predicate-tightness.
v5.00c · Jun 2026
· source
· release history
New -l M afl-fuzz cmplog scheduling mode: treats any new per-site minimum slack on inequality comparisons as a coverage event and marks the queue entry favoured (predicate-tightness scheduling).
v5.00c · Jun 2026
· source
· release history
New -l Z afl-fuzz cmplog scheduling mode combined with AFL_LLVM_BUG_ALLOCSIZE_DERIVE=1: logs (computed_size, max_observed_offset) per freed allocation into CmpLog RTN slots for dictionary mining of magic size constants.
v5.00c · Jun 2026
· source
· release history
example
Track custom allocators and derive size constants into CmpLog for havoc, helping break magic-size checks in targets with non-standard allocators.$ AFL_LLVM_BUG_ALLOCSIZE_FUNCS=my_alloc AFL_LLVM_BUG_ALLOCSIZE_FREE_FUNCS=my_free AFL_LLVM_BUG_ALLOCSIZE_DERIVE=1 afl-clang-fast -o target_alloc target.c && afl-fuzz -i seeds/ -o out/ -l Z --…
v5.00c · Jun 2026
· source
+AFL output directory analysisverifiedAccepts an AFL output directory path and parallel job count to process or analyse fuzzing results from completed or running campaigns.1 release · 3 other sources · first seen Jun 2025▸
release
Introduces new faster afl-cmin.py script, now invoked automatically by afl-cmin when Python is available.
v4.33c · Jun 2025
· source
· release history
command line
dump_path — Path to AFL output directory (i.e. ./output/default/)
v4.40c · Mar 2026
· command-line history
--env — set extra environment variable (KEY=VALUE), can be repeated
v4.40c · Mar 2026
· command-line history
+Corpus minimization configurationshippedControls corpus minimizer behavior with options to include crashing inputs, bypass initial calibration, and configure sync intervals.3 releases · 1 other source · first seen Jun 2022▸
release
Add AFL_NO_STARTUP_CALIBRATION environment variable to bypass initial seed calibration and start fuzzing immediately.
4.03c · Sep 2022
· source
· release history
Add -A option to afl-cmin and afl-cmin.bash to include crashing and timeout inputs during corpus minimization.
4.03c · Sep 2022
· source
· release history
Introduces AFL_SYNC_TIME environment variable to configure the time allocated for syncing state with other fuzzer instances
4.01c · Jun 2022
· source
· release history
example
Start fuzzing large queues immediately in CI without waiting for calibration cycles.$ AFL_NO_STARTUP_CALIBRATION=1 afl-fuzz -i in -o out ./target
4.03c · Sep 2022
· source
+Starved mode and queue minimizationshippedAutomatically increases seed variability when no new finds occur, and optionally minimizes the corpus to rediscover stale coverage.3 releases · first seen Sep 2026▸
release
Adds AFL_STARVED_MINIMIZE_QUEUE env var so that when starved mode fails to find new coverage, afl-fuzz minimizes the queue (like afl-cmin) and makes removed entries' coverage rediscoverable.
v5.03c · Sep 2026
· source
· release history
Implements a starved mode in afl-fuzz: when no new finds occur for an extended period, seed and mutation variability increases automatically (including splicing phase), with visibility in the UI.
v5.03c · Sep 2026
· source
· release history
Adds AFL_STARVED_MINIMIZE_QUEUE environment variable to trigger queue minimization when no finds are discovered in starved mode
v5.03c · Sep 2026
· source
· release history
+Value Profile mutation guidanceshippedEnables dynamic activation of value profile instrumentation to capture comparison operand diversity and guide mutations after a specified delay.1 release · 2 other sources · first seen Aug 2022▸
release
gcc_plugin adds CMPLOG support from Adacore
4.02c · Aug 2022
· source
· release history
example
Enable the new Value Profile to detect value changes, activating it after 60 seconds of fuzzing.$ export AFL_LLVM_VALUE_PROFILE=1 afl-fuzz -r 60 -i in -o out ./fuzz_target
v5.03c · Sep 2026
· source
Enable Value Profile instrumentation to capture comparison operand diversity, then activate it in afl-fuzz after 30 seconds of baseline fuzzing.$ AFL_LLVM_VALUE_PROFILE=1 afl-clang-fast -o target target.c afl-fuzz -i seeds/ -o out/ -r 30 -- ./target @@
v5.03c · Sep 2026
· source
+C11 complexity-aware queue schedulingshippedRecords per-function local variable counts at instrumentation time and uses this complexity signal in afl-fuzz to preferentially schedule queue entries that exercise more complex code paths.2 releases · 1 other source · first seen Jun 2026▸
release
New C11 mode (AFL_LLVM_C11): afl-cc records per-function local variable counts; afl-fuzz uses the data to favor more complex code paths during queue scheduling.
v5.02c · Jun 2026
· source
· release history
New C11 instrumentation mode (AFL_LLVM_C11): afl-cc records per-function local variable counts; afl-fuzz uses this as an extra queue-scheduling signal to favor more complex code paths.
v5.02c · Jun 2026
· source
· release history
example
Compile a target with C11 complexity-aware scheduling to improve coverage of deeply nested code paths.$ AFL_LLVM_C11=1 CC=afl-cc CXX=afl-c++ ./configure --disable-shared && make clean all
v5.02c · Jun 2026
· source
+Crash notification integrationshippedInvokes a user-specified external tool with the new crash file as a command-line argument whenever afl-fuzz discovers a crash.2 releases · 1 other source · first seen Oct 2022▸
Also counts toward: Command-line interface
release
Adds -I tool crash notification: the specified tool now receives the new crash file as a command-line parameter.
v5.00c · Jun 2026
· source
· release history
AFL runtime now always passes inputs via shared memory when possible in llvm-mode, ignoring command line settings for this path.
4.04c · Oct 2022
· source
· release history
example
Replay a discovered crash$ cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]
+Custom allocator trackingshippedExtends allocation tracking to user-defined allocators and their matching free functions via environment variables, enabling coverage and bug detection in targets that do not use standard allocators.3 releases · first seen Jun 2019▸
release
Adds AFL_LLVM_BUG_ALLOCSIZE_FUNCS and AFL_LLVM_BUG_ALLOCSIZE_FREE_FUNCS to extend allocation tracking to user-defined custom allocators and their matching free functions.
v5.00c · Jun 2026
· source
· release history
AFL runtime now always passes inputs via shared memory when possible in llvm-mode, ignoring command line settings for this path.
4.04c · Oct 2022
· source
· release history
Adds aflfast powerschedules to the fuzzer configuration options
2.52c · Jun 2019
· source
· release history
+Nyx mode supportshippedEnables Nyx hypervisor-based snapshot fuzzing mode across all afl-cmin corpus minimizer variants.3 releases · first seen Apr 2023▸
release
Enables Nyx mode for all afl-cmin minimizer variants.
v5.00c · Jun 2026
· source
· release history
Enables full Nyx mode support in afl-cmin for corpus minimization of large targets (previously lost coverage due to fixed map size).
v4.33c · Jun 2025
· source
· release history
+Fuzzing session exit criteriashippedEnables automatic termination of fuzzing campaigns based on timeout thresholds or seed-related errors.3 releases · first seen Jun 2021▸
release
Adds AFL_IGNORE_SEED_PROBLEMS environment variable to skip seeding timeouts
v4.09c · Dec 2023
· source
· release history
added AFL_EXIT_ON_TIME env that will make afl-fuzz exit fuzzing after no new paths have been found for n seconds
3.13c · Jun 2021
· source
· release history
added AFL_EXIT_ON_SEED_ISSUES env that will exit if a seed in -i dir crashes the target or results in a timeout.
3.13c · Jun 2021
· source
· release history
+Target injection syntaxshippedSupports using the @@ placeholder within command-line arguments to inject input files for targets with specific argument parsing requirements.2 releases · 1 other source · first seen Jun 2021▸
Also counts toward: Command-line interface
release
Add AFL_QEMU_TRACK_UNSTABLE environment variable to log addresses of unstable edges in QEMU mode when combined with AFL_DEBUG=1.
4.03c · Sep 2022
· source
· release history
added patch by @realmadsci to support @@ as part of command line options, e.g. afl-fuzz ... -- ./target --infile=@@
3.13c · Jun 2021
· source
· release history
example
Identify unstable coverage edges in QEMU mode for debugging.$ AFL_QEMU_TRACK_UNSTABLE=1 AFL_DEBUG=1 afl-fuzz -i in -o out ./target
4.03c · Sep 2022
· source
+Forkserver bypass for post-processingshippedAllows disabling the forkserver mechanism in post-fuzzing tools like afl-cmin and afl-showmap to support targets that cannot use it.2 releases · 1 other source · first seen Jul 2021▸
release
Added support for the AFL_NO_FORKSRV environment variable in afl-cmin, afl-tmin, and afl-showmap to disable the forkserver mechanism.
3.14c · Jul 2021
· source
· release history
Adds AFL_NO_FORKSRV environment variable support to afl-cmin, afl-tmin, and afl-showmap
3.14c · Jul 2021
· source
· release history
example
Disable forkserver for afl-cmin when the target binary cannot handle forked processes.$ AFL_NO_FORKSRV=1 afl-cmin -i in -o out /path/to/target
3.14c · Jul 2021
· source
+QEMU target configurationshippedAllows specifying custom binaries and memory ranges to exclude or include for instrumentation within the QEMU fuzzing mode.3 releases · first seen Mar 2021▸
release
Adds AFL_QEMU_CUSTOM_BIN in qemu_mode to specify a custom binary for tracing.
3.12c · Mar 2021
· source
· release history
AFL_QEMU_CUSTOM_BIN variable added to qemu_mode (via afl-qemu-trace) to specify a custom binary for QEMU instrumentation.
3.12c · Mar 2021
· source
· release history
qemu_mode respects the new AFL_QEMU_EXCLUDE_RANGES environment variable
3.11c · Mar 2021
· source
· release history
+Selective instrumentation boundariesshippedEnables fine-grained control over which code paths are instrumented via source-level macros, compiler flags, or environment variables to bypass instrumentation for specific targets.3 releases · first seen Dec 2019▸
release
afl-cc supports the new AFL_NOOPT environment variable to bypass instrumentation
3.11c · Mar 2021
· source
· release history
Adds __AFL_COVERAGE_* commands for selective instrumentation in source code
3.10c · Mar 2021
· source
· release history
AFL_AS_FORCE_INSTRUMENT environment variable allows forcing instrumentation in afl-as.
2.60c · Dec 2019
· source
· release history
+Corpus minimization parallelismshippedEnables parallel task execution in corpus minimization tools to utilize multiple CPU cores.2 releases · first seen Jun 2023▸
Also counts toward: Command-line interface
release
Switches afl-cmin.c to be the default afl-cmin implementation; -T all (C and Python variants) now counts CPUs the process is actually allowed to run on.
v5.03c · Sep 2026
· source
· release history
Adds -T <threads> flag to afl-cmin for parallel task support
4.07c · Jun 2023
· source
· release history
+Dense coverage mapsshippedDisables PCGUARD basic block pruning to produce denser coverage maps.2 releases · first seen Sep 2026▸
release
Adds AFL_LLVM_DENSE=1 env var to disable PCGUARD basic block pruning for denser coverage maps.
v5.03c · Sep 2026
· source
· release history
Adds AFL_LLVM_DENSE=1 env var to disable PCGUARD basic block pruning in afl-cc
v5.03c · Sep 2026
· source
· release history
+Dynamic mutation engine switchingshippedAutomatically switches the fuzzer's primary objective from path discovery to crash triggering after a specified duration.2 releases · first seen Aug 2023▸
release
Mode-switching limits in afl-fuzz are now exec-count-based rather than time-based.
v5.03c · Sep 2026
· source
· release history
-P flag for new mutation engine that favors path discovery then switches to crash triggering after 10 minutes
v4.08c · Aug 2023
· source
· release history
+Symlink test case supportshippedAllows the fuzzer to traverse and utilize symlinked test cases and directories within input corpora.2 releases · first seen Sep 2026▸
release
afl-fuzz-i input directory and afl-showmap-i now follow symlinked test cases and symlinked subdirectories; foreign sync directories (-F) also import symlinked test cases.
v5.03c · Sep 2026
· source
· release history
Enables symlink traversal for test cases and subdirectories in -i input paths across afl-fuzz, afl-showmap, and foreign sync -F
v5.03c · Sep 2026
· source
· release history
+Vector instrumentationshippedInstruments vector selects and vector min/max with one guard pair per lane.2 releases · first seen Sep 2026▸
release
Adds AFL_LLVM_VECTORS=1 env var to instrument vector selects and vector min/max with one guard pair per lane, default off.
v5.03c · Sep 2026
· source
· release history
Adds AFL_LLVM_MINMAX=1 env var to score min/max/abs intrinsics for branchless clamped code in afl-cc
v5.03c · Sep 2026
· source
· release history
+IJON distance-guided fuzzingshippedImplements the IJON distance model (initial matching bytes, max length 1024) as a coverage signal to guide fuzzing toward specific targets.2 releases · first seen Oct 2025▸
release
Updates IJON distance implementation to the original IJON model (initial matching bytes, max length 1024).
v5.00c · Jun 2026
· source
· release history
Adds IJON integration for structure-aware fuzzing guided by user annotations (see docs/IJON.md).
v4.34c · Oct 2025
· source
· release history
+LicensingshippedAFL++ is licensed under AGPL 3.0; organizations that cannot use AGPL may obtain a separate commercial license, while externally contributed Apache 2.0 files retain their original license.2 releases · first seen Jun 2026▸
release
Relicenses AFL++ to AGPL 3.0 (with optional commercial license for organizations that cannot use AGPL); Apache 2.0 files with external contributions remain on that license.
v5.00c · Jun 2026
· source
· release history
AFL++ is now licensed under AGPL 3.0 (previously Apache 2.0 for many files); commercial use requires a separate commercial license
v5.00c · Jun 2026
· source
· release history
+Selective backend compilationshippedAllows building the cyber tool without optional backends like Unicorn, QEMU, and Frida to reduce dependencies and build time in minimal environments.1 release · 1 other source · first seen Oct 2025▸
release
Adds NO_UNICORN, NO_QEMU, and NO_FRIDA build options to selectively disable optional backends.
v4.34c · Oct 2025
· source
· release history
example
Build AFL++ without Unicorn, QEMU, and Frida backends to reduce build time and dependencies on minimal environments.$ make NO_UNICORN=1 NO_QEMU=1 NO_FRIDA=1
v4.34c · Oct 2025
· source
+Fuzzer session resumption speedshippedSkips calibration when resuming sessions with an unchanged binary by loading a saved dump, significantly reducing start time for large corpora.1 release · 1 other source · first seen Dec 2024▸
release
Adds fastresume: when resuming with -i - or AFL_AUTORESUME=1 and the target binary is unchanged, AFL skips calibration by loading a saved dump (zlib-compressed if available); disable with AFL_NO_FASTRESUME=1.
v4.30c · Dec 2024
· source
· release history
example
Resume a long fuzzing session without re-running calibration when the binary hasn't changed, saving time on large corpora.$ afl-fuzz -i - -o /out -- ./target @@
v4.30c · Dec 2024
· source
+Dictionary generation assistanceshippedProvides utilities to automatically generate fuzzing dictionaries using static analysis tools like CodeQL.2 releases · first seen Jun 2021▸
release
Adds generate_libtoken_dict.sh script in libtokencap via @a-shvedov
v4.21c · Jun 2024
· source
· release history
create a fuzzing dictionary with the help of CodeQL thanks to @microsvuln! see utils/autodict_ql
3.13c · Jun 2021
· source
· release history
+Parallel fuzzer sync controlshippedAllows skipping input synchronization between parallel fuzzers via environment variables or command arguments to improve performance in specific workflows.1 release · 1 other source · first seen Jun 2024▸
release
Adds AFL_NO_SYNC environment variable to skip input syncing between parallel fuzzers
v4.21c · Jun 2024
· source
· release history
example
Run parallel fuzzers where syncing input files between instances is unnecessary or costly for your workflow.$ AFL_NO_SYNC=1 afl-fuzz -i in -o out ./target
v4.21c · Jun 2024
· source
+CPU-specific performance optimizationsshippedEnables CPU-specific optimizations during the compilation of target binaries and the fuzzer itself to improve execution speed.1 release · 1 other source · first seen Apr 2024▸
release
Adds PERFORMANCE=1 make option to enable CPU-specific optimizations in afl-fuzz.
v4.20c · Apr 2024
· source
· release history
example
Enable CPU-specific performance optimizations when compiling targets.$ make PERFORMANCE=1
v4.20c · Apr 2024
· source
+Fuzzing input size controlshippedAllows setting explicit minimum and maximum bounds for generated fuzzing inputs via command-line flags or configuration.1 release · 1 other source · first seen Jun 2022▸
Also counts toward: Command-line interface
release
Adds -g and -G command-line options to set the minimum and maximum length of generated fuzz inputs
4.01c · Jun 2022
· source
· release history
example
Limit generated input size between 50 and 200 bytes during fuzzing$ afl-fuzz -i in_dir -o out_dir -g 50 -G 200 ./target @@
4.01c · Jun 2022
· source
+Corpus merging utilityshippedProvides a tool to merge new files into an existing non-minimized corpus.1 release · first seen Sep 2026▸
release
Adds afl-merge as a symlink tool to merge new files into an existing (non-minimized) corpus.
v5.03c · Sep 2026
· source
· release history
+Fused condition instrumentationshippedScores both halves of fused conditions like if (a && b) to improve coverage.1 release · first seen Sep 2026▸
release
Adds AFL_LLVM_FUSED=1 env var to score both halves of fused conditions like if (a && b) in afl-cc
v5.03c · Sep 2026
· source
· release history
+Improved cmplog instrumentation on macOSshippedEnhances cmplog instrumentation quality when building targets with afl-cc on macOS.1 release · first seen Jun 2026▸
release
Improved cmplog instrumentation on macOS via afl-cc.
v5.01c · Jun 2026
· source
· release history
+Coverage analysis companionshippedIntegrates with cov-analysis (replacing the deprecated afl-cov) to provide post-fuzzing coverage reporting alongside fuzzing campaigns.1 release · first seen Jun 2026▸
release
Switches coverage analysis companion from deprecated afl-cov to cov-analysis.
v5.00c · Jun 2026
· source
· release history
+Compiler launcher integrationshippedAllows configuring custom compiler launchers like ccache via environment variables to optimize build times and speed up repeated instrumented builds.1 release · first seen Oct 2025▸
release
New AFL_COMPILER_LAUNCHER env var in afl-cc to allow ccache and similar compiler launchers.
v4.34c · Oct 2025
· source
· release history
+Custom mutator plugin supportshippedEnables extending fuzzing capabilities through custom plugins, including those using ZeroMQ to ingest testcases from remote sources.1 release · first seen Oct 2025▸
Also counts toward: Plugin API support, Plugin system
release
Adds AIXCC Team Atlanta's ZeroMQ plugin for custom_mutators to ingest testcases from a remote source.
v4.34c · Oct 2025
· source
· release history
+Nyx mode corpus minimizationshippedExtends Nyx hypervisor-based snapshot fuzzing support to the `afl-cmin` corpus minimizer, allowing minimization of large targets previously limited by fixed map sizes.1 release · first seen Jun 2025▸
release
Enables full Nyx mode support in afl-cmin for corpus minimization of large targets (previously lost coverage due to fixed map size).
v4.33c · Jun 2025
· source
· release history
+Python language supportshippedSupports running Python scripts for mutation strategies and utilizes Python 3.13+ for the fuzzing environment.1 release · first seen Feb 2025▸
Also counts toward: Python scripting support, Scripting language support
+Corpus minimization performance optimizationshippedOptimizes the performance of the fuzzer when the corpus has grown very large to maintain efficiency.1 other source · first seen Jun 2024▸
example
Optimize afl-fuzz performance when the corpus has grown very large.$ AFL_DISABLE_REDUNDANT=1 afl-fuzz -i in -o out ./target
v4.21c · Jun 2024
· source
+Instability warning configurationshippedAllows suppressing or configuring warnings about instrumentation instability during fuzzing campaigns.1 release · first seen Apr 2023▸
release
Adds AFL_NO_WARN_INSTABILITY environment variable to suppress instability warnings
4.06c · Apr 2023
· source
· release history
+System configuration automationshippedProvides utilities to automatically apply and persist required system-level configurations for fuzzing environments on Linux and macOS.1 release · first seen Jan 2022▸
release
afl-persistent-config script added to apply permanent system configuration settings for fuzzing on Linux and MacOS.
4.00c · Jan 2022
· source
· release history
+Android QASan integrationshippedProvides specialized coverage instrumentation using QASan for Android applications and targets running under QEMU.1 release · first seen Mar 2021▸
release
Adds qemuafl support for QASan (address sanitizer for Qemu)
3.10c · Mar 2021
· source
· release history
+Command-line argument fuzzingshippedIntercepts and fuzzes command-line arguments passed to a target process using an ld_preload library, enabling campaign-level testing of argument parsing logic.1 release · first seen Dec 2019▸
release
experimental/argv_fuzzing ld_preload library included for argument-level fuzzing.
2.60c · Dec 2019
· source
· release history
Lines in monospace are the tool's own words: help text
parsed from its source, or an endpoint from its API document. Under
release, a line is our summary of a dated release. Under
docs, it is quoted from the tool's own documentation or
website. Each links back to the source it came from.
Command line
View
Source
No command matches.
load a captured run
composed command
No matchesTry a different search, or clear a filter to see more.
option surface across analysed releases
options at that releaseadded, per releaseremoved, per release
option
found in
since
description
No matchesTry a different search, or clear a filter to see more.
option changes per release — drag across the rail to set a range
→
Values are placeholders taken from each option’s declared default.
Nothing is executed here — the output shown is a recording of a run
that already happened.
Score card
Shipping velocityreleases a month, last 12 months
Documentation qualityrelease-notes rubric, 0–100
Breaking-change disciplinehow rarely a release breaks users, and notice given
Maintenance riskquiet time against its own cadence, maintainers
Innovation & surfacenew capabilities, API and MCP surface
Community health
Contributor trenddistinct committers, this year against last
Maintainer concentrationbus factor now against a year ago
Issue backlog trendissues closed per issue opened, 12 months
Responsivenessmedian time to a maintainer’s first reply
Nine scores for aflplusplus, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.
Each score is 0–100 on a published rubric, derived from data this site already shows.
A dimension we cannot measure says so — it is never scored 0 and never enters a rank.
How this is scored
Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
Documentation quality — the release-notes rubric published on the analytics page, unchanged.
Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.
Release-note detail over time
See how much detail aflplusplus puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.
Issue, contributor and maintainer activity in AFLplusplus/AFLplusplus, 2023-10 – 2026-09,
as of 2026-09-25. Twelve-month figures first; the trend lines run
the whole window.
Contributors67−10 vs prior 12 months
Maintainers4+5 joined · −7 left, last 12 months
Bus factor1committers behind half the commits
Community-filed97%of issues opened, last 12 months
Median time to close3.8 daysfirst maintainer reply 6.9 hours
Open backlog22of 978 issues ever filed
Issues opened / month0 · 0communitymaintainers
Open backlog22
Contributors / month1
Commits / month2
Stars6,756
Issue themes, last 12 months
features 3%
docs 1%
other 96%
Counts from the project's public repository and git history; no individuals
are identified. Maintainers are the committers covering 80% of the last year's
commits. how we measure this
Add the badge to your README
Maintain this project? The badge links readers straight to this page, so they can
follow every release here.