Strategy
Keeping pace with upstream
Goal
Produce byte-identical fastqc_data.txt and summary.txt
for the same inputs as
Java FastQC,
so the two can be used interchangeably.
Equivalence testing
UPSTREAM.toml pins the tracked Java FastQC version.
A nightly CI job checks for new releases and opens a GitHub issue when one appears.
Every commit is tested against stored Java reference output across 18 test cases,
covering text files (byte-identical), HTML structure, SVG charts (normalised), and
pixel-level PNG comparison.
See the equivalence report for details.
The only known differences are in chart rendering — Rust bundles Liberation Sans instead of system Arial, and uses resvg + tiny-skia instead of Java2D for PNG output, so antialiasing and text positions differ slightly — plus deliberate bug fixes documented in the changelog, such as using the specified Phred+33 encoding for BAM/SAM input instead of inferring it (#6).
Upstream contributions
Pull requests submitted to s-andrews/FastQC to port improvements upstream:
- #185 — Bundle Liberation Sans font (merged). Eliminates system font dependency and aligns chart text metrics between Java and Rust.
- #186 — Update integration test snapshots for the bundled font.
- #187 — Trim trailing empty rows from Adapter Content when
--min_lengthis used. - #210 — Use the Phred+33 encoding fixed by the BAM/SAM format instead of inferring it from the data (issue #209).
Features ported from upstream PRs (not yet merged):
- #161 — HTML report design refresh. Available in the Rust rewrite as the modern template (
--template modern).
Coming soon (code awaiting clean-up and PR creation):
- pditommaso/FastQC — fork by Paolo Di Tommaso. Achieves 2-3x speed gains.