What changed in 2.0
salmon 2.0 is a from-scratch Rust rewrite. It keeps the same core workflow
(salmon index → salmon quant → quant.sf) and the same output formats
downstream tools consume, but it is a new major version and makes some breaking
changes. This page maps C++ options and behavior to 2.0.
Breaking change: rebuild your index
Section titled “Breaking change: rebuild your index”quant.sf is unchanged (drop-in for tximport/tximeta). Inferential replicates
(aux_info/bootstrap/… for both --numBootstraps and --numGibbsSamples) are
written in the same format C++ salmon used, so tximport/fishpond/swish keep
working. The bias-model diagnostic dumps in aux_info/ are in a documented Rust
format (see the output format specification);
they are not consumed by the standard downstream R packages.
Removed subcommands
Section titled “Removed subcommands”| C++ | 2.0 |
|---|---|
salmon alevin | Removed. Use the alevin-fry ecosystem for single-cell. salmon alevin … prints a redirect and exits. |
Removed options
Section titled “Removed options”Passing any of these errors out with a pointer to this guide. They are gone because the underlying feature was removed or has no equivalent in 2.0.
| Option | Subcommand | Why / alternative |
|---|---|---|
--features | index | Index-feature dump not supported by the cf1-rs/piscem-rs index builder. |
--mimicBT2, --mimicStrictBT2 | quant | bowtie2-mimicking presets removed; selective alignment is the single supported mode. |
--minAssignedFrags | quant | The “zero the output below N assigned fragments” guard was removed; 2.0 reports what it quantifies. |
--alternativeInitMode, --bootstrapReproject, --noGammaDraw | quant | Inference-internal toggles not present in the 2.0 optimizer/Gibbs implementation. |
--numBiasSamples | quant | 2.0 collects bias samples online (abundance-aware, dual-phase), so a fixed sample budget no longer applies. |
--auxTargetFile, --writeOrphanLinks | quant -a | Removed alignment-mode features. |
Accepted but ignored
Section titled “Accepted but ignored”These still parse so existing scripts run; 2.0 logs a warning and ignores them (the behavior is either the default now or handled differently).
- index:
--filterSize - quant:
--eqclasses,--noFragLengthDist,--noSingleFragProb,--mismatchSeedSkip,--disableChainingHeuristic,--hitFilterPolicy,--maxRecoverReadOcc,--validateMappings(selective alignment is the default) - quant -a:
--mappingCacheMemoryLimit,-s/--sampleOut,-u/--sampleUnaligned,--writeQualities
New in 2.0
Section titled “New in 2.0”--sketch— alignment-free pseudoalignment mode (faster). See mapping modes.--sketchStrictOrphans— in--sketch, only orphan a pair when the other mate had no matching k-mers at all (the conservative rule). The default is the relaxed rule, which tracks selective alignment more closely.--allowDovetail— now honored in--sketchas well.--ignoreTxVersion— compare-g/--geneMapidentifiers without their trailing.Nversion suffix, as tximport’s option of the same name does. Off by default. See Ensembl cDNA + GTF.
Behavior differences to be aware of
Section titled “Behavior differences to be aware of”- Sketch orphan rule defaults to the relaxed policy (see
--sketchStrictOrphans). -g/--geneMap: unmatched transcripts are reported differently, not aggregated differently. As in C++ salmon’saggregateEstimatesToGeneLevel, a transcript with no gene-map entry is emitted as its own single-transcript gene, named after the transcript, so nothing quantified is dropped on the way to gene level andtximportcan apply its own transcript-to-gene policy to the whole file. What changed is the reporting: C++ warned once per unmatched transcript (half a million lines on a failed join), while 2.x warns once with the count and writes the names toaux_info/genemap_unmatched_txps.json, under anunmatched_transcriptskey. That file is removed when nothing is unmatched, so its presence always refers to the current run. 2.x additionally warns when the match rate is at or below 50%, says how many transcripts would match without the version suffix, and names--ignoreTxVersion. Aquant.genes.sfwhose rows are mostly stand-ins is transcript-level output under a gene-level file name; the run’s closing line says so explicitly when any row is a stand-in.- Selective-alignment chain pruning: 2.0 defaults
--orphanChainSubThreshand--postMergeChainSubThreshto0.0(off) — it aligns every candidate, marginally more sensitive than C++ (0.95/0.9). Quantification is essentially unaffected (per-transcript Pearson ≈ 0.999); pass--orphanChainSubThresh 0.95 --postMergeChainSubThresh 0.9to reproduce C++ mapping counts exactly.
-p on compressed input
Section titled “-p on compressed input”-p is accepted unchanged, but from 2.5.0 it names one execution-slot budget
shared between mapping and gzip decompression, rather than a mapping-thread
count with decompression taken on top. C++ salmon (and 2.x before 2.5.0) could
run more total threads than -p on compressed input; 2.5.0 stays within the
budget and divides it from live measurement. Totals and results are unaffected;
wall time on compressed input may differ from what the old accounting produced
at the same -p. See
threads and compressed input.
Unchanged
Section titled “Unchanged”Index/quant basics, quant.sf, cmd_info.json, lib_format_counts.json,
aux_info/meta_info.json, --libType/-l, --seqBias,
--gcBias, --posBias, --numBootstraps, --numGibbsSamples, --useEM,
--dumpEq, decoys, and salmon quantmerge.