Skip to content

Releases: FelixKrueger/TrimGalore

Trim Galore v2.2.0

07 May 22:57
5846564

Choose a tag to compare

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

Full Changelog: v2.1.0...v2.2.0

Trim Galore v2.1.0

04 May 20:05
3f6be57

Choose a tag to compare

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 logos script 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

30 Apr 15:06
73e73f0

Choose a tag to compare

Pre-release

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

29 Apr 14:44
b333ea0

Choose a tag to compare

Pre-release

What's Changed

Full Changelog: v2.1.0-beta.6...v2.1.0-beta.7

Trim Galore v2.1.0-beta.6

29 Apr 12:05
e8c28f4

Choose a tag to compare

Pre-release

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 logos script 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

26 Apr 23:26

Choose a tag to compare

Pre-release

Trim Galore v2.1.0-beta.4

26 Apr 20:21

Choose a tag to compare

Pre-release

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). --fastqc now uses the fastqc-rust library directly instead of shelling out to an external fastqc binary. 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 (no default-jre-headless, no perl, no FastQC tarball; saves approximately 350 MB at the runtime layer).
    • --fastqc_args continues 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

  • --clock and --implicon now 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 --paired widening 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 --paired runs.

Documentation

  • --help text and docs/SUMMARY.md refreshed for the bundled FastQC story (#227). --fastqc and --fastqc_args now 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)

  • .gitattributes linguist patterns (#225, contributed by @ewels). GitHub's repo language bar now reflects the actual Rust content rather than HTML in docs/.
  • Rust toolchain bumped 1.85 → 1.88 (required by fastqc-rust). Captured in Cargo.toml rust-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

24 Apr 19:51

Choose a tag to compare

Pre-release

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 --bgiseq explicitly; 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 / -a2 multi-adapter syntax. -a SEQ1 -a SEQ2 now works directly — no need for the v0.6.x embedded-string (-a " SEQ -a SEQ") or FASTA file workaround. Embedded-string and file:adapters.fa forms 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 / -a2 short-flag forms are accepted. Clap's single-character short-flag rule meant -r1 40 previously parsed as -r=1 with 40 becoming 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 =VALUE variants) to the existing --r1, --r2, --a2 long-alias forms so Perl-era scripts keep working.

Bug fixes since v2.1.0-beta.2

  • --trim-n is 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_n from 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 -end suffix (...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. --paired no longer claims "exactly 2 input files" (stale since beta.2's multi-pair fix); --rrbs help now warns against Tecan Ovation kit incompatibility; --small_rna surfaces its --length → 18 side-effect; --bgiseq notes 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 --help preamble.
  • User guide refreshed (#223). 534 → 325 lines. Dropped a ~220-line duplicate of --help that 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

20 Apr 13:48
2fcaab1

Choose a tag to compare

Pre-release

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)

  • --version now prints build provenance on a second line: <git-hash> — <target> — built <ISO-8601 UTC timestamp>. The short -V remains one-line. Paste into bug reports to pin down an exact build.
  • Reproducible builds. Setting SOURCE_DATE_EPOCH to 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)

  • --paired accepts N pairs again. Common shell-glob invocations like trim_galore --paired *fastq.gz now 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.gz and SAMPLE_R1.fq.gz collide 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 --basename per 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).

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 fixed SOURCE_DATE_EPOCH and asserts bit-identity, and a weekly rustsec/audit-check for 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

18 Apr 16:07
b2a5122

Choose a tag to compare

Pre-release

What's Changed

Full Changelog: 0.6.11...v2.1.0-beta.1