Conventional Commits
Analyses your commit history and automatically decides whether a major, minor or patch bump is needed. Configurable bump rules via .semrel.yaml.
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
Release Automation at Enterprise Scale
Go-native, zero-dependency and built for regulated CI/CD environments.
Analyses your commit history and automatically decides whether a major, minor or patch bump is needed. Configurable bump rules via .semrel.yaml.
Every step is an interchangeable subprocess plugin. Swap GitHub for GitLab, change the changelog renderer or add Slack notifications — without touching the core.
Multiple independent modules in a single repository — each with its own tag series, config and changelog. Dependency graph and topological release ordering.
Plugins communicate via subprocess protocol and can be written in Go, Python, Rust, Node.js or any other language.
Signed releases with Sigstore Cosign, CycloneDX/SPDX SBOM, SLSA Level 1 Provenance. DCO sign-off and REUSE/SPDX compliance on every PR.
Preview what semrel would do without touching anything. Ideal for CI validation: semrel release --dry-run before the actual release.
Keep-a-Changelog Markdown, GitHub/GitLab Release Notes, ArtifactHub Annotations, OCI Labels, NuGet, PyPI, RSS/Atom — all from a single structured ReleaseNotes model.
Condition, Analyzer, Generator, Updater, Packager (.deb/.rpm via nfpm), Publisher (OCI/HTTP), Provider & Hook — fully modular across the entire lifecycle.
Reproducible plugin versions with SHA256 checksums in .semrel.lock, automatic semrel plugin restore and pre-flight validation via semrel doctor.
Environment variable interpolation in .semrel.yaml, scope-based bump rules, tagless release metadata resolution and idempotent Docker tag retries.
Native action.yml Composite Action, official JSON Schema (registry.semrel.io) for VS Code / JetBrains autocomplete and self-update via semrel update.
Append-only NDJSON release history, contributor metadata passed to plugins, Jira/GitHub issue extraction and semrel commitlint (--commit-msg-file, range, stdin).
30+ Plugins for every stack
Install via semrel plugin install <name> — each plugin lives in its own repository and releases independently.
github-actions Only on GitHub Actions CIgitlab-ci Only on GitLab CIgitea-actions Only on Gitea Actionsgeneric Generic CI environmentconventional Conventional Commits Parserdefault Standard Commit Analyzerchangelog-md Markdown (Keep a Changelog)changelog-html HTML Changelogrelease-notes Release Notes Generatorgithub GitHub Releases & Tagsgitlab GitLab Releases & Tagsgitea Gitea Releases & Tagsbitbucket Bitbucket Releases & Tagsgit Local git tag onlynpm package.json versiondocker Build & push Docker imageshelm Helm chart versioncargo Rust / Cargo cratepython PyPI packagegradle Gradle versionmaven Maven artifactnuget NuGet packagegobinary Go version variablehomebrew Homebrew formulaterraform Terraform module versionnfpm .deb / .rpm packagingoci OCI registry publishinggeneric-http HTTP upload targetsslack Slack Notificationsteams Microsoft Teamsmatrix Matrix / Elementemail Email notificationsjira Close Jira issuesgitplugin Git operations post-releaseYour first release in 5 minutes
Recommended: validate with --dry-run first, then run in production.
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.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}"# 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 releaseThe road to v1.0.0
semrel evolves continuously. Focus: stability, ecosystem growth and enterprise readiness.
v0.1 – v0.10 Zero-Dependency Core & Plugin Runtime shippedStatic Go binary with zero Node.js dependencies, subprocess plugin runtime and semrel doctor recommendations.
v0.11 – v0.13 Lockfile (.semrel.lock), Air-Gap & Monorepo Workspace shippedReproducible plugin installs with SHA256 checksums, air-gap restore and monorepo orchestration via semrel workspace.
v0.14 – v0.18 8-Phase Pluggable Pipeline shippedNew Generator, Packager and Publisher pipeline phases plus semrel plugin update & restore commands.
v0.19 – v0.24 Scope-Versioning, Registry Analytics & Contributor Metadata shippedScope-based release rules, registry download tracking, enhanced GitHub Actions defaults and contributor metadata for plugins.
v0.25 – v0.26.3 Cosign v3 Bundle, Env-Interpolation & Tagless CI shippedSigstore Cosign v3 (--bundle) signing, env-var interpolation in .semrel.yaml, --commit-msg-file for commitlint, tagless release resolution and idempotent Docker retries.
v0.27+ Ecosystem & Enterprise Adopter Expansion in progressExpansion of the 30+ plugin ecosystem, deeper enterprise CI/CD integrations and onboarding additional production adopters.
v1.0.0 v1.0 Stabilization & Long-Term Guarantees plannedLong-term API, plugin protocol and JSON Schema v1 stability guarantees for critical enterprise infrastructure.
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 new providers, updaters or hooks for your preferred tools. Plugins use a simple subprocess protocol and can be implemented in any language.
Plugin Dev GuideTry semrel in your projects and report bugs. Good first issues are labeled and new contributors get help with their first PR.
View issuesDocs, tutorials, example configs or translations — good documentation matters just as much as code.
Docs RepositoryImprove workspace flows, dependency-graph releases and real enterprise monorepo scenarios.
RoadmapWrite end-to-end tests, cover edge cases, add CI workflows for new platforms — every contribution brings semrel closer to production readiness.
Contributing GuideUse semrel in your project and share your feedback. Show what you built — showcases and use cases are very welcome.
GitHub Discussionssemrel is an open community project under Apache 2.0. All contributions are welcome with DCO sign-off and Conventional Commits.