PAGES
← all tools
◆ SAST / SCA / Code Security

aflplusplus

v5.03c open-source

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!

Summary

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!

How aflplusplus helps

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

all 64 features, with the evidence for each →

Languages

Not documented

Features

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.

Compare with peers →

What aflplusplus offers you

  • Command-line interface8
  • Plugin API support3
  • Plugin system3
  • Python scripting support2
  • Scripting language support2
  • Scripting API1
All capabilities 64 capabilities
Fuzzer session management shipped Provides 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 support shipped Supports 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
  • Refreshes FreeBSD support. v5.00c · 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 environments shipped Supports 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
  • Adds LLVM 20 support in afl-cc. v4.31c · Feb 2025 · source · release history
  • Enables TriCore architecture support in unicorn mode for fuzzing target binaries 4.04c · Oct 2022 · source · release history
  • AFL++ now works on Android (frida_mode) 4.02c · Aug 2022 · source · release history
QEMU mode binary-only fuzzing shipped Fuzzes 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 list shipped Controls 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 instrumentation shipped Adds 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 control shipped Allows 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
  • CLI option -c - to disable CMPLOG 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 strategies shipped Supports 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 new grammar custom mutator atnwalk 4.07c · Jun 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 support shipped afl-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
  • Adds LLVM 23 support in afl-cc. v5.00c · Jun 2026 · source · release history
  • Adds LLVM 22 support in afl-cc. v4.40c · Mar 2026 · source · release history
  • Adds support for LLVM 15 native pcguard changes 4.06c · Apr 2023 · source · release history
  • Extends afl-gcc-fast (gcc_mode) compatibility down to GCC version 3.6 4.04c · Oct 2022 · source · release history
  • llvm_mode LTO now requires llvm11 2.64c · Apr 2020 · source · release history
Fuzzer environment variable handling shipped Supports 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 integration shipped Compiles 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 support shipped Enables 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 monitoring shipped Provides 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 integration verified Supports 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

Custom mutation library support shipped Allows 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 performance shipped Uses 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 instrumentation shipped Provides 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 hooks shipped Allows 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 handling shipped Improves 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 customization shipped Provides 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 debugging shipped Offers 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 instrumentation shipped Implements 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 enforcement shipped Crashes 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 mutator shipped Provides 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 scheduling shipped Provides 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 analysis verified Accepts 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

Corpus minimization configuration shipped Controls 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 minimization shipped Automatically 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 guidance shipped Enables 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

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 scheduling shipped Records 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 integration shipped Invokes 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 tracking shipped Extends 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 support shipped Enables 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
  • Adds nyx_mode support across all tools 4.06c · Apr 2023 · source · release history
Fuzzing session exit criteria shipped Enables 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 syntax shipped Supports 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-processing shipped Allows 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 configuration shipped Allows 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 boundaries shipped Enables 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 parallelism shipped Enables 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 maps shipped Disables 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 switching shipped Automatically 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 support shipped Allows 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 instrumentation shipped Instruments 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 fuzzing shipped Implements 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
Licensing shipped AFL++ 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 compilation shipped Allows 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 speed shipped Skips 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 assistance shipped Provides 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 control shipped Allows 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 optimizations shipped Enables 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 control shipped Allows 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 utility shipped Provides 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 instrumentation shipped Scores 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 macOS shipped Enhances cmplog instrumentation quality when building targets with afl-cc on macOS. 1 release · first seen Jun 2026

release

Coverage analysis companion shipped Integrates 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 integration shipped Allows 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 support shipped Enables 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 minimization shipped Extends 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 support shipped Supports 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

release

Corpus minimization performance optimization shipped Optimizes 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 configuration shipped Allows 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 automation shipped Provides 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 integration shipped Provides 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 fuzzing shipped Intercepts 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.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median 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.

Score cards are part of every paid plan.

See plans →

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.

Checking release-note history…

Explore the full chart →

Releases

Show

44 entries

  1. September 20261
  2. June 20265
  3. March 20261
  4. December 20251
  5. October 20251
  6. June 20251
  7. February 20251
  8. December 20241
  9. June 20241
  10. April 20241
  11. February 20241
  12. December 20231
  13. August 20231
  14. June 20231
  15. April 20231
  16. January 20231
  17. October 20221
  18. September 20221
  19. August 20221
  20. June 20221
  21. January 20221
  22. July 20211
  23. June 20211
  24. March 20213
  25. December 20201
  26. September 20201
  27. August 20201
  28. July 20201
  29. May 20201
  30. April 20202
  31. February 20201
  32. December 20192
  33. October 20191
  34. September 20191
  35. July 20191
  36. June 20191
    Show

    44 entries

    Project health

    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.

    1. Contributors 67 −10 vs prior 12 months
    2. Maintainers 4 +5 joined · −7 left, last 12 months
    3. Bus factor 1 committers behind half the commits
    4. Community-filed 97% of issues opened, last 12 months
    5. Median time to close 3.8 days first maintainer reply 6.9 hours
    6. Open backlog 22 of 978 issues ever filed
    1. Issues opened / month 0 · 0 communitymaintainers
    2. Open backlog 22
    3. Contributors / month 1
    4. Commits / month 2
    5. Stars 6,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.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →