Dear NGLess users,
I am happy to announce the release of NGLess 1.6! This is now available from conda as well.
This is the first stable release built on the new Rust implementation: versions up to 1.5 were written in Haskell, and 1.6 replaces that implementation entirely. NGLess 1.6 is intended as a compatible replacement for 1.5: the same scripts should produce the same results. Going forward, though, this is a better platform for improvements.
Generally speaking, the AI assistants make it much easier to perform releases, so you should expect more frequent ones going forward.
Installation
NGLess is available from bioconda:
conda install -c bioconda ngless
This is now the recommended way to install it (the beta announcements pointed at prebuilt binaries on GitHub; that workaround is no longer needed).
Alternatively, pixi (
https://pixi.sh) will install NGLess into a self-contained, per-project environment. Create a directory with a pixi.toml containing:
[workspace]
channels = ["conda-forge", "https://conda.anaconda.org/bioconda"]
name = "ngless_env"
platforms = ["linux-64"]
version = "0.1.0"
[dependencies]
ngless = ">=1.6.0,<2"
and then run “pixi install”. The external tools that NGLess drives (bwa, samtools, minimap2, megahit, prodigal) are dependencies of the conda package, so they are installed for you in both cases.
Upgrading from 1.5
NGLess 1.6 supports a single language version. You must declare
ngless "1.6"
at the top of your scripts. Declaring “1.5” or older is now an error (beta1 still accepted “1.5” with a warning; that is no longer the case). The built-in modules (parallel, samtools, mocat, …) also track the version, so import them at version “1.6”; older module versions still work, with the latest behaviour, but print a deprecation warning.
Three previously deprecated items were removed:
- the “strand” argument to count() – use “sense” ({both}/{sense}/{antisense}); strand=True is equivalent to sense={sense}
- the –search-dir command-line flag – use –search-path
- the –check-deprecation flag, which was never implemented
In practice, updating the version statement is the only change most scripts need.
What’s new since 1.5
- The HTML run report is now a single self-contained index.html that embeds its own data and makes no network requests. It works offline on compute clusters, unlike the 1.5 report, which loaded AngularJS, jQuery, Bootstrap and d3 from CDNs.
- Inline scripts (-e/–script) no longer write a report directory by default, since a throwaway one-liner rarely wants one. Pass –create-report (or -o) to force it. Running a script from a file is unchanged.
If you tested the betas
The final release restores several things the pre-releases had not fully ported from 1.5. Most notably, the “encoding” argument to fastq()/paired() is honoured again (the betas accepted it but always auto-detected), external modules can declare “references:” again so catalog modules such as igc and om-rgc resolve their bundled references, and the distinction between global and local imports is back. A deadlock where map() could hang forever on samples where bwa mem writes a lot to stderr is also fixed.
Feedback
Finally: I will be at ISME20 (16-22 August, Auckland, New Zealand), and would be happy to chat with NGLess users. Do get in touch if you are there and would like to meet up.
Best, Luis
--