All notable changes to this project are documented here. The format is based on Keep a Changelog, and the project aims to follow Semantic Versioning (pre-1.0, so minor versions may carry breaking changes).
0.2.0 - Unreleased
summarysubcommand: per-position quality metrics, cumulative expected-error metrics, and an optional per-read sequence-complexity histogram (#8).sampleanderrors-from-samplesubcommands for subsampling input FASTQs and learning an error model from the subsample (usable for bootstrapping).--failed-uniquesdiagnostic ondada/dada-pseudo/dada-pooled: emits a TSV of uniques that failed to seed a partition (#60).chimera-diagnosticsfor higher-order (trimera) screening, with nearest-parent and flank gates (#54).- Experimental WFA alignment backend (
--align-backend wfa2) with a--wfa-max-editsedit-budget cap (#49, #51). ASV-equivalent to Needleman- Wunsch on tested Illumina and PacBio HiFi data, but not byte-identical. dada-pooled --gzipwrites the per-sample JSON files gzip-compressed as{sample}.json.gz(#70).dadaanddada-pseudogain the same--gzipflag, for consistency across the per-sample denoisers.merge-pairsrecords input-file provenance and warns on mismatch (#10).just/maketask runners for build, install, test, and docs (#46).
learn-errorsanderrors-from-samplenow gzip-compress their output when the-opath ends in.gz, for consistency with the other JSON-emitting subcommands (previously the file was written uncompressed) (#71).kdist-calibrate --from-dadanow resolves derep inputs whose filenames were renamed by the pipeline (e.g.{sample}.derep.R1.json.gz): it falls back from the exact{sample}.json[.gz]match to a{sample}.*.json[.gz]scan, disambiguating an ambiguous prefix by the derep JSON's ownsamplefield (#72).kdist-calibrate --from-dadanow reads gzip-compresseddadaoutput JSONs (*.json.gz, e.g. fromdada-pooled --gzip); previously the gzip bytes were parsed as raw JSON and failed withexpected value, line 1 column 1.make-sequence-tablenow reads gzip-compresseddada/merge-pairsinputs (*.json.gz, e.g. fromdada --gzip/dada-pooled --gzip); previously the gzip bytes were parsed as raw JSON and failed withexpected value, line 1 column 1.- Single-file JSON
-ooutputs now honor a.gzoutput path, routing through the shared gzip-aware writer instead of a raw write (matchinglearn-errors, #71):summary,summary-merge,merge-pairs,remove-primers,filter-and-trim,make-sequence-table,remove-bimera-denovo,assign-taxonomy,assign-species, anddada's single-sample output.
- The experimental WFA backend is now gated behind an off-by-default
wfaCargo feature (#63). Default builds — and the published crate — are Needleman-Wunsch only; selecting--align-backend wfa2without the feature errors rather than silently falling back to NW. Building WFA requires a source checkout (cargo build --features wfa) because it depends on a git crate that cannot ship on crates.io. - Denoising/error-learning verbose logs now echo the active alignment backend (#51).
- Trimmed the published crate: development, benchmarking, concordance data (multi-MB PacBio FASTQs), examples, notes, and CI/infra files are excluded.
- Sparse k-mer-8 screen, gated to k ≥ 8, cutting resident memory in the high-k regime (#43).
dada-pooledstreams dereplication into merging instead of holding all dereps in memory, and uses an integer merge-quality accumulator (#39, #41).- Various k-mer-vector memory reductions in the alignment screen (#32).
- R DADA2 concordance guardrail for Illumina and PacBio, with abundance/recall/ precision gates (#35).
0.1.0 - 2026-06-03
- Initial crates.io release: Rust ports of the core DADA2 pipeline steps
(
filter-and-trim,derep,learn-errors,dada,merge-pairs,remove-bimera-denovo,assign-taxonomy/assign-species, sequence-table helpers).