How to Run FastQC Without Installing Anything
10 min read · Updated August 5, 2026
FastQC is the default first look at sequencing data, and getting it running is a disproportionate amount of the work: a Java runtime, a download, and a command line, all to answer the question "is this data usable".
You can skip that. This guide covers what each module actually measures, the specific numeric cutoffs behind the green ticks and red crosses — these are published, not mysterious — and which failures matter versus which are expected for your library type. A red cross on a FastQC report is far more often a property of the experiment than a problem with the data.
Get the report first
SeqBench's FASTQ QC Report reimplements FastQC's published methodology from Babraham Bioinformatics' own documentation — the same modules, the same thresholds, the same pass/warn/fail verdicts — from a paste, with no install and no Java. Paste your FASTQ, pick the quality encoding, and read the report.
One thing to set correctly before you interpret anything: the Phred encoding. Modern Illumina output is Phred+33, where the quality character's ASCII value minus 33 gives the score. Data from older Illumina pipelines (roughly 1.3 to 1.7) used Phred+64. Get this wrong and every quality number in the report is off by 31, which turns good data into apparent garbage or the reverse.
While you are there, the Phred scale itself is worth having in mind: Q20 is a 1-in-100 chance the base call is wrong, Q30 is 1 in 1,000, and Q40 is 1 in 10,000. Q30 is the usual informal bar for "good".
Per-base sequence quality, and its exact thresholds
This is the module everyone looks at first: a box-and-whisker plot of quality scores at each position along the read. The characteristic shape is high and flat for most of the read, declining toward the 3' end. Some decline is normal and expected — it reflects how sequencing chemistry degrades over cycles, not a problem with your sample.
The verdicts are computed against published cutoffs, and knowing them stops you guessing. The module warns if the lower quartile at any base drops below 10, or the median at any base drops below 25. It fails if the lower quartile at any base drops below 5, or the median below 20.
Note that both are worst-position rules. A single bad cycle near the end of a 150 bp read can fail the module while 145 positions are excellent. That is why a red cross here is a prompt to look at the plot rather than a verdict on the run: if the failure is confined to the last few positions, trimming resolves it and nothing about your library is wrong.
GC content: the module that fails for real reasons
Per-sequence GC content plots the distribution of GC across your reads against a theoretical normal curve fitted to the data's own modal GC. It warns when the summed deviation from that curve exceeds 15% of reads, and fails at 30%.
The shape of the deviation is the diagnostic, and this is the most genuinely informative module in the report. A sharp spike on an otherwise smooth distribution points to a specific contaminant with a defined sequence — adapter dimers are the classic case. A broad secondary peak points to contamination with another organism, whose genome has a different characteristic GC. A distribution that is smooth but shifted away from the expected value suggests systematic bias rather than contamination.
This module also fails routinely and correctly on library types that are not uniform genomic DNA. Amplicon and targeted panels sequence a small defined region whose GC has no reason to be normally distributed. RNA-seq is not sampling the genome uniformly either. A failure here for a targeted library tells you the library is targeted.
Duplication and overrepresented sequences
Sequence duplication levels warns when non-unique sequences exceed 20% of the total and fails above 50%. Overrepresented sequences flags any single sequence accounting for more than 0.1% of reads, and fails above 1%.
Both use a documented sampling scheme that is worth knowing, because it explains numbers that otherwise look wrong. New distinct sequences are only tracked from the first 100,000 reads in the file, which bounds memory on large files — though every later read still increments the count of a sequence already being tracked. And reads longer than 75 bp are truncated to their first 50 bp for this analysis, on the reasoning that sequencing errors in long reads would otherwise make genuine duplicates look distinct. So the duplication figure is an estimate from a sample, not an exact count.
Interpretation depends entirely on library type. High duplication in whole-genome sequencing suggests over-amplification from too little input. In RNA-seq it is largely expected, because a highly expressed transcript genuinely produces many identical reads and that is the signal you are measuring. In an amplicon library, near-total duplication is the design. Before treating duplication as a problem, ask whether your protocol predicts it.
For overrepresented sequences, look at what the sequence is. Adapter, poly-A or poly-G runs indicate a technical artefact. A recognisable biological sequence in RNA-seq is usually a highly expressed gene. Poly-G specifically is a known artefact of two-colour Illumina chemistry, where absent signal reads as G.
Adapter content
This module screens reads for the actual published adapter sequences rather than guessing: the Illumina TruSeq adapters (and the 13 bp universal prefix they share), the Nextera transposase sequence, and the small RNA 3' adapter. A read is counted as containing adapter from the first position where the match occurs through to the end of the read, which is why adapter content curves rise monotonically toward the 3' end.
Adapter appears when your insert is shorter than your read length, so the sequencer reads off the end of the fragment and into the adapter. That makes it a statement about your fragment size distribution. Small-RNA libraries have adapter in essentially every read by construction. A 150 bp read on a library with a mean insert of 180 bp will pick up some adapter at the tail.
This is the most straightforwardly actionable module in the report: adapter content is removed by trimming, and it should be, because leftover adapter causes soft-clipping or mismapping downstream. It is a to-do item rather than a reason to be concerned about the library.
Which failures actually matter
The single most useful reframing of a FastQC report is that pass/warn/fail is calibrated against a hypothetical uniform, diverse, whole-genome library. Most real libraries are not that, so most red crosses are describing your experimental design back to you.
- Usually a real problem: quality collapsing across the whole read rather than just the tail, a bimodal GC distribution you cannot account for, or overrepresented sequences that are neither adapter nor a plausible transcript.
- Usually expected, given the library: high duplication in RNA-seq or amplicon data, GC failure on a targeted panel, adapter content in a small-RNA library, uniform read length in trimmed data, biased per-base composition in the first cycles of a random-primed RNA-seq library.
- Fixable by trimming, not a verdict: quality decline confined to the 3' end, and adapter content. Do the trimming, then re-run and compare — the second report is the one that tells you whether anything was actually wrong.
- Worth checking before anything else: the Phred encoding. A whole report that looks catastrophically bad is often a Phred+64 file read as Phred+33.
What a browser report will not do
Being straightforward about the limits: a paste-based report suits a look at one file or a spot-check on a subsample, not a production pipeline over hundreds of libraries. If you are processing a whole run, you want FastQC or fastp invoked from a workflow with MultiQC aggregating the results, and that is the right tool for that job.
There is also one module that genuinely cannot be reproduced from sequence alone. FastQC's per-tile sequence quality needs the flowcell coordinates embedded in original Illumina read headers, so it is unavailable for any file whose headers have been rewritten — which includes most data downloaded from public archives, regardless of which tool you use.
Once the reads pass QC and you are checking them against an expected sequence rather than assessing them in the abstract, that is a different question and a different tool: aligning many reads to a reference and calling only the variants multiple reads agree on is what read-back verification is for.
Frequently asked questions
Can I run FastQC without installing Java?
Yes. SeqBench's FASTQ QC Report is a from-scratch implementation of FastQC's published methodology — the same modules and the same documented pass/warn/fail thresholds, taken from Babraham Bioinformatics' own documentation — that runs from a pasted FASTQ in the browser with no install and no Java runtime.
What are FastQC's actual warn and fail thresholds?
They are published per module. Per-base sequence quality warns if any base's lower quartile falls below 10 or its median below 25, and fails at 5 and 20 respectively. Per-sequence GC content warns when deviation from the fitted normal exceeds 15% of reads and fails above 30%. Duplication warns above 20% non-unique and fails above 50%. Overrepresented sequences warns at 0.1% of reads and fails at 1%.
Why did my per-base sequence quality module fail when most of the read looks fine?
Because the rule applies to the worst position, not the average. A single cycle where the lower quartile drops below 5 or the median below 20 fails the module even if the other 145 positions of a 150 bp read are excellent. Look at where on the plot the failure sits: if it is confined to the 3' end, trimming resolves it and nothing is wrong with the library.
Is high duplication in my FASTQ a problem?
It depends entirely on the library. In whole-genome sequencing it suggests over-amplification from too little input. In RNA-seq it is largely expected, since a highly expressed transcript genuinely yields many identical reads — that is the signal. In an amplicon library near-total duplication is the intended design. Ask whether your protocol predicts duplication before treating it as a defect.
Why is my duplication percentage only an estimate?
Because of the documented sampling scheme. New distinct sequences are only tracked from the first 100,000 reads in the file to bound memory, although reads later in the file still increment counts for sequences already being tracked. Reads over 75 bp are also truncated to their first 50 bp, so that sequencing errors late in long reads do not make genuine duplicates appear distinct.
What does a bimodal GC content distribution mean?
Usually contamination, and the shape distinguishes the kind. A sharp spike on an otherwise smooth curve points to a specific contaminant sequence, with adapter dimers the classic case. A broad second peak points to another organism, whose genome has a different characteristic GC. A smooth curve shifted off the expected value suggests systematic bias instead. Note that targeted panels and amplicon libraries fail this module by design, since they are not sampling a genome uniformly.
Why can't a browser tool show per-tile sequence quality?
That module needs the flowcell coordinates embedded in original Illumina read headers, not just the sequence and quality strings. Any file whose headers have been rewritten — which covers most data downloaded from public archives — cannot support it in any tool, not only a browser-based one.
My whole report looks terrible. What should I check first?
The Phred encoding. Modern Illumina data is Phred+33; older Illumina pipelines (roughly 1.3 to 1.7) used Phred+64. Reading a Phred+64 file as Phred+33 shifts every quality score by 31 and makes good data look catastrophic. Confirm the encoding before investigating anything about the library itself.
Related references
Related tools
Per-base quality, GC and length distributions, duplication levels, overrepresented sequences and adapter content, each with a warn/fail verdict.
Summarise and validate FASTA or FASTQ: counts, N50, GC, quality.
Align many NGS/Nanopore/Sanger reads to a reference with minimap2, call multi-read consensus variants, and build a corrected consensus sequence.