q2-conduit is a plugin that connects Conduit results to QIIME 2, acting as a converter that extracts QIIME-formatted artifacts from Conduit outputs for use in downstream analyses.

Overview

The Conduit software (developed by Charlie Bayne in the lab of Dr. David Gonzalez) provides a comprehensive metaproteomics workflow that combines peptide/protein identification and quantitation via DIA-NN with extensive protein annotation support, as well as data integration and GUI features designed specifically for metaproteomics.

Protein quantitation and taxonomic identification outputs from Conduit can be imported into QIIME 2, enabling seamless integration with the platform’s extensive microbiome analysis tools. q2-conduit is a QIIME 2 plugin that enables this import step.

Installation

q2-conduit requires a QIIME 2 installation. To install both the current QIIME 2 distribution and the q2-conduit plugin into a fresh environment named q2-conduit, run

conda env create \
 -n q2-conduit \
 -f https://raw.githubusercontent.com/biocore/q2-conduit.git/main/environment-files/q2-conduit-qiime2-2026.7.yml

The qiime2 distribution has no native Apple Silicon build. On such machines, either configure the environment for osx-64 and run under Rosetta, or use the tiny distribution instead, which builds natively and carries everything q2-conduit itself requires:

conda env create \
 -n q2-conduit \
 -f https://raw.githubusercontent.com/biocore/q2-conduit.git/main/environment-files/q2-conduit-tiny-2026.7.yml

If instead installing the q2-conduit plugin into a pre-existing QIIME 2 environment, activate the QIIME 2 environment and then install the plugin repository from GitHub:

pip install git+https://github.com/biocore/q2-conduit.git

After this, it is necessary to refresh the QIIME 2 plugin cache:

qiime dev refresh-cache

The q2-conduit plugin should now be in the list of installed plugins produced by running qiime --help

Usage

Extracting the input files from Conduit

Conduit collects its results in a single conduit.rds object, so the two tab-delimited files q2-conduit reads must first be written out from it. In R, with the path to your own Conduit output substituted for conduit.rds:

# Ensure conduitR is installed
if (!requireNamespace("conduitR", quietly = TRUE)) {
    if (!requireNamespace("remotes", quietly = TRUE)) {
        install.packages("remotes")
    }
    remotes::install_github("baynec2/conduitR")
}

# Configure
conduit_rds <- "conduit.rds" # path to your Conduit output

# Read Conduit.rds object and extract protein_groups SummarizedExperiment
# from QFeatures
conduit <- readRDS(conduit_rds)
pg_se <- conduit@QFeatures[["protein_groups"]]

# Extract Protein Group Info from SE, reformat, and write to .tsv
pg <- SummarizedExperiment::assay(pg_se, "intensity") |>
    as.data.frame() |>
    tibble::rownames_to_column(var = "protein_group")

readr::write_tsv(pg, "protein_group_matrix.tsv")

# Extract Taxonomy Information from rowdata, reformat, and write to tsv
taxonomy <- SummarizedExperiment::rowData(pg_se) |>
    as.data.frame() |>
    tibble::rownames_to_column(var = "protein_group") |>
    dplyr::select(
        protein_group,
        domain,
        kingdom,
        phylum,
        class,
        order,
        family,
        genus,
        species
    )

readr::write_tsv(taxonomy, "protein_group_taxonomy.tsv")

This writes protein_group_matrix.tsv, holding one row per protein group and one column per sample, and protein_group_taxonomy.tsv, holding one row per protein group and one column per taxonomic rank. Both files are keyed on the same protein_group column.

Importing into QIIME 2

In an active QIIME environment, import the two files into QIIME artifacts:

qiime tools import \
    --input-path protein_group_matrix.tsv \
    --output-path conduit_intensity_table.qza \
    --type ConduitIntensityTable

qiime tools import \
    --input-path protein_group_taxonomy.tsv \
    --output-path conduit_taxonomy_table.qza \
    --type ConduitTaxonomyTable

Extracting QIIME 2 objects

With these artifacts, it is simple to extract a FeatureTable[Unconstrained] QIIME object containing the intensities generated by Conduit, as well as a FeatureData[Taxonomy] QIIME object containing the associated protein groups’ taxonomies:

qiime conduit extract \
     --i-conduit-intensities conduit_intensity_table.qza \
     --i-conduit-taxonomy conduit_taxonomy_table.qza \
     --o-table conduit_intensities.qza \
     --o-taxonomy conduit_taxonomy.qza

Three things are worth knowing about the results:

  • A protein group naming more than one protein becomes a single feature whose id is the semicolon-joined protein list Conduit reports; no protein group is discarded.
  • The taxonomy string runs from kingdom to species, and every rank is present whether or not Conduit assigned it, so that the Nth rank of one feature’s taxonomy is the same rank as the Nth of another’s. A protein group with no assignment at any reported kingdom or more specific rank is labeled Unassigned.
  • Conduit writes NA for a protein group it did not measure in a given sample. Because biom tables cannot hold nulls, these become zeroes, and are therefore indistinguishable from a measured zero.

q2-conduit is a plugin that connects Conduit results to QIIME 2, acting as a converter that extracts QIIME-formatted artifacts from Conduit outputs for use in downstream analyses.

Overview

The Conduit software (developed by Charlie Bayne in the lab of Dr. David Gonzalez) provides a comprehensive metaproteomics workflow that combines peptide/protein identification and quantitation via DIA-NN with extensive protein annotation support, as well as data integration and GUI features designed specifically for metaproteomics.

Protein quantitation and taxonomic identification outputs from Conduit can be imported into QIIME 2, enabling seamless integration with the platform’s extensive microbiome analysis tools. q2-conduit is a QIIME 2 plugin that enables this import step.

Installation

q2-conduit requires a QIIME 2 installation. To install both the current QIIME 2 distribution and the q2-conduit plugin into a fresh environment named q2-conduit, run

conda env create \
 -n q2-conduit \
 -f https://raw.githubusercontent.com/biocore/q2-conduit.git/main/environment-files/q2-conduit-qiime2-2026.7.yml

The qiime2 distribution has no native Apple Silicon build. On such machines, either configure the environment for osx-64 and run under Rosetta, or use the tiny distribution instead, which builds natively and carries everything q2-conduit itself requires:

conda env create \
 -n q2-conduit \
 -f https://raw.githubusercontent.com/biocore/q2-conduit.git/main/environment-files/q2-conduit-tiny-2026.7.yml

If instead installing the q2-conduit plugin into a pre-existing QIIME 2 environment, activate the QIIME 2 environment and then install the plugin repository from GitHub:

pip install git+https://github.com/biocore/q2-conduit.git

After this, it is necessary to refresh the QIIME 2 plugin cache:

qiime dev refresh-cache

The q2-conduit plugin should now be in the list of installed plugins produced by running qiime --help

Usage

Extracting the input files from Conduit

Conduit collects its results in a single conduit.rds object, so the two tab-delimited files q2-conduit reads must first be written out from it. In R, with the path to your own Conduit output substituted for conduit.rds:

# Ensure conduitR is installed
if (!requireNamespace("conduitR", quietly = TRUE)) {
    if (!requireNamespace("remotes", quietly = TRUE)) {
        install.packages("remotes")
    }
    remotes::install_github("baynec2/conduitR")
}

# Configure
conduit_rds <- "conduit.rds" # path to your Conduit output

# Read Conduit.rds object and extract protein_groups SummarizedExperiment
# from QFeatures
conduit <- readRDS(conduit_rds)
pg_se <- conduit@QFeatures[["protein_groups"]]

# Extract Protein Group Info from SE, reformat, and write to .tsv
pg <- SummarizedExperiment::assay(pg_se, "intensity") |>
    as.data.frame() |>
    tibble::rownames_to_column(var = "protein_group")

readr::write_tsv(pg, "protein_group_matrix.tsv")

# Extract Taxonomy Information from rowdata, reformat, and write to tsv
taxonomy <- SummarizedExperiment::rowData(pg_se) |>
    as.data.frame() |>
    tibble::rownames_to_column(var = "protein_group") |>
    dplyr::select(
        protein_group,
        domain,
        kingdom,
        phylum,
        class,
        order,
        family,
        genus,
        species
    )

readr::write_tsv(taxonomy, "protein_group_taxonomy.tsv")

This writes protein_group_matrix.tsv, holding one row per protein group and one column per sample, and protein_group_taxonomy.tsv, holding one row per protein group and one column per taxonomic rank. Both files are keyed on the same protein_group column.

Importing into QIIME 2

In an active QIIME environment, import the two files into QIIME artifacts:

qiime tools import \
    --input-path protein_group_matrix.tsv \
    --output-path conduit_intensity_table.qza \
    --type ConduitIntensityTable

qiime tools import \
    --input-path protein_group_taxonomy.tsv \
    --output-path conduit_taxonomy_table.qza \
    --type ConduitTaxonomyTable

Extracting QIIME 2 objects

With these artifacts, it is simple to extract a FeatureTable[Unconstrained] QIIME object containing the intensities generated by Conduit, as well as a FeatureData[Taxonomy] QIIME object containing the associated protein groups’ taxonomies:

qiime conduit extract \
     --i-conduit-intensities conduit_intensity_table.qza \
     --i-conduit-taxonomy conduit_taxonomy_table.qza \
     --o-table conduit_intensities.qza \
     --o-taxonomy conduit_taxonomy.qza

Three things are worth knowing about the results:

  • A protein group naming more than one protein becomes a single feature whose id is the semicolon-joined protein list Conduit reports; no protein group is discarded.
  • The taxonomy string runs from kingdom to species, and every rank is present whether or not Conduit assigned it, so that the Nth rank of one feature’s taxonomy is the same rank as the Nth of another’s. A protein group with no assignment at any reported kingdom or more specific rank is labeled Unassigned.
  • Conduit writes NA for a protein group it did not measure in a given sample. Because biom tables cannot hold nulls, these become zeroes, and are therefore indistinguishable from a measured zero.

q2-conduit is a plugin that connects Conduit results to QIIME 2, acting as a converter that extracts QIIME-formatted artifacts from Conduit outputs for use in downstream analyses.

Overview

The Conduit software (developed by Charlie Bayne in the lab of Dr. David Gonzalez) provides a comprehensive metaproteomics workflow that combines peptide/protein identification and quantitation via DIA-NN with extensive protein annotation support, as well as data integration and GUI features designed specifically for metaproteomics.

Protein quantitation and taxonomic identification outputs from Conduit can be imported into QIIME 2, enabling seamless integration with the platform’s extensive microbiome analysis tools. q2-conduit is a QIIME 2 plugin that enables this import step.

Installation

q2-conduit requires a QIIME 2 installation. To install both the current QIIME 2 distribution and the q2-conduit plugin into a fresh environment named q2-conduit, run

conda env create \
 -n q2-conduit \
 -f https://raw.githubusercontent.com/biocore/q2-conduit.git/main/environment-files/q2-conduit-qiime2-2026.7.yml

The qiime2 distribution has no native Apple Silicon build. On such machines, either configure the environment for osx-64 and run under Rosetta, or use the tiny distribution instead, which builds natively and carries everything q2-conduit itself requires:

conda env create \
 -n q2-conduit \
 -f https://raw.githubusercontent.com/biocore/q2-conduit.git/main/environment-files/q2-conduit-tiny-2026.7.yml

If instead installing the q2-conduit plugin into a pre-existing QIIME 2 environment, activate the QIIME 2 environment and then install the plugin repository from GitHub:

pip install git+https://github.com/biocore/q2-conduit.git

After this, it is necessary to refresh the QIIME 2 plugin cache:

qiime dev refresh-cache

The q2-conduit plugin should now be in the list of installed plugins produced by running qiime --help

Usage

Extracting the input files from Conduit

Conduit collects its results in a single conduit.rds object, so the two tab-delimited files q2-conduit reads must first be written out from it. In R, with the path to your own Conduit output substituted for conduit.rds:

# Ensure conduitR is installed
if (!requireNamespace("conduitR", quietly = TRUE)) {
    if (!requireNamespace("remotes", quietly = TRUE)) {
        install.packages("remotes")
    }
    remotes::install_github("baynec2/conduitR")
}

# Configure
conduit_rds <- "conduit.rds" # path to your Conduit output

# Read Conduit.rds object and extract protein_groups SummarizedExperiment
# from QFeatures
conduit <- readRDS(conduit_rds)
pg_se <- conduit@QFeatures[["protein_groups"]]

# Extract Protein Group Info from SE, reformat, and write to .tsv
pg <- SummarizedExperiment::assay(pg_se, "intensity") |>
    as.data.frame() |>
    tibble::rownames_to_column(var = "protein_group")

readr::write_tsv(pg, "protein_group_matrix.tsv")

# Extract Taxonomy Information from rowdata, reformat, and write to tsv
taxonomy <- SummarizedExperiment::rowData(pg_se) |>
    as.data.frame() |>
    tibble::rownames_to_column(var = "protein_group") |>
    dplyr::select(
        protein_group,
        domain,
        kingdom,
        phylum,
        class,
        order,
        family,
        genus,
        species
    )

readr::write_tsv(taxonomy, "protein_group_taxonomy.tsv")

This writes protein_group_matrix.tsv, holding one row per protein group and one column per sample, and protein_group_taxonomy.tsv, holding one row per protein group and one column per taxonomic rank. Both files are keyed on the same protein_group column.

Importing into QIIME 2

In an active QIIME environment, import the two files into QIIME artifacts:

qiime tools import \
    --input-path protein_group_matrix.tsv \
    --output-path conduit_intensity_table.qza \
    --type ConduitIntensityTable

qiime tools import \
    --input-path protein_group_taxonomy.tsv \
    --output-path conduit_taxonomy_table.qza \
    --type ConduitTaxonomyTable

Extracting QIIME 2 objects

With these artifacts, it is simple to extract a FeatureTable[Unconstrained] QIIME object containing the intensities generated by Conduit, as well as a FeatureData[Taxonomy] QIIME object containing the associated protein groups’ taxonomies:

qiime conduit extract \
     --i-conduit-intensities conduit_intensity_table.qza \
     --i-conduit-taxonomy conduit_taxonomy_table.qza \
     --o-table conduit_intensities.qza \
     --o-taxonomy conduit_taxonomy.qza

Three things are worth knowing about the results:

  • A protein group naming more than one protein becomes a single feature whose id is the semicolon-joined protein list Conduit reports; no protein group is discarded.
  • The taxonomy string runs from kingdom to species, and every rank is present whether or not Conduit assigned it, so that the Nth rank of one feature’s taxonomy is the same rank as the Nth of another’s. A protein group with no assignment at any reported kingdom or more specific rank is labeled Unassigned.
  • Conduit writes NA for a protein group it did not measure in a given sample. Because biom tables cannot hold nulls, these become zeroes, and are therefore indistinguishable from a measured zero.

q2-conduit is a plugin that connects Conduit results to QIIME 2, acting as a converter that extracts QIIME-formatted artifacts from Conduit outputs for use in downstream analyses.

Overview

The Conduit software (developed by Charlie Bayne in the lab of Dr. David Gonzalez) provides a comprehensive metaproteomics workflow that combines peptide/protein identification and quantitation via DIA-NN with extensive protein annotation support, as well as data integration and GUI features designed specifically for metaproteomics.

Protein quantitation and taxonomic identification outputs from Conduit can be imported into QIIME 2, enabling seamless integration with the platform’s extensive microbiome analysis tools. q2-conduit is a QIIME 2 plugin that enables this import step.

Installation

q2-conduit requires a QIIME 2 installation. To install both the current QIIME 2 distribution and the q2-conduit plugin into a fresh environment named q2-conduit, run

conda env create \
 -n q2-conduit \
 -f https://raw.githubusercontent.com/biocore/q2-conduit.git/main/environment-files/q2-conduit-qiime2-2026.7.yml

The qiime2 distribution has no native Apple Silicon build. On such machines, either configure the environment for osx-64 and run under Rosetta, or use the tiny distribution instead, which builds natively and carries everything q2-conduit itself requires:

conda env create \
 -n q2-conduit \
 -f https://raw.githubusercontent.com/biocore/q2-conduit.git/main/environment-files/q2-conduit-tiny-2026.7.yml

If instead installing the q2-conduit plugin into a pre-existing QIIME 2 environment, activate the QIIME 2 environment and then install the plugin repository from GitHub:

pip install git+https://github.com/biocore/q2-conduit.git

After this, it is necessary to refresh the QIIME 2 plugin cache:

qiime dev refresh-cache

The q2-conduit plugin should now be in the list of installed plugins produced by running qiime --help

Usage

Extracting the input files from Conduit

Conduit collects its results in a single conduit.rds object, so the two tab-delimited files q2-conduit reads must first be written out from it. In R, with the path to your own Conduit output substituted for conduit.rds:

# Ensure conduitR is installed
if (!requireNamespace("conduitR", quietly = TRUE)) {
    if (!requireNamespace("remotes", quietly = TRUE)) {
        install.packages("remotes")
    }
    remotes::install_github("baynec2/conduitR")
}

# Configure
conduit_rds <- "conduit.rds" # path to your Conduit output

# Read Conduit.rds object and extract protein_groups SummarizedExperiment
# from QFeatures
conduit <- readRDS(conduit_rds)
pg_se <- conduit@QFeatures[["protein_groups"]]

# Extract Protein Group Info from SE, reformat, and write to .tsv
pg <- SummarizedExperiment::assay(pg_se, "intensity") |>
    as.data.frame() |>
    tibble::rownames_to_column(var = "protein_group")

readr::write_tsv(pg, "protein_group_matrix.tsv")

# Extract Taxonomy Information from rowdata, reformat, and write to tsv
taxonomy <- SummarizedExperiment::rowData(pg_se) |>
    as.data.frame() |>
    tibble::rownames_to_column(var = "protein_group") |>
    dplyr::select(
        protein_group,
        domain,
        kingdom,
        phylum,
        class,
        order,
        family,
        genus,
        species
    )

readr::write_tsv(taxonomy, "protein_group_taxonomy.tsv")

This writes protein_group_matrix.tsv, holding one row per protein group and one column per sample, and protein_group_taxonomy.tsv, holding one row per protein group and one column per taxonomic rank. Both files are keyed on the same protein_group column.

Importing into QIIME 2

In an active QIIME environment, import the two files into QIIME artifacts:

qiime tools import \
    --input-path protein_group_matrix.tsv \
    --output-path conduit_intensity_table.qza \
    --type ConduitIntensityTable

qiime tools import \
    --input-path protein_group_taxonomy.tsv \
    --output-path conduit_taxonomy_table.qza \
    --type ConduitTaxonomyTable

Extracting QIIME 2 objects

With these artifacts, it is simple to extract a FeatureTable[Unconstrained] QIIME object containing the intensities generated by Conduit, as well as a FeatureData[Taxonomy] QIIME object containing the associated protein groups’ taxonomies:

qiime conduit extract \
     --i-conduit-intensities conduit_intensity_table.qza \
     --i-conduit-taxonomy conduit_taxonomy_table.qza \
     --o-table conduit_intensities.qza \
     --o-taxonomy conduit_taxonomy.qza

Three things are worth knowing about the results:

  • A protein group naming more than one protein becomes a single feature whose id is the semicolon-joined protein list Conduit reports; no protein group is discarded.
  • The taxonomy string runs from kingdom to species, and every rank is present whether or not Conduit assigned it, so that the Nth rank of one feature’s taxonomy is the same rank as the Nth of another’s. A protein group with no assignment at any reported kingdom or more specific rank is labeled Unassigned.
  • Conduit writes NA for a protein group it did not measure in a given sample. Because biom tables cannot hold nulls, these become zeroes, and are therefore indistinguishable from a measured zero.