Go-native v0.26.3 · Latest Apache 2.0 Open for Contributors

semrel

Semantic Releases. Fully Automated. Fully Open.

semrel is the zero-dependency alternative to semantic-release: one static Go binary that reads Conventional Commits, calculates SemVer and ships releases automatically, reproducibly and supply-chain secured.

Core promises & What's new in v0.26.3

  • No Node.js, no node_modules, no runtime overhead — one single static Go binary.
  • Reproducible & Air-gap ready: .semrel.lock with SHA256 verification and semrel plugin restore with zero outbound network calls.
  • Supply-chain secure by default: Sigstore Cosign v3 (--bundle), CycloneDX/SPDX SBOMs and SLSA Level 1 provenance.
  • 8-stage pipeline (condition, analyzer, generator, updater, packager, publisher, provider, hook) with env-var interpolation & monorepo workspace.
Cosign v3 · SBOM · SLSA
30+ Plugins (.semrel.lock)
Monorepo Workspace
Air-Gap Ready
OpenSSF Scorecard
Enterprise Adopters

Why semrel?

Release Automation at Enterprise Scale

Go-native, zero-dependency and built for regulated CI/CD environments.

Why semrel over semantic-release or packaging-only tooling?

  • No Node.js runtime: one static Go binary instead of a large npm dependency tree.
  • Automatic SemVer + changelog from Conventional Commits instead of manual release decisions.
  • Air-gap ready: plugin caching enables releases without outbound network access.
  • Supply-chain security by default with Cosign, CycloneDX/SPDX SBOM and SLSA provenance.
Core

Conventional Commits

Analyses your commit history and automatically decides whether a major, minor or patch bump is needed. Configurable bump rules via .semrel.yaml.

Plugin System

Pluggable Pipeline

Every step is an interchangeable subprocess plugin. Swap GitHub for GitLab, change the changelog renderer or add Slack notifications — without touching the core.

Workspace

Monorepo Ready

Multiple independent modules in a single repository — each with its own tag series, config and changelog. Dependency graph and topological release ordering.

Ecosystem

Language Agnostic

Plugins communicate via subprocess protocol and can be written in Go, Python, Rust, Node.js or any other language.

Security

Supply Chain Security

Signed releases with Sigstore Cosign, CycloneDX/SPDX SBOM, SLSA Level 1 Provenance. DCO sign-off and REUSE/SPDX compliance on every PR.

Safety

Dry-Run Mode

Preview what semrel would do without touching anything. Ideal for CI validation: semrel release --dry-run before the actual release.

Changelog

Multi-Format Changelog

Keep-a-Changelog Markdown, GitHub/GitLab Release Notes, ArtifactHub Annotations, OCI Labels, NuGet, PyPI, RSS/Atom — all from a single structured ReleaseNotes model.

Pipeline

8-Phase Pipeline (v0.18+)

Condition, Analyzer, Generator, Updater, Packager (.deb/.rpm via nfpm), Publisher (OCI/HTTP), Provider & Hook — fully modular across the entire lifecycle.

Reliability

Lockfile & Doctor (v0.21+)

Reproducible plugin versions with SHA256 checksums in .semrel.lock, automatic semrel plugin restore and pre-flight validation via semrel doctor.

v0.26.3

Env-Config & Scopes (v0.26.3)

Environment variable interpolation in .semrel.yaml, scope-based bump rules, tagless release metadata resolution and idempotent Docker tag retries.

CI/CD & DX

GitHub Actions & Schema

Native action.yml Composite Action, official JSON Schema (registry.semrel.io) for VS Code / JetBrains autocomplete and self-update via semrel update.

Insights

Release Analytics & Commitlint

Append-only NDJSON release history, contributor metadata passed to plugins, Jira/GitHub issue extraction and semrel commitlint (--commit-msg-file, range, stdin).

Plugin Ecosystem

30+ Plugins for every stack

Install via semrel plugin install <name> — each plugin lives in its own repository and releases independently.

Conditions

  • github-actions Only on GitHub Actions CI
  • gitlab-ci Only on GitLab CI
  • gitea-actions Only on Gitea Actions
  • generic Generic CI environment

Analyzers

  • conventional Conventional Commits Parser
  • default Standard Commit Analyzer

Generators

  • changelog-md Markdown (Keep a Changelog)
  • changelog-html HTML Changelog
  • release-notes Release Notes Generator

Providers

  • github GitHub Releases & Tags
  • gitlab GitLab Releases & Tags
  • gitea Gitea Releases & Tags
  • bitbucket Bitbucket Releases & Tags
  • git Local git tag only

Updaters

  • npm package.json version
  • docker Build & push Docker images
  • helm Helm chart version
  • cargo Rust / Cargo crate
  • python PyPI package
  • gradle Gradle version
  • maven Maven artifact
  • nuget NuGet package
  • gobinary Go version variable
  • homebrew Homebrew formula
  • terraform Terraform module version

Packagers

  • nfpm .deb / .rpm packaging

Publishers

  • oci OCI registry publishing
  • generic-http HTTP upload targets

Hooks

  • slack Slack Notifications
  • teams Microsoft Teams
  • matrix Matrix / Element
  • email Email notifications
  • jira Close Jira issues
  • gitplugin Git operations post-release

Quick Start

Your first release in 5 minutes

Recommended: validate with --dry-run first, then run in production.

1 Install
terminal
go install github.com/SemRels/semrel/cmd/semrel@latest
semrel --version

# Initialize configuration (with JSON Schema)
semrel config init

# Install & pin plugins in .semrel.lock
semrel plugin install @semrel/conventional
semrel plugin install @semrel/github
semrel plugin install @semrel/npm
semrel plugin restore
2 Configure (.semrel.yaml)
.semrel.yaml
# yaml-language-server: $schema=https://registry.semrel.io/schemas/core/v1.json
branches:
  - name: main
  - name: next
    prerelease: true

commit_changelog: false

plugins:
  - uses: "@semrel/conventional" # Analyzer
  - uses: "@semrel/changelog-md" # Generator
  - uses: "@semrel/npm"          # Updater
  - uses: "@semrel/nfpm"         # Packager (optional)
  - uses: "@semrel/oci"          # Publisher (optional)
  - uses: "@semrel/github"       # Provider
  - uses: "@semrel/slack"        # Hook
    args:
      channel: "${RELEASE_CHANNEL:-#releases}"
3 Release
terminal
# Pre-flight check (config, plugins, git state & tokens)
semrel doctor

# Validate commit messages (range, file or stdin)
semrel commitlint --commit-msg-file .git/COMMIT_EDITMSG
semrel lint

# First dry-run — no tag, no release, full preview
semrel release --dry-run

# Full release run (or monorepo: semrel workspace)
semrel release

Roadmap

The road to v1.0.0

semrel evolves continuously. Focus: stability, ecosystem growth and enterprise readiness.

  1. v0.1 – v0.10 Zero-Dependency Core & Plugin Runtime shipped

    Static Go binary with zero Node.js dependencies, subprocess plugin runtime and semrel doctor recommendations.

  2. v0.11 – v0.13 Lockfile (.semrel.lock), Air-Gap & Monorepo Workspace shipped

    Reproducible plugin installs with SHA256 checksums, air-gap restore and monorepo orchestration via semrel workspace.

  3. v0.14 – v0.18 8-Phase Pluggable Pipeline shipped

    New Generator, Packager and Publisher pipeline phases plus semrel plugin update & restore commands.

  4. v0.19 – v0.24 Scope-Versioning, Registry Analytics & Contributor Metadata shipped

    Scope-based release rules, registry download tracking, enhanced GitHub Actions defaults and contributor metadata for plugins.

  5. v0.25 – v0.26.3 Cosign v3 Bundle, Env-Interpolation & Tagless CI shipped

    Sigstore Cosign v3 (--bundle) signing, env-var interpolation in .semrel.yaml, --commit-msg-file for commitlint, tagless release resolution and idempotent Docker retries.

  6. v0.27+ Ecosystem & Enterprise Adopter Expansion in progress

    Expansion of the 30+ plugin ecosystem, deeper enterprise CI/CD integrations and onboarding additional production adopters.

  7. v1.0.0 v1.0 Stabilization & Long-Term Guarantees planned

    Long-term API, plugin protocol and JSON Schema v1 stability guarantees for critical enterprise infrastructure.

Contribute

Looking for Contributors!

semrel is a community project by Markus Waldheim and Thomas Boerger — open to everyone who wants to contribute, whether you're a Go expert or a beginner.

Build plugins

Build new providers, updaters or hooks for your preferred tools. Plugins use a simple subprocess protocol and can be implemented in any language.

Plugin Dev Guide

Find & fix bugs

Try semrel in your projects and report bugs. Good first issues are labeled and new contributors get help with their first PR.

View issues

Improve documentation

Docs, tutorials, example configs or translations — good documentation matters just as much as code.

Docs Repository

Monorepo & workspace

Improve workspace flows, dependency-graph releases and real enterprise monorepo scenarios.

Roadmap

Testing & CI

Write end-to-end tests, cover edge cases, add CI workflows for new platforms — every contribution brings semrel closer to production readiness.

Contributing Guide

Community & feedback

Use semrel in your project and share your feedback. Show what you built — showcases and use cases are very welcome.

GitHub Discussions

Owner & Maintainer

Markus Waldheim

Owner, Creator & Maintainer

@mwaldheim

Thomas Boerger

Owner, Creator & Maintainer

@tboerger

semrel is an open community project under Apache 2.0. All contributions are welcome with DCO sign-off and Conventional Commits.