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 analyses your Conventional Commits, calculates the next SemVer tag and runs the full release lifecycle — fully plugin-based, monorepo-ready and language-agnostic.
New in v0.15.0
Release Automation at Enterprise Scale
Designed for Go and cloud-native environments — inspired by semantic-release, but built from the ground up.
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 versionslack Slack Notificationsteams Microsoft Teamsmatrix Matrix / Elementemail Email notificationsjira Close Jira issuesgitplugin Git operations post-releaseYour first release in 3 steps
Alpha phase — recommended to test with --dry-run before going live.
go install github.com/GoSemantics/semrel/cmd/semrel@latest
semrel --version
# Install plugins as needed
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 # Commit analysis
- uses: changelog-md # Built-in changelog entry
- uses: generator-release-notes
phase: generator # New in v0.14.0
- uses: github # Create GitHub release
- uses: npm # Bump package.json
- uses: slack # Notify team
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 is in active development (current: v0.15.0). Every milestone can be followed on GitHub.
v0.1.0 Foundation shippedCLI, SemVer engine, Conventional Commits, Git tag management, dry-run
v0.2.0 Plugin System shippedStable core/plugin boundary, subprocess-based plugin execution model
v0.3.0 CI Integration shippedGitHub Actions native, JSON output, end-to-end tests
v0.4.0 Ecosystem Plugins shippedGitHub, GitLab, Gitea, Bitbucket, npm, Docker, Helm, Cargo, Python, Gradle, Maven and more.
v0.5.0 Monorepo & Advanced shippedChangelog engine goals (v0.2.5), deeper workspace/monorepo flows, dependency-graph ordering, pre-release channels and advanced release workflows
v0.10.0–v0.15.0 Release Hardening & Workspace shippedWorkspace orchestration, schema expansion, hardened dry-run/locking paths, plugin restore from .semrel.lock, generator phase, improved changelog behaviour, pre-release channels (alpha/beta/rc), workspace lockstep and --next-version override.
v1.0.0 Stable Release in progressProduction-ready, complete documentation, plugin SDK for third-party plugins
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 RepositoryThe next major milestone: workspace discovery, independent versioning, dependency graph. Ideal for Go developers with large repositories.
Roadmap v0.5.0Write 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.