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

# Release a version

> Publish a plugin version by pushing a git tag, and pull a bad release with yank.

A registered plugin has no versions until you publish one, and versions come
from git tags. When you push a semver tag, the hub builds the plugin from that
commit and publishes the version. This guide covers cutting a version and, if you
need to, pulling one back.

<Steps>
  <Step title="Tag the version and push it">
    Tag the commit you want to release with a semver tag, prefixed with `v`, that
    matches the `version` in `formae-plugin.pkl`. Then push the tag.

    ```bash theme={"languages":{"custom":["/languages/pkl.json"]}}
    git tag v0.1.0
    git push origin v0.1.0
    ```

    The tag is what the hub turns into a published version, so it must be a
    semantic version such as `v0.1.0` or `v1.2.3`.
  </Step>

  <Step title="The hub builds and publishes the version">
    When the tag arrives, the hub builds the plugin from that commit, runs its
    checks, and publishes the version. A build takes a few minutes. You do not
    trigger anything else; pushing the tag is the whole action.
  </Step>

  <Step title="The version is live">
    The published version appears on your organization page with its channel and
    publish time.

    <Frame>
      <img src="https://mintcdn.com/platform-engineering-labs/6Ak_fxw-fogQHPii/images/plugin-development/hub/release-a-version/01-org-published.png?fit=max&auto=format&n=6Ak_fxw-fogQHPii&q=85&s=f68b0f158aafc6f01f3bbf0bb4bfc921" alt="The organization page showing the plugin with a published stable version" width="2880" height="2000" data-path="images/plugin-development/hub/release-a-version/01-org-published.png" />
    </Frame>

    On the plugin page, the version is now installable with `formae plugin
            install`, and the page renders the plugin's README, supported resources, and
    license.

    <Frame>
      <img src="https://mintcdn.com/platform-engineering-labs/6Ak_fxw-fogQHPii/images/plugin-development/hub/release-a-version/02-plugin-published.png?fit=max&auto=format&n=6Ak_fxw-fogQHPii&q=85&s=af8fd2defab7acaa44dd70d2f2d222b5" alt="The published plugin page with the install command and version details" width="2880" height="3102" data-path="images/plugin-development/hub/release-a-version/02-plugin-published.png" />
    </Frame>
  </Step>

  <Step title="Yank a version to pull it back">
    If a published version turns out to be broken, yank it. Yanking soft-deletes
    the version so it can no longer be installed, and it emails the other
    organization admins an optional reason. Yanking is reversible: unyank restores
    the version. Confirm the action by typing `yank`.

    <Frame>
      <img src="https://mintcdn.com/platform-engineering-labs/6Ak_fxw-fogQHPii/images/plugin-development/hub/release-a-version/03-yank-confirm.png?fit=max&auto=format&n=6Ak_fxw-fogQHPii&q=85&s=3685713bf2fedb934da18164c2a454bb" alt="The yank confirmation dialog on a published version" width="2880" height="3102" data-path="images/plugin-development/hub/release-a-version/03-yank-confirm.png" />
    </Frame>
  </Step>
</Steps>

<Note>
  A published version's tag is fixed to the commit it was built from. To ship a
  fix, publish a new version with a new tag rather than moving the old one. Moving
  a published tag fails; see
  [Troubleshoot a build](/plugin-development/guides/troubleshoot-a-build).
</Note>

## See also

* [Publish a plugin](/plugin-development/guides/publish-a-plugin): register the plugin before you release a version.
* [Troubleshoot a build](/plugin-development/guides/troubleshoot-a-build): read build failures and recover from them.
