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.
Core promises
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.
New pipeline phase between changelog generation and release: generator plugins can set release notes via stdout and pass them to downstream phases.
Native action.yml Composite Action, structured JSON release output and reusable workflow templates for CI/CD pipelines.
Append-only NDJSON release history tracking, Jira/GitHub issue reference extraction and commitlint for CLI, git range or 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
# Install plugins as needed
semrel plugin install conventional
semrel plugin install github
semrel plugin install npm
semrel plugin install docker.semrel.yaml)branches:
- name: main
- name: next
prerelease: true
commit_changelog: false
plugins:
- uses: conventional # Analyzer
- uses: changelog-md # Generator
- uses: npm # Updater
- uses: nfpm # Packager (optional)
- uses: oci # Publisher (optional)
- uses: github # Provider
- uses: slack # Hook
args:
channel: "#releases"# First dry-run — no output, no tag, no release
semrel release --dry-run
# Validate commit messages
semrel lint
# Full release run
semrel releaseThe road to v1.0.0
semrel evolves continuously. Focus: stability, ecosystem growth and enterprise readiness.
Now Zero-Dependency Core shippedStatic Go binary with zero Node.js or runtime dependencies.
Now Pluggable Pipeline shippedSwappable steps from condition to hook, including packagers and publishers.
Now Monorepo & Workspace shippedMultiple modules with their own config and tag series, orchestrated via semrel workspace.
Now Supply-Chain Security shippedCosign signatures, CycloneDX/SPDX SBOM and SLSA provenance for official releases.
Now Air-Gap Ready shippedPlugin caching enables releases without outbound network connections in restricted environments.
Next Ecosystem Expansion in progressMore provider/publisher/packager integrations and deeper CI/CD templates.
Next v1.0 Stabilization plannedFurther stabilization, documented upgrade paths and long-term API/schema guarantees.
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.