---
title: Nextflow plugin registry
description: Use the Nextflow plugin registry to discover, publish, and manage Nextflow plugins.
---

# Nextflow plugin registry

The [Nextflow plugin registry](https://registry.nextflow.io/) is a central repository for Nextflow plugins. It hosts an index of plugin metadata that supports plugin discovery, accessibility, and version tracking.

Nextflow 25.10 and later can use the plugin registry as a drop-in replacement for the [legacy plugin index](https://github.com/nextflow-io/plugins) hosted on GitHub. See [Migrating to the Nextflow plugin registry][migrate-plugin-page] for more information about migrating to the Nextflow plugin registry.

See [Publishing a plugin][gradle-plugin-publish] for instructions on how to publish plugins to the registry, including the [README.md requirement][gradle-plugin-readme].

## Claiming a plugin

Ownership of a plugin is required to publish plugins to the Nextflow plugin registry.

To claim ownership of a plugin:

1. Open the [Nextflow plugin registry](https://registry.nextflow.io/) in a browser.

2. Log in to [Seqera](https://cloud.seqera.io/login) with your GitHub or Google account, or by providing an email address.

    :::note
    If you are logging in for the first time, Seqera will send an authentication link to your email address to complete the login process.
    :::

3. Go to the **My plugins** page and select **Claim a plugin**.

4. Enter your unique plugin name or select the plugin you wish to claim in the **Plugin name** field.

5. Enter your organization name in the **Provider** field.

    :::note
    Your organization must match the provider specified when publishing your plugin.
    :::

6. Select **Submit Request**.

The plugin will show as **PENDING REVIEW** under **Pending Ownership Requests** until an admin approves the claim. Admin approval is required only once.

## Creating an access token

An API access token is required to publish plugins to the Nextflow plugin registry.

To create an API access token:

1. Open the [Nextflow plugin registry](https://registry.nextflow.io/) in a browser.

2. Log in to [Seqera](https://cloud.seqera.io/login) with your GitHub or Google account, or by providing an email address.

    :::note
    If you are logging in for the first time, Seqera will send an authentication link to your email address to complete the login process.
    :::

3. Go to the **Access tokens** page.

4. Under **Create New Access Token**, enter a descriptive name for the **Token name** and select the token duration from the **Expiry** drop down.

5. Select **Generate token**.

6. Copy and past token somewhere safe, you won't be able to see it again.

Once you have your token, see [Publishing a plugin][gradle-plugin-publish] for instructions on how to use it.

## Configuring plugin registries

<AddedInVersion version="26.10" />

By default, Nextflow resolves plugins from the public registry at `https://registry.nextflow.io`.
Configure the plugin registries using the `registry` scope in your Nextflow configuration:

```groovy
registry {
    url = 'https://registry.myorg.com'
}
```

The registries defined in `registry.url` are authoritative: when one or more are configured, Nextflow resolves plugins from exactly those, in the order they are listed, and the public registry is *not* added implicitly. To keep resolving plugins from the public registry as well, include its URL (`https://registry.nextflow.io/api`) in the list explicitly.

When the same plugin is published in more than one configured registry, Nextflow combines the available versions across all of them. If a given version is served by multiple registries, the registry listed first takes precedence.

See the [registry config scope][config-registry] for the full reference.

Alternatively, to override the default registry without using the `registry` scope, set the `NXF_PLUGINS_REGISTRY_URL` environment variable.

:::note
Both `registry.url` and `NXF_PLUGINS_REGISTRY_URL` override the default plugin registry. When both are set, `registry.url` takes precedence. Unlike `registry.url` — which configures the registries for both modules and plugins — `NXF_PLUGINS_REGISTRY_URL` applies to plugin resolution only.
:::

:::warning
The `registry` scope is only applied once the configuration has been resolved. Plugins required *before* that point — for example a filesystem provider for a remote pipeline script or an `includeConfig` location (such as `s3://`), or an SCM provider — are resolved against the default plugin registry (or `NXF_PLUGINS_REGISTRY_URL`). As a result, the default registry may still be fetched even when it is not listed in `registry.url`. Plugins needed at this early stage must be available in the default registry, set via `NXF_PLUGINS_REGISTRY_URL`, or pre-installed.
:::

[config-registry]: ../reference/config/registry
[gradle-plugin-publish]: ../guides/gradle-plugin#publishing-a-plugin
[gradle-plugin-readme]: ../guides/gradle-plugin#readmemd-requirement
[migrate-plugin-page]: ../guides/migrate-plugin
