Releases: FelixKrueger/TrimGalore
Trim Galore v2.2.0
What's Changed
- chore(branch): rename optimus_prime → dev post-v2.1.0 GA by @FelixKrueger in #277
- build(deps): bump clap from 4.6.0 to 4.6.1 by @dependabot[bot] in #275
- build(deps): bump anyhow from 1.0.75 to 1.0.102 by @dependabot[bot] in #276
- chore(deps): robust high-compression test + group Dependabot patch/minor by @FelixKrueger in #278
- build(deps): bump flate2 from 1.1.5 to 1.1.9 by @dependabot[bot] in #274
- fix(docs): drop stale '/TrimGalore/' base-path prefix from internal links by @FelixKrueger in #279
- docs/cli: align --cores guidance on N+4 model and 8-core saturation by @FelixKrueger in #280
- docs(threading): reframe Perl 0.6.x thread breakdown as legacy by @FelixKrueger in #281
- feat: --clumpify + --compression for tighter .fq.gz output via read-reordering by @ewels in #282
- docs(perf-data): clumpify benchmarks on Buckberry WGBS + RRBS PE (2026-05-07) by @FelixKrueger in #283
- ci(docs): gate Pages deploy to master only; build still runs on dev by @FelixKrueger in #284
- ci(docs): revert deploy-gate; dev is the canonical live-content source by @FelixKrueger in #285
- docs(clumpy): add RRBS to low-complexity list; soften WGBS framing by @FelixKrueger in #286
- perf+docs: integer max_errors (#262) + memory/IO docs (#263, #264) by @FelixKrueger in #287
- chore(release): v2.2.0 (Clumpify Edition) by @FelixKrueger in #288
New Contributors
- @dependabot[bot] made their first contribution in #275
Full Changelog: v2.1.0...v2.2.0
Trim Galore v2.1.0
What's Changed
- Add dry-run mode and prerelease support to release workflow by @FelixKrueger in #212
- Drop macos-x86_64 from release binary matrix by @FelixKrueger in #213
- Build provenance + lint/reproducibility/audit CI gates by @FelixKrueger in #217
- refactor(filters): bundle unpaired-rescue thresholds into UnpairedLengths struct by @FelixKrueger in #218
- polish(multi-pair): name both colliding paths, catch duplicate-pair typo, add Cli::validate tests by @FelixKrueger in #219
- ci: backfill coverage for retain_unpaired × multi-pair, missing inputs, report-path fail-fast by @FelixKrueger in #220
- docs(cli): flag-by-flag help-text polish by @FelixKrueger in #221
- Pre-GA polish: A{N} shorthand, BGI auto-detect, Perl-parity fixes, rhetoric reframe by @FelixKrueger in #222
- User-guide v2 refresh + 2 bugs surfaced during review by @FelixKrueger in #223
- fix(specialty): multi-pair --clock and --implicon (same shape as beta.2 --paired fix) by @FelixKrueger in #224
- Add a .gitattributes file with linguist patterns by @ewels in #225
- feat: bundle fastqc-rust — drop Java + external FastQC dependency by @FelixKrueger in #226
- docs(cli): mention bundled fastqc-rust in --fastqc / --fastqc_args help by @FelixKrueger in #227
- Clean up CLAUDE.md by @ewels in #229
- Website + docs by @ewels in #228
- Docs + logo tweaks by @ewels in #230
- Update all actions and pin shas. Fix node 24 for docs by @ewels in #231
- fix(report): MultiQC-parity gaps surfaced in nf-core pre-GA review by @FelixKrueger in #235
- docs(site): content + accuracy polish across all 27 pages by @FelixKrueger in #236
- docs(hero): simplify hover, gate cursor-tracked motion behind press by @ewels in #237
- docs(site): disable smartypants — was mangling --flag inside
by @FelixKrueger in #238 - docs(logos): generate + ship PNG variants alongside the SVGs by @FelixKrueger in #239
- fix(cli): auto-create -o/--output_dir if missing (was hanging) by @FelixKrueger in #240
- docs(logos): restore
npm run logosscript line dropped from #239 by @FelixKrueger in #241 - fix: Perl-parity bundle (#242, #245, #246, #247) + #243 UX polish by @FelixKrueger in #249
- perf: Buckberry-scale wins #2 + #1 from #248 (co-authored with @an-altosian) by @FelixKrueger in #250
- fix(fmt): hotfix rustfmt-version diff post-#250 (gzip-level imports) by @FelixKrueger in #251
- fix(io): --basename foo --paired produces foo_val_{1,2}.fq.gz (#244) by @FelixKrueger in #252
- chore: clear deferred CI + test items (#246 §5.2, #247 #2/#3/#4/#7) by @FelixKrueger in #253
- chore(release): v2.1.0-beta.6 — Perl-parity bundle + Buckberry perf wins + CI hardening by @FelixKrueger in #254
- docs(install): bump v2.1.0-beta.5 → v2.1.0-beta.6 references (followup to #254) by @FelixKrueger in #255
- docs: GHCR tag prefix fix + README Docker example uses :beta by @FelixKrueger in #256
- docs(migration): note -a 'A{N}' poly-A divergence vs --poly_a (closes #245) by @FelixKrueger in #257
- perf(alignment): Myers' bit-parallel prefilter (#248 #4, byte-identical, co-authored) by @FelixKrueger in #258
- chore(release): v2.1.0-beta.7 + benchmark driver by @FelixKrueger in #259
- ci/test: cargo-nextest adoption + parallel.rs coverage (closes #246, #247) by @FelixKrueger in #260
- docs(performance): Buckberry-scale benchmarks (WIP — Rust complete, Perl c8+ pending) by @FelixKrueger in #265
- docs(perf-data): archive Buckberry-scale benchmark raw data + logs by @FelixKrueger in #266
- docs: sweep stale benchmark references after Buckberry refresh by @FelixKrueger in #267
- v2.1.0-beta.8: --high_compression opt-in flag + memory profile refresh by @FelixKrueger in #268
- docs(performance): replace Apple M1 Pro section with v2.1.0-beta.7 Buckberry numbers by @FelixKrueger in #269
- docs(performance): mention --high_compression in Cost-and-CO₂ section by @FelixKrueger in #270
- docs(performance): note that nf-core trim outputs are ephemeral by @FelixKrueger in #271
- docs: point Astro/Starlight site to www.trimgalore.com by @FelixKrueger in #272
- chore(release): v2.1.0 GA by @FelixKrueger in #273
- Trim Galore v2.1.0 (Oxidized Edition) — Rust rewrite by @FelixKrueger in #214
Full Changelog: 0.6.11...v2.1.0
Trim Galore v2.1.0-beta.8
What's Changed
- ci/test: cargo-nextest adoption + parallel.rs coverage (closes #246, #247) by @FelixKrueger in #260
- docs(performance): Buckberry-scale benchmarks (WIP — Rust complete, Perl c8+ pending) by @FelixKrueger in #265
- docs(perf-data): archive Buckberry-scale benchmark raw data + logs by @FelixKrueger in #266
- docs: sweep stale benchmark references after Buckberry refresh by @FelixKrueger in #267
- v2.1.0-beta.8: --high_compression opt-in flag + memory profile refresh by @FelixKrueger in #268
Full Changelog: v2.1.0-beta.7...v2.1.0-beta.8
Trim Galore v2.1.0-beta.7
What's Changed
- docs: GHCR tag prefix fix + README Docker example uses :beta by @FelixKrueger in #256
- docs(migration): note -a 'A{N}' poly-A divergence vs --poly_a (closes #245) by @FelixKrueger in #257
- perf(alignment): Myers' bit-parallel prefilter (#248 #4, byte-identical, co-authored) by @FelixKrueger in #258
- chore(release): v2.1.0-beta.7 + benchmark driver by @FelixKrueger in #259
Full Changelog: v2.1.0-beta.6...v2.1.0-beta.7
Trim Galore v2.1.0-beta.6
What's Changed
- Clean up CLAUDE.md by @ewels in #229
- Website + docs by @ewels in #228
- Docs + logo tweaks by @ewels in #230
- Update all actions and pin shas. Fix node 24 for docs by @ewels in #231
- fix(report): MultiQC-parity gaps surfaced in nf-core pre-GA review by @FelixKrueger in #235
- docs(site): content + accuracy polish across all 27 pages by @FelixKrueger in #236
- docs(hero): simplify hover, gate cursor-tracked motion behind press by @ewels in #237
- docs(site): disable smartypants — was mangling --flag inside
by @FelixKrueger in #238 - docs(logos): generate + ship PNG variants alongside the SVGs by @FelixKrueger in #239
- fix(cli): auto-create -o/--output_dir if missing (was hanging) by @FelixKrueger in #240
- docs(logos): restore
npm run logosscript line dropped from #239 by @FelixKrueger in #241 - fix: Perl-parity bundle (#242, #245, #246, #247) + #243 UX polish by @FelixKrueger in #249
- perf: Buckberry-scale wins #2 + #1 from #248 (co-authored with @an-altosian) by @FelixKrueger in #250
- fix(fmt): hotfix rustfmt-version diff post-#250 (gzip-level imports) by @FelixKrueger in #251
- fix(io): --basename foo --paired produces foo_val_{1,2}.fq.gz (#244) by @FelixKrueger in #252
- chore: clear deferred CI + test items (#246 §5.2, #247 #2/#3/#4/#7) by @FelixKrueger in #253
- chore(release): v2.1.0-beta.6 — Perl-parity bundle + Buckberry perf wins + CI hardening by @FelixKrueger in #254
- docs(install): bump v2.1.0-beta.5 → v2.1.0-beta.6 references (followup to #254) by @FelixKrueger in #255
Full Changelog: v2.1.0-beta.5...v2.1.0-beta.6
Trim Galore v2.1.0-beta.5
Full Changelog: v2.1.0-beta.4...v2.1.0-beta.5
Trim Galore v2.1.0-beta.4
Trim Galore v2.1.0-beta.4 — Oxidized Edition (beta)
Fourth beta of the Rust rewrite. Folds in the FastQC integration cleanup, a multi-pair fix for two specialty modes, a small drive-by from @ewels, and a help-text/docs polish pass. Beta.4 is the cut where the "single static binary, zero external runtime deps" story becomes literally true at the artifact level — no Cutadapt, Java, Python, or FastQC needed at runtime.
New capabilities since v2.1.0-beta.3
- Bundled FastQC (#226).
--fastqcnow uses the fastqc-rust library directly instead of shelling out to an externalfastqcbinary. Removes Java and the FastQC tarball as runtime dependencies. Output files (*_fastqc.html,*_fastqc.zip) are FastQC 0.12.1-compatible — the same version we previously bundled in the Docker image — so MultiQC parsers and downstream pipelines see identical structure. The Docker image is correspondingly slimmer (nodefault-jre-headless, noperl, no FastQC tarball; saves approximately 350 MB at the runtime layer).--fastqc_argscontinues to accept the common subset (--nogroup,--expgroup,--quiet,--svg,--nano,--nofilter,--casava,-t/--threads,-o/--outdir); other flags emit a warning and are ignored — forward-compat with future fastqc-rust additions.
Bug fixes since v2.1.0-beta.3
--clockand--impliconnow accept multi-pair input (#224), restoring v0.6.x semantics that the v2.x rewrite had narrowed to "exactly 2 input files". Same shape as the--pairedwidening that landed in beta.2 — the two specialty run-and-exit modes had their own validation that wasn't updated at the time. Each pair gets a per-pair header (=== Clock pair N of M ===/=== IMPLICON pair N of M ===) and the same case-insensitive output-collision pre-flight that--pairedruns.
Documentation
--helptext anddocs/SUMMARY.mdrefreshed for the bundled FastQC story (#227).--fastqcand--fastqc_argsnow describe the bundled integration explicitly and enumerate the translated flag set. SUMMARY's architecture-shift paragraph and parity table reflect that Java + FastQC tarball are no longer runtime dependencies.
Infrastructure (contributor-facing)
.gitattributeslinguist patterns (#225, contributed by @ewels). GitHub's repo language bar now reflects the actual Rust content rather than HTML indocs/.- Rust toolchain bumped 1.85 → 1.88 (required by fastqc-rust). Captured in
Cargo.tomlrust-version.
Install
Cargo
cargo install trim-galore --version 2.1.0-beta.4
Docker
docker pull ghcr.io/felixkrueger/trimgalore:v2.1.0-beta.4
# or the moving beta tag:
docker pull ghcr.io/felixkrueger/trimgalore:beta
Multi-arch OCI index digest: sha256:9a7f7ddedde9df5400a1819fd22fd0fae20c8c9f41bbcd5ac7ea382178c794f0 (linux/amd64 + linux/arm64).
Pre-built binaries
See the Assets section below for linux-x86_64, linux-aarch64, and macos-aarch64 archives with .sha256 checksums.
Feedback
Open an issue with the beta-feedback label, or continue the discussion at #215. GA target is 2026-05-04 ("May the 4th be with you").
Full changelog: v2.1.0-beta.3...v2.1.0-beta.4
Trim Galore v2.1.0-beta.3
Trim Galore v2.1.0-beta.3 — Oxidized Edition (beta)
Third beta of the Rust rewrite. Folds in three user-facing PRs merged since beta.2: help-text polish, pre-GA capability additions (A{N} shorthand, BGI auto-detect, Perl-parity fixes, rhetoric reframe), and the user-guide v2 refresh (plus two bugs it surfaced along the way).
New capabilities since v2.1.0-beta.2
- BGI/DNBSEQ added to adapter auto-detection. Users running BGI/MGI/DNBSEQ data no longer need to pass
--bgiseqexplicitly; the 32 bp BGI adapter is now probed alongside Illumina, Nextera, and smallRNA on the first 1M reads. Stranded Illumina stays explicit-only (--stranded_illumina) because its sequence differs from Nextera by a single A-tail base and would produce constant ambiguous ties. Tie-break semantics unchanged — the zero-count fallback is still Illumina. - Repeatable
-a/-a2multi-adapter syntax.-a SEQ1 -a SEQ2now works directly — no need for the v0.6.x embedded-string (-a " SEQ -a SEQ") or FASTA file workaround. Embedded-string andfile:adapters.faforms still work and can be mixed with repeated flags in a single invocation (e.g.-a " SEQ1 -a SEQ2" -a SEQ3). - Perl-style
A{N}single-base expansion for-a/-a2— e.g.-a A{10}expands to-a AAAAAAAAAA, matching Perl v0.6.x syntax. - Perl-era
-r1/-r2/-a2short-flag forms are accepted. Clap's single-character short-flag rule meant-r1 40previously parsed as-r=1with40becoming a stray positional (producing a confusing "odd count" error). A small pre-parse hook now transparently rewrites the exact tokens-r1,-r2,-a2(and their=VALUEvariants) to the existing--r1,--r2,--a2long-alias forms so Perl-era scripts keep working.
Bug fixes since v2.1.0-beta.2
--trim-nis now suppressed under--rrbs, restoring Perl v0.6.x byte-identical output for users who combine both flags. Perl's RRBS code path omitted$trim_nfrom its Cutadapt invocations; beta.2 was applying N-trimming unconditionally, which narrowly violated the byte-identity guarantee for that specific flag combination.- Paired-end report line fix. The parameter-summary line in the text trimming report previously emitted a stray
-endsuffix (...before a sequence pair gets removed-end: 20 bp). Now correctly emits...before a sequence pair gets removed: 20 bp. Single-end output is unchanged.
Documentation
- Flag-by-flag help-text polish (#221). 25 docstring edits across
src/cli.rs.--pairedno longer claims "exactly 2 input files" (stale since beta.2's multi-pair fix);--rrbshelp now warns against Tecan Ovation kit incompatibility;--small_rnasurfaces its--length → 18side-effect;--bgiseqnotes it is also probed by auto-detection. - Positioning reframed from "byte-identical" to "faithful rewrite with useful additions" (#222). The original framing no longer held given new capabilities (poly-G handling, generic poly-A trimmer, per-pair adapter detection, BGI auto-detect). Updated in README, SUMMARY, User Guide, CHANGELOG, and the
--helppreamble. - User guide refreshed (#223). 534 → 325 lines. Dropped a ~220-line duplicate of
--helpthat had been drifting out of sync on every polish cut; replaced with a curated "Flag reference" section on cross-flag interactions, RRBS-specific guidance (Tecan, MseI), and adapter-specification recap. Added IMPLICON coverage (missing from the original guide). Modernised the intro/framing.
Test coverage
Test count grew from 106 → 147 across the beta.2 → beta.3 window. New coverage: multi-pair validation branches, specialty modes (--clock, --implicon end-to-end), adapter brace expansion, four-probe auto-detection set, Perl-era flag rewriting, --trim-n / --rrbs interaction, parse_adapter_specs mixed-form path.
Install
Cargo
cargo install trim-galore --version 2.1.0-beta.3
Docker
docker pull ghcr.io/felixkrueger/trimgalore:v2.1.0-beta.3
# or the moving beta tag:
docker pull ghcr.io/felixkrueger/trimgalore:beta
Multi-arch OCI index digest: sha256:3d8e9c90555cb47176ea4f7527230c59995f402af6a32d3ef7b3428ca5d6b337 (linux/amd64 + linux/arm64).
Pre-built binaries
See the Assets section below for linux-x86_64, linux-aarch64, and macos-aarch64 archives with .sha256 checksums.
Feedback
Open an issue with the beta-feedback label, or continue the discussion at #215. Earliest GA is 2026-05-03.
Full changelog: v2.1.0-beta.2...v2.1.0-beta.3
Trim Galore v2.1.0-beta.2
Trim Galore v2.1.0-beta.2 — Oxidized Edition (beta)
Second beta of the Rust rewrite. Folds in every improvement shipped since beta.1 two days ago, driven by beta-tester feedback (most importantly: multi-pair --paired is back).
New features (since v2.1.0-beta.1)
--versionnow prints build provenance on a second line:<git-hash> — <target> — built <ISO-8601 UTC timestamp>. The short-Vremains one-line. Paste into bug reports to pin down an exact build.- Reproducible builds. Setting
SOURCE_DATE_EPOCHto a fixed Unix timestamp (Debian reproducible-builds spec) produces a bit-identical binary across runs; unset behaviour is unchanged. Malformed values hard-fail the build.
Bug fixes (since v2.1.0-beta.1)
--pairedaccepts N pairs again. Common shell-glob invocations liketrim_galore --paired *fastq.gznow work as they did in Perl v0.6.x. Adapter auto-detection and poly-G scanning run per pair — intentional deviation from v0.6.x, which detected once on the first file. Safer for mixed libraries / chemistries across a glob, negligible overhead.- Same-file R1/R2 detection. Paired-end validation catches byte-equal R1 and R2 paths (matches v0.6.x — no symlink resolution, no canonicalisation).
- Cross-pair output-path collision pre-flight (fixes #216). Invocations that would silently overwrite one pair's output with another's abort before any I/O. Comparison is ASCII case-insensitive, so
sample_R1.fq.gzandSAMPLE_R1.fq.gzcollide correctly on APFS/NTFS (macOS/Windows default) as well as ext4.- On opt-in case-sensitive APFS/ZFS volumes, letter-case-distinct files are legitimately separate but the pre-flight will still reject them. Use distinct basenames or
--basenameper sample to work around. - On mid-batch failure at pair K, pairs 1..K−1 retain complete outputs and pair K may have a partial file; K+1..N are not attempted. Inspect and re-run only the failing pair — matches v0.6.x (no rollback).
- On opt-in case-sensitive APFS/ZFS volumes, letter-case-distinct files are legitimately separate but the pre-flight will still reject them. Use distinct basenames or
Infrastructure (contributor-facing, no runtime effect)
- New CI gates on every PR:
cargo fmt --check+cargo clippy -D warnings(lint), a dedicated reproducibility job that builds twice under a fixedSOURCE_DATE_EPOCHand asserts bit-identity, and a weeklyrustsec/audit-checkfor dependency advisories. - Dependabot enabled for cargo + github-actions ecosystems.
Install
Cargo
cargo install trim-galore --version 2.1.0-beta.2
Docker
docker pull ghcr.io/felixkrueger/trimgalore:v2.1.0-beta.2
# or the moving pointer:
docker pull ghcr.io/felixkrueger/trimgalore:beta
Pre-built binaries
See the Assets section below for linux-x86_64, linux-aarch64, and macos-aarch64 archives with .sha256 checksums.
Feedback
Beta testing feedback is the whole point of the window — please open an issue for anything surprising, or continue the discussion at #215. Earliest GA is 2026-05-03.
Full changelog: v2.1.0-beta.1...v2.1.0-beta.2
Trim Galore v2.1.0-beta.1
What's Changed
- Add dry-run mode and prerelease support to release workflow by @FelixKrueger in #212
- Drop macos-x86_64 from release binary matrix by @FelixKrueger in #213
Full Changelog: 0.6.11...v2.1.0-beta.1