QIIME 2 2026.4 is now available!

Hello QIIME 2 community and happy spring! :sunflower:

We have a big release for you with lots of exciting updates :partying_face:

And as always, a huge thank you to everyone for their hard work and contributions this cycle! :flexed_biceps:t3:


:police_car_light: Important Announcements :police_car_light:

  • Timed with this release, we are announcing a first draft policy on the use of generative AI technologies in development within the rachis ecosystem. Learn more here.

Interface Changes coming in QIIME 2 2026.7 :boom:

  • q2-types
    • FeatureTable will no longer accept Normalized as a variant, and Normalized will be removed. We do not believe anyone is currently using this type (FeatureTable[Normalized]), but let us know if you are. :ghost:
  • We are considering adding new output logs in various actions across different plugins, such as q2-feature-classifier's extract-reads action. Our goal is to make this backward compatible through the addition of new support for optional outputs from Actions, but if we do not get that aspect completed some actions may have new outputs associated with them. :wood:

:sparkles: Here are the Highlights of the Release! :sparkles:


Distribution Updates :package:

  • @lizgehret updated all environment files to now contain the rachis- prefix (formerly qiime2-). Note that this applies only to >=2026.4 releases, along with our development environment files (i.e. latest/passed within the distributions repository). :grapes:
  • @lizgehret renamed the amplicon distribution to qiime2. All of the 2026.4 environment files (and development environment files) reflect this change, but this does not apply to historical environment files.
  • @lizgehret made many supporting dependency updates to accommodate the following version bumps across all distributions:
    • python 3.12 :snake:
    • scikit-bio 0.7.2 :scientist:
    • scikit-learn 1.7.1 :student:
    • unifrac 1.5.1 :leafless_tree:
  • @lizgehret added new ARM64 builds for the tiny distribution. :flexed_biceps:t3: Our hope was to also have builds for the qiime2 distribution as well, but a few transitive downstream dependencies don't yet have arm builds on conda. We are monitoring progress and hope to have these available later in the year. :man_surfing:
  • @lizgehret removed osx builds for the moshpit and pathogenome distributions. This was initially prompted due to some environment conflicts caused by missing dependencies no longer being supported on osx. However, we anticipate the bulk of use cases for these distributions will be on linux, due to the high processing power required for many actions within q2-assembly and q2-annotate. :biohazard:

Framework (i.e., rachis) Updates :grapes:

  • @Oddant1 added the CaptureHolder object, allowing for the capture of auto-generated parameters (such as random number generator seeds) in data provenance. You can find the developer documentation on this new feature here. Actions that have been modified to use this new API are detailed in their respective plugin sections below. :goal_net:

  • @Oddant1 added optional view_types for Pipelines. It is necessary to use view type annotations on Pipelines that use the CaptureHolder API. Docs on adding view types to Pipelines are here. :window:

  • @Oddant1 fixed a bug causing provenance replay to fail on importing Artifacts of types not known to your current environment :cross_mark_button:

  • @ebolyen extended support for Python versions 3.10 through 3.14 on PyPI. Please note that this is only via pip installations of the framework. Distributions are fixed to Python 3.12 for stability.

  • @ebolyen has updated Rachis to support using the modern return type annotations on registered functions (tuple[ViewTypeA, ViewTypeB] instead of (ViewTypeA, ViewTypeB)). The original mechanism is preserved for backwards compatibility. This means that you can finally fix the annoying squiggly lines in modern IDEs which need the modern annotation form. :wavy_dash:

  • @ebolyen has removed the need the decorator package, simplifying the internal operation of rachis. :wrapped_gift:

  • @ebolyen added support for viewing visualizations in JupyterLab 4.x+. This is achieved via a new front-end Jupyter plugin which safely sandboxes visualizations via q2view. Visualizations may be used inline in notebooks or as their own file-view in the JupyterLab interface. Additionally notebooks now save the visualizations as output when they are written, this can result in rather large notebook files, so clear those outputs if this is not desired.
    To use this functionality, install jupyterlab-rachis (a PyPI release will be available shortly) into your Jupyter Lab environment or server. :chart_increasing:


Plugin Updates :electric_plug:

  • q2-alignment

  • q2-assembly

    • @misialq fixed a bug in simulate-masonwhich would cause sample IDs produced by the action to be non-unique :beetle:
    • @misialq added a new, simpler action for contig quality control evaluation (evaluate-contigs) :bar_chart:
    • @lizgehret patched up a bunch of tests to make them Python3.12-compatible :woman_running:
  • q2-annotate

    • @colinvwood fixed a bug in the MAG Kraken 2 classification :bug: where an exception would be thrown if all the lowest common ancestor classifications for all MAGs are unclassified
    • @misialq added support for sparse matrix multiplication in multiply-tables :cross_mark_button:
    • @felicia fixed an issue with the download of some EggNOG databases :down_arrow:
    • @misialq updated domain parsing in Kraken 2 reports to improve domain name inference :scroll:
    • @lizgehret patched up a bunch of tests to make them Python3.12-compatible :woman_running:
  • q2-boots :skis:

    • @Oddant1 added random seed parameters to the following Actions: alpha_collection, alpha, beta_collection, beta, core_metrics, kmer_diversity, and resample. This seed is used to seed random number generation in the underlying rarefy step. These parameters all use the CaptureHolder API so the values generated for the random seeds will be stored in provenance. :convenience_store:
  • q2-composition

    • @Macabe222 added a an option to filter by absolute value of log-fold change in the ancombc2-visualizer so that the most enriched and most depleted features can be simultaneously seen in the bar plot. :chart_increasing::chart_decreasing::star_struck:
    • @colinvwood updated ancombc2 to support changes in the latest version.
  • q2-cutadapt

    • @Macabe222 added a nextseq_trim parameter to the trim-single and trim-paired actions to accommodate proper processing of erroneous polyG tails that can occur on newer two color Illumina sequencers. :scissors:
  • q2-diversity

    • @Oddant1 added random seed parameters to the core_metrics and core_metrics_phylogenetic pipelines. This seed is used to seed random number generation in the underlying rarefy step. These parameters all use the CaptureHolder API so the values generated for the random seeds will be stored in provenance. :department_store:
    • @lizgehret updated several tests and functionality here and here to accommodate the following changes:
      • API changes from numpy >=2.
      • Updates within scikit-bio>=0.7.0.
      • Replaced calls to adonis with adonis2. Note that this has been modified at the subprocess call level to the R vegan package; the wrapper method name remains the same.
  • q2-diversity-lib

    • @lizgehret removed the sokalmichener method to accommodate SciPy 1.17.0 (as a part of the distribution-wide dependency updates), which has been deprecated in SciPy >=1.15.0. Details from SciPy on this deprecation can be found here.
  • q2-feature-table

    • @Macabe222 fixed a bug in the tabulate-seqs visualizer that was causing numeric metadata columns to sort alphabetically instead of numerically. :1234:
    • @Oddant1 made the random_seed parameter to rarefy a CaptureHolder, meaning the randomly generated value of the seed will now be stored in provenance. :jar:
  • q2-feature-classifier

    • @gregcaporaso made several updates to the extract-reads algorithm. Users should see decreases in runtime, and results may differ slightly from earlier versions (including some new reads being extracted, and some previously extracted reads no longer being extracted). Specifically, the changes are:
      • use of the new semi-global pairwise alignment functionality in scikit-bio > 0.7.0;
      • improved handling and scoring of degenerate nucleotide characters in primers and target sequences using an asymmetric substitution matrix such that degenerate characters in the primer, which typically indicate a pool of primers, match their intended targets (e.g., Y in a primer is scored as a match to C or T in the target), but degenerate characters in the target (e.g., N), which typically indicating missing information, are scored as a mismatch to any primer character;
      • a modification to the match scoring such that the forward and reverse primer match scores are now compared to the identity threshold independently (i.e., the forward and reverse primer must each be greater than or equal to the identity threshold to extract a read from a sequence) rather than as a weighted average of the forward and reverse primer matches;
      • the default identity threshold was decreased from 0.80 to 0.70 - based on manual review, this made sense as compensation for the stricter match scoring approach described above.
  • q2-phylogeny

    • A bug was found and fixed in midpoint-root which caused incorrect root placement under specific and unusual circumstances. Based on our analysis of the bug, and validation of hundreds of Phylogent[Rooted] artifacts generated over the last ~10 years, we think this is very unlikely to impact phylogenetic trees rooted with midpoint-root in practice. :root_vegetable:

      Where we do observe this is in very small test trees where the longest tip-to-tip distance (which the midpoint root would be centered on) passes through the pseudoroot (i.e., the arbitrarily placed trifurcation in an unrooted tree): in this case, the branch lengths from the pseudoroot to the next internal nodes were not considered. If those internal branch lengths tipped the balance of which tip-to-tip distance was the longest, the midpoint could have been incorrectly placed.

      As always, just a reminder that we don't recommend midpoint rooting for real phylogenetics though it does seem to work fine for use in computation of phylogenetic diversity metrics. Those phylogenetic diversity metrics are extremely unlikely to be impacted in any meaningful way by an incorrectly placed root as described here, so even if your root was incorrectly place it likely doesn't impact downstream conclusions drawn from metrics like Faith's Phylogenetic Diversity or UniFrac.

      We are providing a script that we used for testing our trees that you can apply to see if trees you generated were impacted by this bug. You can find this, along with instructions for using it, here.

    • @ebolyen added additional tests of midpoint root to avoid regressions on the above subject.

  • q2-sample-classifier

    • @lizgehret updated a few tests to accommodate API changes from numpy >=2. These updates included handling a differing level of decimal place accuracy (at values very close to zero) and differing sort orders for identical values (primarily lists of zeros). Tests have been adjusted with a tolerance and importances are now doubly sorted - first on importance values, then by the index.
  • q2-taxa

    • @colinvwood added a new action, feature-ids-to-taxonomy, that parses a taxonomy from feature table feature IDs that encode a taxonomy. This is useful for example in cases where taxa collapse has been run and a downstream action or visualizer still needs a FeatureData[Taxonomy] artifact.
  • q2-types

    • @Vinzent_Risch added a new type FeatureTable[Unconstrained] for feature tables containing real-valued feature measurements represented in Euclidean space without constant-sum (compositional) constraints.
  • q2-vsearch

    • @lizgehret updated one of the uchime tests and its accompanying test data to account for differing outputs that occurred in vsearch versions between 2.22 and 2.30 - the dataset has been modified to match the recommended toy dataset provided by Torbjørn Rognes. :face_with_monocle:
  • RESCRIPt


Documentation Updates :book:

Artifact? Method? Distribution? We know there's a lot of jargon used in the rachis ecosystem of tools. You can now find the canonical user-oriented glossary here and the canonical developer-oriented glossary here.


Thanks, as always, for your interest in QIIME 2 and our growing ecosystem of tools! If you'd like to get more involved in the QIIME 2 community, learn about some ways to do that here.

See you on the :qiime2: Forum! :waving_hand:t3:

Share:
Back to Blog