QIIME 2 2025.10 is now available!

Hello QIIME 2 Community! :waving_hand:t3:

Our second full release for 2025 is now available! :partying_face: Huge thanks to everyone for all of their hard work; this is a large release with lots of new and exciting features, bug fixes, and more! :raising_hands:t3:


:police_car_light: Important Announcements :police_car_light:

Job announcement :loudspeaker:

  • Northern Arizona University is hiring one or more Assistant Professors for the academic year beginning in Fall 2026. We are specifically interested in people who have a background in building and deploying ML/AI methods in support of microbiome research. Have you deployed ML/AI tools in QIIME 2 plugins? That's a plus! Come to NAU and helps us lead in microbiome data science! Learn more here.

:bangbang: Interface Changes coming in QIIME 2 2026.1 :bangbang:

  • We're planning a broad update to plugins to more consistently refer to metadata, such that many metadata parameters will be renamed to either sample-metadata or feature-metadata. This will impact a lot of actions, but will result in more consistent naming so should ultimately make QIIME 2 more convenient for users.

  • q2-dada2

    • --p-n-reads-learn is going to be replaced by --p-n-bases-learn in denoise-single and denoise-paired to match the behavior in dada2 :collision:
  • q2-feature-classifier

    • vsearch-global --maxrejects default is going to change :warning:
  • q2-feature-table

    • group is now going to create metadata for the resulting groups, resulting in a new required output :right_arrow:
    • the summarize-plus action will be removed as the current summarize-plus action replaces the existing summarize action.
  • q2-taxa

    • Our new experimental taxonomy bar plot, available through the barplot2 command, will be removed as this functionality replaces the current barplot command. The current barplot action will likely be retained as a new barplot-old action.

Developer Announcements :brick:

Starting in 2026, we’ll update our Python version at most once per year, and only in the April full release (when needed). This gives plugin developers ample time to keep their plugins current and reduces the internal time spend for our team to make these changes each year.

How we decide if we're upgrading our Python version dependency :thinking:

  • After each October release we assess whether a Python update is possible, based on the availability of compatible conda packages for our dependencies, and/or require, based on the end-of-life timeline for our current version.

  • If an update is planned for April, we start testing immediately so there’s ample time to solve environments and address any API-related test failures.

What this means for developers :index_pointing_at_the_viewer:t3:

  • If you maintain a plugin, plan your compatibility work between Oct → Apr (when a Python bump is announced).

  • No Python bumps will occur in January, July, or October releases.

What this means for users

  • Not much. The details of which version of Python QIIME 2 users isn't something users need to be too concerned with.

More details on the schedule and policy can be found here :snake:


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


QIIME 2 View Updates :mag:

  • @Oddant1 added provenance-based error reporting to QIIME 2 View. We are now maintaining a database of known issues with plugin versions, so that we can alert users if problems arise (including information on the severity of issues). If you load a Result in QIIME 2 View that is affected by any known issues, the Provenance view will show which nodes are affected and by what issues. Here's an example:

  • @Oddant1 enabled more informative viewing of QIIME 2 Artifacts (i.e., .qza files, as opposed to Visualizations or .qzv files) in QIIME 2 View. Now, if you load an Artifact, you'll get a preview of and download links for the data they contain. This provides additional transparency on our .qza file format (remember, it's just a fancy zip file), as well as another easy way to export data from QIIME 2 if you'd like to do that. Here's an example:

  • @jacobs found and fixed a bug in q2view that prevented it from loading URLs with uuids in them here :1234:


Distribution Updates :package:


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

  • The QIIME 2 Framework (sometimes referred to as Q2F) is being re-branded as rachis. This won't impact users or developers, but will help us improve clarity in our documentation and is intended to convey generality of Q2F as we explore expanded directions for the project. Learn more in our News post.

  • @ebolyen added a new visualization type called Report, which enables combining of multiple QIIME 2 Visualizations into a single report that can be shared. This can be accessed using the new qiime tools make-report command, which takes a collection of .qzv files as input. It can also be accessed through the Python API. Interact with an example of this on QIIME 2 View here, or see this screenshot. Happy Reporting! :chart_increasing:

  • @Oddant1 fixed an issue with recycling output collections when only part of the collection is present. Previously, it would cause an error, now it will only warn then run the action to recreate the collection :warning:

  • @Oddant1 changed the extent of detail in the logs written by actions when run in parallel. These no longer contain debug-level information, as this was very verbose and made it harder to find relevant information. :wood:

  • @Oddant1 made the behavior of adding multiple copies of the same Result (Results with the same UUID) with different Annotations to the Cache consistent. The Annotations will now be merged in the Cache, and the cached version of the Result will contain all Annotations from all copies :printer:

  • @lizgehret added a new migration warning that can be used for actions or vizualizers that are being moved from one plugin to another. This is a new parameter on the register_plugin action, with syntax is as follows:

    migrated={'to_plugin': 'str',
              'from_distro': 'str',
              'to_distro': 'str',
              'epoch': 'str'}
    

    With to_plugin being a required key, and all other keys optional.

  • @lizgehret created the new Archive v7.1 Format, which includes support for cryptographic signing of QIIME 2 Results. This leverages a new Annotation sub-type :scroll: Signature, that can be used to self-sign Artifacts or Visualizations, thus allowing confirmation of who created a particular QIIME 2 Result. This provides a path to secure sharing of QIIME 2 Results that contain executable code, such as AI/ML models, that users may want to apply to their private data (for example, taxonomic classifiers or sample classifiers). :identification_card:

    • Signatures can be added to an existing QIIME 2 Result (of Archive version 7+) by using the qiime tools annotation-create command. They can subsequently be verified using the qiime tools signature-verify command. These actions can also be used via the Python API with artifact.add_annotation(Signature()) and result.verify('signature-name').
    • Note that this signing and verifying is only made possible by the existence of GnuPG on your machine, as a GnuPG keypair fingerprint is required for Signature creation, and the existence of the public key connected to an existing Signature on your GnuPG keyring is required for verification. More information on how to install GnuPG and utilize Signatures can be found in our user docs (link to be added here within the next few days).

Interface Updates :tv:

  • q2cli

    • @Oddant1 added a qiime tools cache-export builtin for exporting artifacts directly from the cache :package:
    • @ebolyen added qiime tools make-report to generate Reports using the "matryoshka" template (so named because it can be arbitrarily nested, resulting in a hierarchical sidebar containing as many visualizations as you wish to collate). You can see an example here (or in the Report screenshot above).
  • q2templates

    • @ebolyen created a new matryoshka_template which is for the new make_report functionality, allowing arbitrarily many visualizations and reports to be collated into a new report.

Plugin Updates :electric_plug:

  • q2-dada2

    • @jordenrabasco added a new output to each of the denoise methods that records the base transition error rates and added a visualizer (plot-base-transitions) to display them. :bar_chart:
  • q2-demux

    • @Vinzent_Risch added a --p-remove-empty option to the filter-samples action that allows samples that contain empty fastq files to be omitted in the output. :jar:
    • @Vinzent_Risch improved the error handling in filter-samples if no samples remain after filtering :no_entry:
  • q2-diversity

    • @Macabe222 changed the plot type of the mantel visualizer to a binned variety to fix a bug where very large distance matrices could cause the browser to slow down. :framed_picture:
  • q2-diversity-lib

    • @gregcaporaso added a base parameter to Shannon's Diversity Index (the shannon-entropy action). This enables users to overwrite QIIME 2's default logarithm base of 2 for this metric to optionally use e (or any other value > 0.0). Providing e as the base will match the Shannon values generated by vegan, scikit-bio, and other tools. At this time, we do not plan to change the default in QIIME 2 for a few reasons:
      • first, we recommend against direct comparison of alpha diversity values across tools (e.g., vegan versus QIIME 2), as the values are very sensitive to upstream analysis parameters such as those used in quality control and rarefaction;
      • second, the relative ranks of Shannon Diversity values for a collection of samples is stable regardless of which base is used for the calculation of diversity for all of those samples - for example, the ranking of Shannon Diversity values will be the same whether they are calculated with vegan (base=e) or QIIME 2 (base=2);
      • and finally, changing the default would result in different Shannon Diversity values across versions of QIIME 2, and given the first two points, the juice doesn't seem worth the squeeze. :beverage_box: :tangerine:
  • q2-feature-table

    • @Macabe222 refactored the tabulate-seqs visualizer to make the sequence count and length statistics only take into account those records that have DNA sequences. :dna:
    • @Vinzent_Risch added the ability to provide a random seed to subsample_ids, improving reproducibility of this Action. :seedling:
  • q2-phylogeny

    • @fethalen exposed parttree and large MAFFT parameters in iqtree and fasttree pipelines. :evergreen_tree:
    • @fethalen updated root-at-midpoint action to use new defaults, removing warnings and ensuring compatibility with future scikit-bio releases.
  • q2-taxa

    • @colinvwood added a new taxonomic bar plot visualizer (barplot2) that adds long-requested features such as taxon and sample filtering, expansion of some taxa to lower levels, and to address pain points with the barplot visualizer such as poor performance in certain situations. The barplot2 visualizer should be considered experimental for this release cycle, meaning there is a greater possibility that unexpected/incorrect behavior will occur as it is user tested. In the next release barplot2 will likely replace barplot. We're very interested in user feedback on barplot2 - please consider testing it and letting us know what you think, and what other features you'd like to see! This is great chance to impact the future development of this visualizer! Interact with an example here, or just check out this screenshot:

  • q2-types

    • @Macabe222 made changes that ensure that paired-end sequencing artifacts allow only forward/reverse read pairs with an equal number of records. :robot:
    • @Vinzent_Risch migrated the collate-contigs, collate-genomes and partition-contigs actions from q2-assembly into q2-types to support more general use across multiple plugins :electric_plug:
    • @Vinzent_Risch added new collation actions for GenomeData[Genes] and GenomeData[Proteins] :dna:
  • q2-vizard

    • @Macabe222 unified the subtitle font size for all plots, set a maximum length for all plot titles, and removed grid lines from heatmap :bar_chart:
  • RESCRIPt

    • @SoilRotifer updated the action get-pr2-data:
      • Removed PR2 reference database 4.14.0, as this database was never meant to be fetched as it only contains 8 taxonomic ranks. This action was intended to fetch recent databases that contain 9 taxonomic ranks.
      • PR2 reference database 5.1.0 can now be downloaded.
      • code for this action was refactored to enable more streamlined unit testing.
    • @SoilRotifer updated the action get-midori2-data:
      • users can now fetch the recent MIDORI Reference 2 sequence & taxonomy data: GenBank266_2025-04-24 and GenBank267_2025-06-19.
    • @SoilRotifer added the action get-eukaryome-data. Users can now download reference sequences and reference taxonomy from the Eukaryome reference database. Options include:
      • the ability to download separate SSU, LSU, and ITS sequences
      • the entire region that contain these genes , i.e. "longread".
      • can download all available data simultaneously for a given database version.
    • @SoilRotifer added migration warnings for the following actions, which are tentatively slated for the 2026.1 release of QIIME 2:
      • evaluate-cross-validate will be migrated to the q2-feature-classifier plugin.
      • evaluate-fit-classifier will be migrated to the q2-feature-classifier plugin.
      • trim-alignment will be migrated to the q2-alignment plugin.

Community Plugin Updates :electric_plug:


Docker Container Updates :jar:

  • @Oddant1 created a workflow to make publishing Galaxy Docker containers for the amplicon distribution easier, so expect to see those on quay :star:
Share:
Back to Blog