Unofficial community rewrite

FastQC, rewritten in Rust

An unofficial rewrite of FastQC, the sequencing QC tool by Simon Andrews at the Babraham Institute.

You should probably use the official Java version, not this one.

This project is to be a faithful rewrite of FastQC, with as-close-to identical outputs as possible. The hope is to port improvements back upstream until the rewrite provides no additional functionality or speed. It's basically a development fork in a different language, albeit with a Rust crate for folks building in that ecosystem.

For regular use, it's probably best to stick with the official Java version from Babraham or GitHub.

Official Java FastQC ↗ Why does this exist?
FastQC report screenshot

OK, but why does this exist?

Valid question..

Upstream contributions

It started off as a "what if.." and turned into more of a sandbox for prototyping improvements, that will hopefully get ported back to the main Java FastQC. The goal is to make the canonical tool better, not to replace it or fragment community usage.

Rust crate

Published as fastqc-rust for developers building bioinformatics tooling in the Rust ecosystem. Produces virtually identical output to the Java version. See the library guide for usage from another Rust program.

Performance

Single-threaded, one file (7.3 GB Illumina WES). Full benchmarks.

Expect this gap to narrow, most of these speedups are being contributed upstream.

Wall clock time

Java
9m 46s
Rust
3m 13s 3.0x faster

Peak memory (RSS)

Java
444 MB
Rust
28 MB 16x less

Install

With binary

# Linux x86_64 example -- see docs for all platforms
curl -fsSL https://github.com/ewels/FastQC-Rust/releases/download/v0.12.1/fastqc-linux-x86_64.tar.gz | tar xz --strip-components=1
sudo mv ./fastqc /usr/local/bin/

With Docker

docker run ghcr.io/ewels/fastqc-rust:dev fastqc sample.fastq.gz

From crates.io

cargo install fastqc-rust

From source

git clone https://github.com/ewels/FastQC-Rust.git
cd FastQC-Rust && cargo build --release

Usage

fastqc sample.fastq.gz                    # single file
fastqc -o results/ *.fastq.gz             # batch with output dir
fastqc -t 4 --format bam aligned.bam      # parallel, BAM input

The CLI matches the original. See fastqc --help for all options.