Skip to content

Plugin Overview

semrel plugin ecosystem showing providers, conditions, analyzers, generators, updaters, packagers, publishers, and hooks connected to the core release pipeline

semrel’s release pipeline is composed of standalone plugin executables. Each plugin is discovered locally and executed as a subprocess — there is no gRPC layer or RPC handshake.

  1. semrel reads each plugin entry from .semrel.yaml.
  2. The uses: value resolves to a binary named semrel-plugin-<name> after semrel strips any namespace, version, or category prefix.
  3. semrel looks for that binary at an explicit path:, then in .semrel/plugins/, then in ~/.semrel/plugins/, then in $PATH.
  4. Plugin args: values are exposed as environment variables in the form SEMREL_PLUGIN_<KEY>=<value>.
  5. Release context is also passed through environment variables so every plugin can read the same version, branch, tag, changelog, and dry-run state.
  6. semrel runs the executable and uses the process result to continue or stop the pipeline.

These environment variables are available to plugin processes during execution.

VariableDescription
SEMREL_VERSIONResolved release version for the current run
SEMREL_TAG_NAMEFull tag name for the release
SEMREL_CURRENT_VERSIONCurrent project version
SEMREL_NEXT_VERSIONNext version selected for the release
SEMREL_BUMPCalculated bump level
SEMREL_BRANCHCurrent git branch
SEMREL_TAG_PREFIXConfigured tag prefix
SEMREL_CHANGELOGGenerated changelog content
SEMREL_DRY_RUNWhether the current run is a dry run

The current official plugin catalog is organized into eight categories.

Provider Plugin

Handles forge and git operations such as reading release history, creating tags, and publishing releases.

Condition Plugin

Verifies that the current environment is allowed to publish a release.

Analyzer Plugin

Inspects commits and decides the SemVer bump level.

Generator Plugin

Produces changelogs, release notes, and other release-facing content.

Updater Plugin

Updates versioned project files before the release is finalized.

Packager Plugin

Builds distributable artifacts such as Linux packages from prepared release inputs.

Publisher Plugin

Publishes release artifacts to OCI registries and generic HTTP endpoints.

Hook Plugin

Sends notifications or runs follow-up automation after success or failure.

What about Go binaries, Docker/Podman images, Helm, and similar targets?

Section titled “What about Go binaries, Docker/Podman images, Helm, and similar targets?”

These targets are supported today with a split model: updaters prepare versioned project metadata, while packaging and publishing can run through dedicated plugins and CI jobs.

TargetCurrent pluginsWhat they do todayTypical next step
Go binariesupdater-goUpdates Go version variables before release tagging.Build binaries in CI with go build and then package/publish artifacts.
Docker/Podman imagesupdater-dockerUpdates Dockerfile version arguments.Build images in CI with Docker or Podman, then publish image artifacts.
Helm chartsupdater-helmUpdates Chart.yaml version and optional appVersion.Package and publish charts in CI or OCI-compatible registries.
Linux packagespackager-nfpmBuilds deb, rpm, and apk packages via nfpm.Publish generated packages to your package channels.
Generic/OCI artifactspublisher-generic-http, publisher-ociUploads release artifacts to HTTP endpoints or OCI registries.Chain publishers after build/package stages.

Discover official plugins in the Plugin Registry, install them with semrel plugin install <ref>, and use the Managing Plugins guide for lock files and restore workflows.

semrel resolves plugins from the configured uses: value:

plugins:
- uses: github
name: github-release
args:
owner: MyOrg
repo: my-repo
- uses: slack-notify
path: /usr/local/bin/semrel-plugin-slack
args:
webhook_url: ${{ env.SLACK_WEBHOOK }}
Official Plugins Managing Plugins Plugin Registry Migration Guide Write a Plugin