Upstream contributions
Changes to FastQC
The Rust rewrite works as a development sandbox for FastQC. Ideas get prototyped and benchmarked here, and the equivalence tests catch bugs. What works then goes back to Java FastQC as pull requests. The aim is a better canonical tool, not a replacement for it. Many of these changes shipped in FastQC v0.13.0.
Released in FastQC v0.13.0
Performance
- #197 — About 3x faster with parallel processing.
Each file now runs through a small pipeline: one reader thread (decompression and parsing)
feeds up to three processor threads, each of which owns a subset of the QC modules.
-tis now a total CPU budget. This work started with Paolo Di Tommaso's experiments. Each change was then benchmarked on its own to find the smallest change with the biggest effect. - #199 — Removes the per-sequence
char[]allocations in seven QC modules.
SVG graphs
- #200 — SVG is now the default graph format in the HTML report.
Graphs are sharp at any zoom level and easy to edit for publication. Use
--pngto get PNG graphs again. - #188 — Smaller SVG output. Uses presentation attributes, merges line segments into polylines and merges runs of same-colour rectangles. Data lines are also thicker.
Correctness
- #187 — Adapter Content showed empty trailing rows when
--min_lengthwas set. The Rust equivalence tests found this. Upstream then reworked--min_lengthinto a real read-length filter, and added--max_length. - #209 — Encoding detection misread high-quality data (no base below Q31) as Illumina 1.5,
so every quality score was 31 too low. The Rust rewrite found this with BAM input.
In v0.13.0 Phred+33 is the default for all input, and
--phred64is now an opt-in. - #203 — Basic Statistics now reports mean and median read length.
Project infrastructure
Merged into a feature branch
These are merged into the upstream liberationfont branch, but that branch is not yet in master
(#216). #217 merges it into master.
Open pull requests
- #205 — Mean read length to one decimal place, and the standard median for an even number of reads.
- #196, #195 — Move the HTML report layout into template fragments, and fix some small HTML problems.
- #161 — HTML report design refresh. The Rust rewrite already has this as the
modern template (
--template modern).
How it works
The Rust rewrite follows upstream releases (see strategy). The equivalence tests run the Java and Rust versions on the same inputs and compare their outputs. A difference is either a Rust bug or a Java bug. Java bugs become upstream issues and pull requests. When upstream releases a fix, the Rust rewrite gets the same change, so the two outputs stay identical.