Important
This plugin has been deprecated in favour of the new Nextflow command nextflow plugin create and template project nf-plugin-template.
This project contains a simple Nextflow plugin called nf-hello which provides examples of different plugin extensions:
- A custom trace observer that prints a message when the workflow starts and when the workflow completes
- A custom channel factory called reverse
- A custom operator called goodbye
- A custom function called randomString
NOTE: If you want to use this project as a starting point for a custom plugin, you must rename the plugins/nf-hello folder and update settings.gradle with your plugin name.
See the Nextflow documentation for more information about developing plugins.
- 
settings.gradleGradle project settings. 
- 
plugins/nf-helloThe plugin implementation base directory. 
- 
plugins/nf-hello/build.gradlePlugin Gradle build file. Project dependencies should be added here. 
- 
plugins/nf-hello/src/resources/META-INF/MANIFEST.MFManifest file defining the plugin attributes e.g. name, version, etc. The attribute Plugin-Classdeclares the plugin main class. This class should extend the base classnextflow.plugin.BasePlugine.g.nextflow.hello.HelloPlugin.
- 
plugins/nf-hello/src/resources/META-INF/extensions.idxThis file declares one or more extension classes provided by the plugin. Each line should contain the fully qualified name of a Java class that implements the org.pf4j.ExtensionPointinterface (or a sub-interface).
- 
plugins/nf-hello/src/mainThe plugin implementation sources. 
- 
plugins/nf-hello/src/testThe plugin unit tests. 
- 
HelloConfig: shows how to handle options from the Nextflow configuration
- 
HelloExtension: shows how to create custom channel factories, operators, and fuctions that can be included into pipeline scripts
- 
HelloFactoryandHelloObserver: shows how to react to workflow events with custom behavior
- 
HelloPlugin: the plugin entry point
To run your unit tests, run the following command in the project root directory (ie. where the file settings.gradle is located):
./gradlew checkTo build and test the plugin during development, configure a local Nextflow build with the following steps:
- 
Clone the Nextflow repository in your computer into a sibling directory: git clone --depth 1 https://github.com/nextflow-io/nextflow ../nextflow 
- 
Configure the plugin build to use the local Nextflow code: echo "includeBuild('../nextflow')" >> settings.gradle (Make sure to not add it more than once!) 
- 
Compile the plugin alongside the Nextflow code: make assemble 
- 
Run Nextflow with the plugin, using ./launch.shas a drop-in replacement for thenextflowcommand, and adding the option-plugins nf-helloto load the plugin:./launch.sh run nextflow-io/hello -plugins nf-hello 
The plugin can be tested without using a local Nextflow build using the following steps:
- Build the plugin: make buildPlugins
- Copy build/plugins/<your-plugin>to$HOME/.nextflow/plugins
- Create a pipeline that uses your plugin and run it: nextflow run ./my-pipeline-script.nf
The project should be hosted in a GitHub repository whose name matches the name of the plugin, that is the name of the directory in the plugins folder (e.g. nf-hello).
Follow these steps to package, upload and publish the plugin:
- 
Create a file named gradle.propertiesin the project root containing the following attributes (this file should not be committed to Git):- github_organization: the GitHub organisation where the plugin repository is hosted.
- github_username: The GitHub username granting access to the plugin repository.
- github_access_token: The GitHub access token required to upload and commit changes to the plugin repository.
- github_commit_email: The email address associated with your GitHub account.
 
- 
Use the following command to package and create a release for your plugin on GitHub: ./gradlew :plugins:nf-hello:upload 
- 
Create a pull request against nextflow-io/plugins to make the plugin accessible to Nextflow.