Reporters
Mull comes with several different reporters, each suited for a different use-case.
| Reporter | Best used for |
|---|---|
IDE | Local development — results printed inline, same format as compiler warnings |
SQLite | Aggregating results across multiple runs or binaries before generating a final report |
GitHubAnnotations | CI on GitHub — surviving mutants appear as inline comments on pull requests |
SARIF | GitHub Code Scanning — upload surviving mutants as security alerts to the GitHub Security tab (see guide) |
Elements | Sharing a rich, interactive HTML report with your team |
Patches | Inspecting individual mutants — generates a patch file per mutant for detailed review |
Both mull-runner and mull-reporter share the same reporters and the same reporter configurations.
Typical usage is as follows:
# runs mutants from `test.exe` and stores results into files `/tmp/a-report.txt` and `/tmp/a-report.sqlite`# for the `IDE` and `SQLite` reporters, respectivelymull-runner-22 test.exe -reporters IDE -reporters SQLite -report-dir /tmp -report-name a-report# generates an `IDE` report from `/tmp/a-report.sqlite` and prints results into stdoutmull-reporter-22 /tmp/a-report.sqliteSee the mull-runner CLI and mull-reporter CLI refs for more details.
This is the default reporter, it is enabled even if none of the reporters are specified. It is designed after the typical warnings and errors produced by a compiler.
By default, it prints results to stdout, e.g.:
mull-runner-22 range_tests[info] Using config /workspaces/mull/demo/mull.yml[warning] Could not find dynamic library: libc.so.6[info] Warm up run (threads: 1) [################################] 1/1. Finished in 3ms[info] Baseline run (threads: 1) [################################] 1/1. Finished in 0ms[info] Running mutants (threads: 7) [################################] 7/7. Finished in 3ms[info] Survived mutants (2/7):/workspaces/mull/demo/main.c:5:16: warning: Survived: Replaced >= with > [cxx_ge_to_gt] return value >= min && value < max; ^/workspaces/mull/demo/main.c:5:32: warning: Survived: Replaced < with <= [cxx_lt_to_le] return value >= min && value < max; ^[info] Mutation score: 71%[info] Surviving mutants: 2[info] Total execution time: 34msIn case -report-name/-report-dir is provided, the same output is stored in $dir/$file.txt.
SQLite
Section titled “SQLite”This is a reporter which is useful for post-processing or aggregation of the results across several runs.
See Multiple Test Targets guide for an example.
By default, stores the result in the current folder with the file name $timestamp.sqlite.
In case -report-name/-report-dir is provided, the report is stored in $dir/$file.sqlite.
GitHub Annotations
Section titled “GitHub Annotations”This reporter is useful in the context of GitHub pull requests.
It prints annotations to the stdout, the annotations are then presented in the GitHub UI.
The -report-name/-report-dir args are ignored.
Elements HTML
Section titled “Elements HTML”Mutation Testing Elements is an open-source web component for visualizing mutation testing results, originally developed by the Stryker project. It renders an interactive HTML report that lets you browse mutants by file, filter by status, and drill into individual mutations — making it easier to share and review results with a team compared to plain text output.
This reporter generates a self-contained HTML report in that format.
By default, it generates the report in the current working directory $timestamp.html/$timestamp.json.
In case -report-name/-report-dir is provided, the report is stored in $dir/$file.html and $dir/$file.json.
See the dashboard example here: stryker-net/master - Stryker Dashboard.
SARIF (Static Analysis Results Interchange Format) is a standard JSON format for static analysis tool output. GitHub Code Scanning can ingest SARIF files and display the results as alerts in the repository’s Security tab, making it possible to track surviving mutants alongside other code quality issues.
This reporter generates a SARIF 2.1.0 file containing only survived mutants — killed mutants are not included. Survived mutants are reported as warning-level results; mutants that were not covered by any test are reported as note-level results.
By default, the report is stored in the current working directory as $timestamp.sarif.
In case -report-name/-report-dir is provided, the report is stored in $dir/$file.sarif.
By default, file paths in the SARIF output are absolute. When uploading to GitHub Code Scanning, use --report-patch-base <DIR> to strip the given directory prefix from all paths and emit relative URIs instead. This allows GitHub to correctly map results to files in the repository:
mull-runner-22 --reporters Sarif --report-name results --report-patch-base /path/to/repo ./testsPatches
Section titled “Patches”This reporter generates a separate git-compatible patch-file for each mutation.
By default, it stores patchfiles in the directory $PWD/%timestamp-patches.
In case -report-name/-report-dir is provided, the report is stored under $dir/$file-patches/ directory.
See Generating Patches guide for more details.