Skip to content

v0.41

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Jul 12:33

This release focuses on performance, Java modernization, and reliability, building on the compression and build-system work from v0.40.

New Features

  • Verbose Adapter Reporting: Added a -verbose flag (placed after PE/SE, before the input files) that reports a per-adapter breakdown of how many reads each specific adapter sequence removed, sorted from most to least frequent. (#9)

  • Simplified Invocation Mode: Trimmomatic can now be run with just the input file(s) — no explicit trimming steps or thread count required. It auto-detects available processor threads and applies sensible default steps (ILLUMINACLIP:<fastaWithAdaptersEtc>:2:30:10 SLIDINGWINDOW:4:20 MINLEN:36), writing automatically-named output files alongside the input. To make this work reliably across different install layouts, ILLUMINACLIP's adapter file lookup was extended to check an adapters/ subdirectory in the current working directory, in addition to the existing lookup next to the JAR and in the CWD itself.

  • More Robust Compressed Input: Replaced the bundled Jbzip2 library with Apache Commons Compress, adding correct support for concatenated bzip2 streams (e.g. files produced via cat a.bz2 b.bz2 > combined.bz2) — previously only the first stream in the file was read.

Performance & Correctness

  • Bug Fix: Corrected calculateMaximumRange in IlluminaClippingTrimmer, which had allowed a small number of reads very close to the adapter alignment boundary to be retained incorrectly. The effect is minimal — in our benchmarking on a 33.3M-read-pair human dataset, this changed the outcome for 1,309 pairs (0.004%). (#28)

  • Java 25: Trimmomatic now targets Java 25 (up from Java 8), taking advantage of virtual threads (used to open paired-end input files in parallel) and other JVM runtime improvements. Running v0.41 requires a Java 25 runtime or newer.

  • Extensive Performance Work: Numerous optimizations across the hot path — pre-computed adapter packing in IlluminaClippingTrimmer, reduced allocations in FastqRecord/FastqSerializer, a widened threaded-pipeline task queue, pre-sized buffers in the compression path, and array-based lookups in BarcodeSplitter and a fix for a StringIndexOutOfBoundsException when a read is shorter than a barcode sequence in mismatch-tolerant mode.

We benchmarked v0.41 against v0.40 across 1–128 threads on both a plant and a human wgs dataset:

Figure_Trimmomatic_v40_vs_v41
  • At low thread counts (1–8), v0.41 is meaningfully faster — a mean speedup of ~11% on the plant dataset and ~2% on the human dataset, reflecting the single-threaded/low-concurrency optimizations above.
  • At high thread counts (16–128), both versions converge as the workload becomes I/O-bound, though v0.41 retains a small edge (~7% mean speedup on plant, ~3% on human).
  • v0.41 consistently uses less peak RAM than v0.40, especially on the plant dataset. (The v0.40 human-dataset RAM spike at 32 threads followed by a dip at 64 is a scheduler artifact from the benchmarking run, not a real v0.41 regression.)

Testing & Dependencies

  • Added an extensive JUnit test suite, including additional sensitivity/specificity and general over-trimming tests.
  • Updated Mockito, ByteBuddy, and JUnit dependencies.

Docker Support

With each release, a Docker container is automatically built and published to the GitHub Container Registry. You can pull the image for this release using the following command:

docker pull ghcr.io/usadellab/trimmomatic:v0.41