Skip to content
RNA-Seq

STAR vs HISAT2: RNA-Seq Aligner Comparison

A practical, benchmark-informed comparison of STAR and HISAT2 for short-read RNA-Seq alignment — accuracy, memory, speed, splice discovery, and when to prefer each.

PR Marcus Nkemdirim 11 min read STAR HISAT2 Alignment

Every bulk RNA-Seq pipeline needs a spliced aligner, and for the last decade the choice has boiled down to two: STAR (Dobin et al., 2013) and HISAT2 (Kim et al., 2019). Both are actively maintained, both are used in flagship publications, and both handle short-read paired-end data well. So which do you pick?

This article is a practical decision guide, not a re-benchmark. We assume you have short paired-end Illumina reads and a decent reference. We’ll compare on the axes that actually matter in a real project: accuracy, memory, speed, splice-junction discovery, downstream compatibility, and reproducibility.

Short answer

  • Use STAR if you have 32 GB+ RAM per job, care about novel splice-junction discovery, or are building a fusion / splice-QTL pipeline.
  • Use HISAT2 if you’re on shared HPC with per-user RAM caps, aligning bacterial / non-model species with tight compute, or running a huge cohort where indexing time dominates.
  • Either is fine for standard human/mouse bulk RNA-Seq → featureCounts → DESeq2. Pick and stick.

1. Algorithm at a glance

AspectSTARHISAT2
Core algorithmSuffix array + seed extensionHierarchical FM-index (global + local)
Splice-awareYes (two-pass optional)Yes (single-pass)
Multi-threaded indexYesYes
Multi-mapper resolutionCustom MAPQ + primary flagSimilar
OutputSAM/BAM, wig, tab-separated splice junctionsSAM/BAM, splice sites file

STAR uses uncompressed suffix arrays for fast seed lookup — that’s where the RAM cost comes from. HISAT2 uses a graph-based FM-index with a two-level hierarchy that lets it fit human in about 8 GB.

2. Building the index

STAR:

STAR --runMode genomeGenerate \
  --genomeDir ref/star_index \
  --genomeFastaFiles ref/GRCh38.primary_assembly.genome.fa \
  --sjdbGTFfile ref/gencode.v46.annotation.gtf \
  --sjdbOverhang 100 \
  --runThreadN 16

Index size: ~30 GB on disk, ~30 GB RAM at build.

HISAT2:

hisat2_extract_splice_sites.py ref/gencode.v46.annotation.gtf > ref/splice_sites.txt
hisat2_extract_exons.py       ref/gencode.v46.annotation.gtf > ref/exons.txt
hisat2-build -p 16 \
  --ss ref/splice_sites.txt \
  --exon ref/exons.txt \
  ref/GRCh38.primary_assembly.genome.fa \
  ref/hisat2_index/grch38

Index size: ~8 GB on disk, ~200 GB RAM at build (yes, really — build once on a fat node).

3. Alignment

STAR (recommended flags for typical bulk RNA-Seq):

STAR --runMode alignReads \
  --genomeDir ref/star_index \
  --sjdbGTFfile ref/gencode.v46.annotation.gtf \
  --readFilesIn sample_R1.fastq.gz sample_R2.fastq.gz \
  --readFilesCommand zcat \
  --outSAMtype BAM SortedByCoordinate \
  --twopassMode Basic \
  --outSAMstrandField intronMotif \
  --outFileNamePrefix bam/sample_ \
  --runThreadN 16

HISAT2:

hisat2 -x ref/hisat2_index/grch38 \
  -1 sample_R1.fastq.gz -2 sample_R2.fastq.gz \
  --dta --rna-strandness RF \
  -p 16 -S sample.sam
samtools sort -@ 8 -o bam/sample.bam sample.sam
samtools index bam/sample.bam

The --dta flag emits XS attributes for downstream StringTie transcript assembly. Add --rna-strandness RF for standard TruSeq stranded libraries; drop it for unstranded.

4. What benchmarks say

Multiple community benchmarks — Baruzzo et al. (2017), the SEQC2 consortium, and follow-up work — agree on the same broad picture:

  • STAR has a slight edge in splice-junction sensitivity and novel-junction discovery, especially with two-pass mode.
  • HISAT2 has a slight edge in speed per CPU-hour and a dramatic edge in RAM footprint.
  • Gene-level counts from featureCounts on the two aligners’ BAMs correlate above r = 0.99. Downstream DE calls with DESeq2 or edgeR are essentially identical.
  • Both handle circRNA back-splice junctions poorly compared to specialized tools like CIRCexplorer2 or CIRI2.

If your goal is a differential expression table, the choice of aligner does not meaningfully change the biological conclusions of your study.

5. Downstream compatibility

Both produce standard sorted BAMs, so featureCounts, RSeQC, Salmon-in-alignment-mode, and Qualimap all work identically.

Where compatibility matters:

  • StringTie works with either, but expects --dta from HISAT2 or --outSAMstrandField intronMotif from STAR.
  • rMATS and MISO for alternative splicing prefer STAR’s splice-junction files.
  • Arriba and STAR-Fusion for gene-fusion detection require STAR output specifically.

6. Reproducibility gotchas

  • Multi-mappers. STAR’s default caps at 10 secondary alignments per read; HISAT2 defaults to primary-only. If you count multi-mappers with featureCounts (-M --fraction), the two aligners will diverge.
  • Soft-clipping. STAR clips more aggressively in two-pass mode. For splice-QTL calling, this improves junction accuracy but reduces read length uniformity.
  • Version drift. Both projects push meaningful bug fixes yearly. Pin the version in your conda environment (star=2.7.11b, hisat2=2.2.1).

7. Decision matrix

ScenarioRecommendation
Standard human/mouse bulk RNA-Seq, plenty of RAMSTAR
Shared HPC with strict per-job RAM capsHISAT2
Fusion detection, splice-QTL, novel junctionsSTAR (two-pass)
Non-model organism, small budgetHISAT2
Very large cohort (500+ samples), throughput-limitedHISAT2 (or Salmon pseudo-alignment)
Publishing in a journal that requires the “standard” pipelineSTAR
You need transcript-level TPMs, not gene countsUse Salmon or Kallisto pseudo-alignment instead

8. When neither is the right tool

If your primary output is transcript-level abundance or you’re dealing with 1000+ samples, skip alignment entirely and use pseudo-alignment (Salmon or Kallisto). It’s 10-50× faster and gives you TPMs directly. See our Kallisto vs Salmon comparison.

For long-read RNA-Seq (PacBio Iso-Seq, Nanopore direct-RNA), forget both — use minimap2 with -ax splice or -ax splice:hq.

Bottom line

The STAR vs HISAT2 debate is much older than it is important. Both are excellent, both are well-maintained, both give you the same DE genes on standard bulk RNA-Seq. Optimize for your compute constraints and downstream tools, pin the version in your workflow, and stop worrying.

Related reading: our end-to-end RNA-Seq guide uses STAR by default; swap in HISAT2 with the commands above and the rest of the pipeline is identical.

FAQ

Q. Is STAR always more accurate than HISAT2?

A. For splice-junction discovery on well-annotated species (human, mouse), STAR is marginally more sensitive at the cost of ~4-5× the memory footprint. For gene-level differential expression, both produce essentially identical DE gene lists. Choose by memory budget, not by accuracy.

Q. How much RAM does STAR need for the human genome?

A. About 30-32 GB peak for the standard GRCh38 index without alt contigs. Add ~5 GB if you enable two-pass mode. HISAT2 needs 8-9 GB for the same reference, which is why it dominates in shared HPC environments with per-job RAM limits.

Q. Can I mix STAR and HISAT2 across samples?

A. You can, but you shouldn't. Inter-aligner differences in soft-clipping and multi-mapper resolution can introduce a small but consistent bias that will show up in your DE results. Stay with one aligner across all samples in a study.

Related in RNA-Seq