Skip to content
 
 

Repository files navigation

Welcome to Fandango!

PyPI Release Last Release Tests Code Quality Checks CodeQL Analysis PyPI Downloads PyPI Downloads GitHub stars

Fandango is a powerful generator of inputs and interactions designed for software testing. Given the specification of a program's input or interaction language, Fandango quickly generates a myriad of valid inputs to test your systems.

✨ Expressive & Flexible Specifications

Fandango's specification language combines a grammar with constraints written in Python, making it incredibly expressive.

  • Custom Testing Goals: Define exactly what you need. If you require your inputs to have particular values or follow specific distributions, you can express these testing goals directly in Fandango right out of the box.

🚀 Versatile Modes of Operation

Fandango adapts to your workflow by supporting multiple operating modes:

  • Black-Box Fuzzing (Default): Generate inputs directly from a .fan Fandango specification file.
  • Input Mutation: Feed Fandango your sample inputs, and it will mutate them to obtain more complex and realistic test cases.
  • Protocol Fuzzing: Generate dynamic interactions. Fandango can act as a client or server, producing and reacting to interactions according to your protocol specifications.

🧠 Under the Hood

Fandango comes as a portable Python program, meaning it runs easily on a large variety of platforms. To produce its inputs, it leverages sophisticated evolutionary algorithms. It starts with a population of random inputs and systematically evolves them through mutations and cross-overs until they perfectly fulfill your given constraints.

🗺️ Road to 2026

Fandango is in active development! We are constantly expanding its capabilities. Features planned for 2026 include:

  • Coverage-guided testing
  • Code-directed testing
  • High-diversity input generation
  • ...and much more!

Installation

Fandango requires Python 3.11 or later:

$ pip install fandango-fuzzer

Then write a specification and generate inputs from it:

$ fandango fuzz -f your_spec.fan -n 10

See Installing for other options, including building from source.

📚 Ready to dive deeper? For complete documentation, including tutorials, references, and advanced usage guides, visit the Fandango Documentation.

New to Fandango? The hands-on tutorial takes one small protocol and works up from random bytes to a stateful conversation, one idea at a time.

Contributing

Contributions are welcome, and reporting a bug or fixing a typo counts.

  • Contributing guide covers setting up a development environment, what our CI checks, and how to get a pull request merged. Please note that we ask you to comment on an issue and be assigned before starting work on it.
  • Code of Conduct applies to everyone taking part.
  • Getting help if something is unclear or not working.
  • Security policy for reporting vulnerabilities. Please report these privately via GitHub's security advisory form, not as a public issue.

Citing Fandango

If you use Fandango in academic work, please cite the ISSTA 2025 paper FANDANGO: Evolving Language-Based Testing. GitHub's "Cite this repository" button, backed by CITATION.cff, generates this for you:

@article{zamudio2025fandango,
  author  = {Zamudio Amaya, Jos\'{e} Antonio and Smytzek, Marius and Zeller, Andreas},
  title   = {{FANDANGO}: {E}volving Language-Based Testing},
  journal = {Proc. ACM Softw. Eng.},
  volume  = {2},
  number  = {ISSTA},
  articleno = {ISSTA040},
  numpages  = {23},
  year    = {2025},
  month   = jun,
  doi     = {10.1145/3728915},
  url     = {https://doi.org/10.1145/3728915},
  publisher = {Association for Computing Machinery}
}

Note that the first author's family name is "Zamudio Amaya".

License

Fandango is licensed under the European Union Public Licence V. 1.2. See the LICENSE file for details.

About

FANDANGO is a language-based fuzzer that leverages formal input specifications (grammars) combined with constraints to generate diverse sets of valid inputs for programs under test.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages