The Qiita plugins allow to extend the functionality of Qiita by adding new data formats or new processing pipelines. The list of officially supported plugins can be found in the Qiita Spots GitHub organization.
Overview of Qiita’s plugin system¶
Qiita’s plugin system has been designed to increase Qiita’s flexibility to process -omics datasets, while allowing plugin developers to create plugins using the programming language that they are more comfortable with.
In order to achieve this flexibility, Qiita represents the different -omics
Artifacts where an
Artifact is a file or set of files
that conceptually represents a dataset. Note that Qiita is not
Pipeline aware, thus it is up to the Qiita Plugins to define what an
Artifact is and which methods can be applied to it. With the goal of reducing
community development effort, there are two different types of plugins:
Qiita Type Plugins and
Qiita Type Plugins define new artifact types. These plugins must define
Generate HTML summary.
Given the artifact type, the prep information (see, Prepare information files)
and the user-uploaded files, the
Validate operation decides if the
user-uploaded files conform
Artifact of the new type. If the files do
not create a valid artifact, the plugin should try to fix the files using the
given information, but only if the files can be deterministically fixed and not
generate ambiguous results.
Generate HTML summary generates a single HTML file with an overview
of the contents of the artifact. Note that the summary HTML is a single file
and should contain all information about all the files attached to that
Qiita Plugins define pipelines and methods that can be applied to
Artifacts. They don’t need to import directly from the
Qiita Type Plugins that is defining the
Artifact type, but they will
need such plugin to be present in the system, otherwise Qiita will not accept
Artifacts of the given type. There are no limitation on the
methods: they can take one or more input artifacts and generate one or more
Artifacts. Besides defining individual methods, the
also have the ability to define default
workflows, where a
a set of methods connected by their input/outputs to perform a bigger task over
one or a set of artifacts.
Plugins run in independent software environments from Qiita (i.e. different
PYTHONPATH environment variables, among others), allowing them
to have any dependency stack as well as being able to be written in any
language. Qiita only needs a single script to start the plugin, which should
conform with this call:
start_script_name QIITA_SERVER_URL JOB_ID OUTPUT_DIR
The plugin will then use QIITA’s REST API to gather the needed information
to run the given job
JOB_ID and to send back the results of the job.
Developing a Qiita Plugin¶
To facilitate the development of Qiita Plugins, we have created a library that simplifies the usage of Qiita’s REST api: Qiita Client. This library encapsulates the authentication of the plugin when using Qiita’s REST api, as well as providing convenient functions to retrieve the job information, update the job status and complete the job. This library should not require any further development from the plugin developer and it should be ready to use.
We have also created two Cookiecutter templates to create plugins:
- qtp-template-cookiecutter: Template to create Qiita Type Plugins
- qp-template-cookiecutter: Template to create Qiita Plugins
These templates are designed to set up new
Qiita Type Plugins and
Qiita Plugins, respectively. They take care of the initial repository layout,
the initial plugin set up and the initial communication with Qiita. Please,
refer to the README file in each of the templates for instructions on how to
fill these templates to implement your plugins.