NGLess 1.6.0-beta2 released (release candidate)!

10 views
Skip to first unread message

Luis Pedro Coelho

unread,
Jul 4, 2026, 1:04:19 AMJul 4
to NGLess List
Dear NGLess users,

I’m happy to announce the second beta of NGLess 1.6.0 (1.6.0-beta2).

As a reminder, NGLess 1.6 is a complete rewrite in Rust. Since the very first version, NGLess was implemented in Haskell; as of 1.6 the Haskell codebase has been retired and the Rust implementation is now the sole, supported version of NGLess. The goal of the rewrite was not to change what NGLess does, but to make it easier to build, install, and contribute to: no more GHC/Stack/Nix toolchain, just a single Rust binary that is much simpler to compile and ship.

This beta is effectively a release candidate. Beta1 shipped with a handful of known regressions; beta2 closes all of them. There is no longer any known missing work relative to the previous (Haskell) 1.5 releases. However, this is not really as well tested as I would like to call it a release. So, I will be using it internally for a bit to check before calling it final. Please do so as well if you can.

Installation

A prebuilt binary is available from github:

wget https://github.com/ngless-toolkit/ngless/releases/download/v1.6.0-beta2/ngless
chmod +x ngless
./ngless --version
The external tools (samtools, bwa, minimap2, prodigal, megahit) are not bundled, but are expected to be available in your environment.

We will not release the beta versions on conda, but the final 1.6.0 will be updated there.

What changed since beta1

The biggest news is that the regressions called out in the beta1 announcement are gone:
  • The HTML run report is back (and improved). This was the biggest missing feature in beta1. NGLess again writes a run report (in the <script>.output_ngless/ directory, or the location given by -o/--html-report-directory; disable with --no-create-report). It is now a single self-contained index.html that embeds its own data and makes no network requests, so it works offline on compute clusters (the old report loaded AngularJS, jQuery, Bootstrap and d3/nvd3 from CDNs). It shows the (syntax-highlighted) script with links to the QC and mapping statistics, the run log, per-file FASTQ QC with per-position quality charts, and mapping statistics. Inline scripts (-e/--script) skip the report by default; pass --create-report or -o to force one.
  • Transparent .xz/lzma support for input and output.
  • format={sam|bam} is honored on write() for mapped read sets.
  • preprocess(keep_singles=False) is honored.
  • auto_comments=[{date}], reference-based count(), richer FASTQ QC statistics (per-position quality percentiles), and broader external-module support have all been restored.
  • The parallel module now reports progress and has correct lock-hash behavior.
  • Various performance and UX improvements.

A few intentional changes to be aware of

  • Single language version. NGLess 1.6 supports exactly one language version, “1.6”. Scripts must declare ngless "1.6"; declaring an older version (including “1.5”, which beta1 still accepted with a warning) is now a hard error. Please update the version line at the top of your scripts. Built-in modules (parallelsamtoolsmocat, …) should likewise be imported at version “1.6”.
  • Removed deprecated bits. The count() strand argument (use sense), the --search-dir flag (use --search-path), and the unimplemented --check-deprecation flag are gone.
  • count() now errors early when more than one annotation source is given, instead of silently ignoring all but one. A constant out-of-bounds list index now also fails early.
  • Floating-point and debug output may differ very slightly from the Haskell version (e.g. the last digit of a long decimal). This is not considered a bug.
  • The internal content hash reported by auto_comments=[{hash}] (and used to name parallel lock/stats directories) is computed with a simpler serialization, so its values differ from earlier releases. Since it always depended on the version that you declare, this is not a problem (unless you were running things with the beta1 from last Thursday).

Compatibility

  • Scripts declaring version 1.5 or older should be updated to declare ngless "1.6". Correct scripts are intended to produce identical results to the Haskell 1.5 releases.

Trying the release candidate

Please test it against your own pipelines and report anything that behaves differently from previous versions. Reports, and especially any output discrepancies, are very welcome on the GitHub issue tracker.

Best, Luis

Luis Pedro Coelho | Queensland University of Technology | https://luispedro.org

Reply all
Reply to author
Forward
0 new messages