Changesets, not commit messages
One .changeset/{name}.md per PR names the affected packages and bump levels. Squash-merges can't strip footers because monorel doesn't read commit messages.
Explicit per-PR changesets. Native Go tag conventions. Single and multi-module support.

# monorel.toml
[provider]
name = "github"
owner = "acme"
repo = "widget"
[packages."github.com/acme/widget"]
tag_prefix = ""
path = "."
changelog = "CHANGELOG.md"
[packages."transports/zerolog"]
tag_prefix = "transports/zerolog"
path = "transports/zerolog"
changelog = "transports/zerolog/CHANGELOG.md"# Author a changeset describing this PR (or run `monorel add` with no
# flags for an interactive picker — useful when bumping multiple
# packages in one changeset).
monorel add --package "transports/zerolog:minor" --message "Adds Lazy() helper."
# Preview the next release locally
monorel plan
# PACKAGE FROM BUMP TO TAG
# transports/zerolog v1.6.1 minor v1.7.0 transports/zerolog/v1.7.0
#
# 1 package(s) to release; 1 changeset(s) consumed.
# Apply: write CHANGELOGs, delete consumed changesets, commit, tag
monorel release
git push --follow-tagsThat's the loop. The CI workflow (one file, one step on any of the three supported providers) drives the same flow as an always-open release PR; merging the PR runs the release path and publishes one Release per tag.
monorel runs in production on loglayer-go (multi-module Go monorepo) and on monorel itself. Pair it with GoReleaser for binary builds and Docker image distribution; monorel handles versions, tags, and CHANGELOGs.
monorel is made with ❤️ by Theo Gravity / Disaresta.