Kallisto vs Salmon: Pseudo-Alignment Tools Compared
Two flagship pseudo-alignment quantifiers for RNA-Seq compared on speed, accuracy, and the small but meaningful differences that matter downstream.
Kallisto (Bray et al., 2016) and Salmon (Patro et al., 2017) both introduced the same conceptual leap: skip full-genome alignment and instead compute the compatibility of each read with the transcriptome directly. The result is 10-50× faster RNA-Seq quantification with equivalent (or slightly better) accuracy for transcript-level abundance.
Which one should you pick? Honestly, either works. Here’s the short version.
Algorithm summary
| Aspect | Kallisto | Salmon |
|---|---|---|
| Read-to-transcript mapping | Pseudo-alignment via T-DBG | Quasi-mapping (or selective alignment, mode-dependent) |
| Bias modeling | Optional sequence-specific and positional bias | On by default: seq bias, GC bias, positional bias, fragment length |
| Bootstrap | Yes (--bootstrap-samples) | Yes (--numBootstraps) or Gibbs sampling |
| Index size (human) | ~3 GB | ~4-5 GB |
| Speed (typical) | Slightly faster | Similar, slightly slower with all bias models on |
Building the index
Kallisto:
kallisto index -i kallisto/grch38.idx gencode.v46.transcripts.fa
Salmon (with decoy sequences from the genome, which improves accuracy for reads from unannotated regions):
grep "^>" GRCh38.primary_assembly.genome.fa | sed 's/>//' > decoys.txt
cat gencode.v46.transcripts.fa GRCh38.primary_assembly.genome.fa > gentrome.fa
salmon index -t gentrome.fa -d decoys.txt -i salmon/grch38 -k 31
The decoy-aware index is a real accuracy improvement — always use it with Salmon.
Quantification
Kallisto:
kallisto quant -i kallisto/grch38.idx \
-o quant/sample \
--bootstrap-samples=100 \
-t 16 \
fastq/sample_R1.fastq.gz fastq/sample_R2.fastq.gz
Salmon:
salmon quant -i salmon/grch38 \
-l A \
-1 fastq/sample_R1.fastq.gz -2 fastq/sample_R2.fastq.gz \
--validateMappings \
--gcBias \
--seqBias \
-p 16 \
-o quant/sample
-l A auto-detects library type; always confirm the detected type in the log.
Downstream: tximport
Both tools output a per-sample abundance.tsv (Kallisto) or quant.sf (Salmon). Aggregate to gene-level counts with tximport in R and feed straight into DESeq2:
library(tximport); library(DESeq2)
tx2gene <- read.table("ref/tx2gene.gencode.v46.tsv",
header = TRUE)
files <- file.path("quant", samples$sample, "quant.sf")
names(files) <- samples$sample
txi <- tximport(files, type = "salmon", tx2gene = tx2gene)
dds <- DESeqDataSetFromTximport(txi, colData = samples,
design = ~ condition)
For Kallisto swap type = "kallisto" and the file name to abundance.h5.
When Salmon has an edge
- GC bias correction matters more than you’d expect for older library preps. Salmon models this natively; Kallisto doesn’t.
- Decoy-aware indexing noticeably reduces spurious mappings to pseudogenes and unannotated regions.
- Gibbs sampling for uncertainty is a bit more principled than Kallisto’s bootstrapping.
When Kallisto has an edge
- Slightly faster on typical hardware.
- Its ecosystem —
sleuthfor likelihood-ratio DE using bootstrapped uncertainty — is elegant if you want to stay inside the Kallisto family. bustools+kb-pythoncombine Kallisto with fast single-cell processing.
Practical recommendation
For a new bulk RNA-Seq project starting today, use Salmon with decoy-aware index and --gcBias --seqBias, then tximport into DESeq2. If your organization already uses Kallisto pervasively, don’t switch on aesthetics alone — the biological results are equivalent.
Neither replaces alignment when you need genome-level information (splicing, fusions, novel exons). For that, see our STAR vs HISAT2 comparison.
What to read next
- Our full RNA-Seq pipeline guide — swap
featureCountsfor Salmon and the rest of the workflow is identical. - DESeq2 walkthrough — the standard downstream step for either tool.
FAQ
Q. Should I still bother with STAR/HISAT2 alignment if Salmon is faster?
A. For gene-level differential expression, Salmon or Kallisto pseudo-alignment is the modern default — it is 10-50× faster and produces DE gene lists indistinguishable from alignment-based pipelines. Stick with STAR/HISAT2 alignment if you need per-position coverage, novel-junction discovery, splice-QTL calling, or fusion detection.
Related in RNA-Seq
Single-Cell RNA-Seq Analysis: Complete Workflow with Seurat
A concise Seurat v5 workflow for droplet single-cell RNA-Seq — QC, normalization, integration, clustering, and marker discovery — with the flags that matter.
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.
How to Use DESeq2 for Differential Expression Analysis
A rigorous walkthrough of the DESeq2 workflow: count matrix prep, dispersion estimation, LFC shrinkage, batch correction, and pitfalls that get past most tutorials.