What fuzz output formats are available in EK9?
← Fuzzing and Mutation Testing · Ref: Q751
EK9 fuzzing supports four output formats, using the same suffix pattern as the test runner (-t flags).
OUTPUT FORMAT FLAGS
ek9 -fuzz <minutes> Human-readable output (default, same as -fuzz1). ek9 -fuzz0 <minutes> Terse output: one-line CI pass/fail summary. ek9 -fuzz2 <minutes> JSON output: fuzz-report.json + fuzz-snapshots.jsonl. ek9 -fuzz6 <minutes> HTML dashboard: fuzz-report/index.html.
HUMAN-READABLE (-fuzz)
Shows a rolling summary with iterations per second, crash count, phase distribution, and error code histogram. Best for interactive development.
TERSE (-fuzz0)
One-line output suitable for CI pipelines: total iterations, crashes found, duration. Exit code 0 if no crashes, non-zero otherwise.
JSON (-fuzz2)
Structured output for programmatic analysis:
fuzz-report.json: final summary with crash count, iterations, timing. fuzz-snapshots.jsonl: periodic snapshots for throughput graphing.
Ideal for AI-assisted analysis or custom dashboards.
HTML DASHBOARD (-fuzz6)
Interactive report at fuzz-report/index.html with:
Error code heatmap, phase distribution chart, throughput curve.
Same visual quality as the -t6 coverage dashboard.
CI INTEGRATION
For CI, use -fuzz0 with a short duration as a smoke test:
ek9 -fuzz0 5
Check the exit code and fail the build if crashes are found.
See Q749 for fuzzing overview. See Q750 for running the fuzzer. See Q752 for reading the HTML dashboard. See Q157 for test output formats (same suffix pattern).
Example
defines module qa.fuzzingandmutation.outputformats <?- Demonstrates code with multiple output paths that would produce different fuzz statistics depending on coverage. The output format flags control how those statistics are reported, not what the code does. -?> defines function categorise() as pure -> score as Integer <- category as String: "unknown" failThreshold <- 40 passThreshold <- 70 excellentThreshold <- 90 if score < failThreshold category: "fail" else if score < passThreshold category: "pass" else if score < excellentThreshold category: "good" else category: "excellent" formatResult() as pure -> studentName as String score as Integer <- report as String: String() grade <- categorise(score) report: `${studentName}: ${score} (${grade})` defines program FuzzOutputFormatsDemo() stdout <- Stdout() scores <- [35, 55, 78, 95] names <- ["Alice", "Bob", "Carol", "Dave"] idx <- 0 defaultName <- "Unknown" for score in scores studentName <- names.getOrDefault(idx, defaultName) if studentName? stdout.println(formatResult(studentName, score)) idx: idx + 1
Other ways to ask this
- What is the difference between -fuzz, -fuzz0, -fuzz2, and -fuzz6?
- How do I get JSON output from the EK9 fuzzer?
- How do I integrate EK9 fuzzing into CI?
Coming from another language?
Java: Jazzer outputs to stdout or JUnit XML (limited formats). Python: Atheris writes crash files, no structured output. Rust: cargo-fuzz outputs crash files and stdout only. Go: go test -fuzz writes to testdata/ directory. EK9: four built-in output formats (human, terse, JSON, HTML) matching the test runner pattern, with CI-friendly exit codes.
Keywords: fuzz2, report, dashboard, fuzz6, fuzz, html, CI, format, json, terse, output, fuzz0