> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dify.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Publish to Individual GitHub Repository

> Distribute a Dify plugin from your own GitHub repository so users can install it directly via repo URL, with no marketplace review required

Publishing through a personal GitHub repository lets you ship a plugin without going through Dify Marketplace review. Users install the plugin by entering your repo URL and selecting a release that contains a `.difypkg` asset.

This method fits when:

* You want full control over versioning and the release cadence.
* The plugin is open source and you want others to read, fork, or contribute to it.
* The plugin is for internal use within a team or org, but you still want one canonical install URL.
* Your plugin is awaiting marketplace review and you need an interim distribution channel.

For a comparison with other publishing methods, see the [Publishing Overview](/en/develop-plugin/publishing/marketplace-listing/release-overview).

## Prerequisites

* A packaged plugin (`.difypkg` file). If you don't have one yet, see [Package as Local File and Share](/en/develop-plugin/publishing/marketplace-listing/release-by-file).
* A GitHub account.
* A Dify workspace where you (or your users) have permission to install plugins.

## Step 1: Create a GitHub Repository

<Steps>
  <Step title="Create the repository">
    On GitHub, create a new public repository. The name typically matches your plugin name (for example, `dify-plugin-flomo`).
  </Step>

  <Step title="Push your plugin source">
    Initialize git in your plugin project and push the source code:

    ```bash theme={null}
    cd your_plugin_project
    git init
    git add .
    git commit -m "initial commit"
    git branch -M main
    git remote add origin https://github.com/<your-handle>/<repo-name>.git
    git push -u origin main
    ```
  </Step>

  <Step title="Confirm the manifest">
    The `author` field in `manifest.yaml` and in any `provider/*.yaml` must match your GitHub handle. Mismatches cause `plugin_unique_identifier is not valid` when users try to install. See the [General Specifications](/en/develop-plugin/features-and-specs/plugin-types/general-specifications) for manifest details.
  </Step>
</Steps>

## Step 2: Build the Plugin Package

From the directory **above** your plugin project, run:

```bash theme={null}
dify plugin package ./your_plugin_project
```

This produces `your_plugin_project.difypkg` in the current directory.

## Step 3: Publish a GitHub Release

GitHub releases are how Dify discovers installable versions of your plugin.

<Steps>
  <Step title="Tag a release">
    On your repository page, click **Releases** > **Draft a new release**. Create a new tag using semantic versioning (for example, `v0.0.1`). The tag should match the `version` field in your `manifest.yaml`.
  </Step>

  <Step title="Attach the .difypkg file">
    In the release form, drag the `.difypkg` file into the **Assets** area. Dify reads this asset when users install from your repo.
  </Step>

  <Step title="Publish">
    Add release notes describing what changed, then click **Publish release**.
  </Step>
</Steps>

<Tip>
  Repeat Steps 2 and 3 for each new version. Bump the `version` in `manifest.yaml` first, repackage, then create a new tag and release.
</Tip>

## Step 4: Install from Your Repository

Share your repository URL with users. They install it in Dify as follows:

<Steps>
  <Step title="Open the Plugins page">
    In Dify, go to **Plugins** in the top-right corner.
  </Step>

  <Step title="Install from GitHub">
    Click **Install Plugin** > **From GitHub**.
  </Step>

  <Step title="Enter repository details">
    Paste the repository URL (for example, `https://github.com/<your-handle>/<repo-name>`), then select the version from the dropdown. Dify pulls the matching `.difypkg` asset from that release.
  </Step>

  <Step title="Confirm installation">
    Review the permissions the plugin requests, then click **Install**.
  </Step>
</Steps>

<Check>
  The plugin appears on the user's Plugins page within seconds of clicking **Install**. Dify pulls the `.difypkg` from your GitHub release on demand.
</Check>

## Troubleshooting

* **`plugin_unique_identifier is not valid`**: The `author` field in `manifest.yaml` (and `provider/*.yaml`) doesn't match the GitHub handle that owns the repo. Update it, repackage, and re-release.
* **No versions appear in the install dialog**: The release has no `.difypkg` asset attached, or the repo has no releases yet. Open the release on GitHub and confirm the asset is listed under **Assets**.
* **Signature verification error**: Self-hosted Dify instances may have signature verification enabled. See [Third-Party Signature Verification](/en/develop-plugin/publishing/standards/third-party-signature-verification) to sign your release, or see the [FAQ](/en/develop-plugin/publishing/faq/faq) for the bypass option.

## Related Resources

* [Publishing Overview](/en/develop-plugin/publishing/marketplace-listing/release-overview): Compare publishing methods.
* [Package as Local File and Share](/en/develop-plugin/publishing/marketplace-listing/release-by-file): Build a `.difypkg` package.
* [Publish to Dify Marketplace](/en/develop-plugin/publishing/marketplace-listing/release-to-dify-marketplace): Submit through the official marketplace.
* [Third-Party Signature Verification](/en/develop-plugin/publishing/standards/third-party-signature-verification): Sign packages for verified installs.
* [General Specifications](/en/develop-plugin/features-and-specs/plugin-types/general-specifications): Manifest field reference.
