Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[6.1.0] - 2026-06-05
Changed
- backfill: gather commits in a single git log pass instead of one subprocess per tag (~15x faster on tag-heavy repos)
Added
- backfill --max-commits guard refuses runaway histories and caps per-release entries to keep the changelog usable
- All mutations run validation and warn on invalid initial and final states
[6.0.0] - 2026-06-04
Added
- Support for pep440 and calver
- Implemented backfill
- Interactive (inquirer) prompts for remove, edit, github-release, github-pr, and gitlab-release when required arguments are omitted in a TTY
- backfill --include-unreleased seeds [Unreleased] from commits since the latest release tag
- from-commits --all routes commits to components by the files they touch, using per-component match globs
- Configuration in [tool.changelogmanager] (pyproject.toml) or a standalone changelogmanager.toml; [defaults]/[github]/[gitlab] tables back CLI flag defaults (flag > env > config > built-in default)
Changed
- Configuration is now TOML-only; YAML config files are no longer read or written
- config command now displays the effective configuration as TOML
- Backfill
--strategy replaceis now an explicit unsupported error: changelog entries have no stable identity, so replacing them is unsafe - Backfill
--strategy mergeadditively fills entries into existing versions while preserving existing text (idempotent on re-runs) - Lazy imports cut CLI startup time by ~45%
Removed
- to-yaml export command (use to-json or to-html)
- pyyaml runtime dependency
- Unused commits.style configuration key and the never-implemented component-is-substring option
Fixed
- config init --config
no longer crashes when the target config file does not exist yet - Schema validation no longer rejects metadata url fields added by the keepachangelog vendor parser
- Schema validation no longer requires release_date in metadata (vendor parser omits it for unreleased-only-URL entries)
- Validation no longer warns about empty [Unreleased] sections — having no pending changes after a release is valid
[5.2.0] - 2026-05-30
Added
github-prcommand to open or update a GitHub pull request for a changelog branch, using only stdliburllib(no- third-party action dependency).
- Optional
mdformatformatting pass invalidate --fix: discoversmdformatvia in-process import or shutil.which, runs after structural fixes, and is controlled by--format/--no-formatflags and theproject.validation.formatconfig key (auto/true/false). Requires the new[format]optional extra- (
pip install 'keepachangelog-manager-fork[format]'). Changelog.render(formatter, format_options)method returns the serialized Markdown string with an optional format- pass, keeping
write_to_filecomposable without coupling discovery logic to theChangelogclass. project.validation.mdformat_optionsconfig key passes throughwrapandnumberoptions to mdformat.
Changed
github-releasenow skips cleanly (warning, exit 0) when there are no[Unreleased]entries, instead of a confusing- silent success.
release.ymlworkflow no longer usespeter-evans/create-pull-request; the changelog PR is now created via the- vendored
github-prcommand with inline git push, satisfying zizmor'stemplate-injectionandartipackedrules. release.ymlnow updates an existing generated release bump branch with--force-with-lease, so rerunning a release- after a partial bump failure can continue.
Fixed
- GitHub API failures now report HTTP status and response body details, making workflow permission errors diagnosable.
[5.1.0] - 2026-05-30
Added
gitlab-releasecommand to create or update a GitLab release from[Unreleased].github-prcommand to open or update a GitHub pull request for a changelog branch, using only stdliburllib(no- third-party action dependency).
Changed
- Better validation messages.
github-releasenow skips cleanly (warning, exit 0) when there are no[Unreleased]entries, instead of a confusing- silent success.
release.ymlworkflow no longer usespeter-evans/create-pull-request; the changelog PR is now created via the- vendored
github-prcommand with inline git push, satisfying zizmor'stemplate-injectionandartipackedrules.
[5.0.0] - 2026-05-01
Removed
- Old name. It is now keepachangelog-manager-fork
Changed
- Project forked. Tomtom International doesn't appear to support it anymore.
- Phased out setup.py in favor of uv, pyproject.toml
- Generated changelog preambles and optional preamble validation now respect the configured versioning scheme, including
- PEP 440 and Calendar Versioning
- pyproject.toml config loading and auto-detection now work on Python 3.9+ via the tomli fallback
- Bundled skill assets now ship in the package for export from installed builds
Fixed
- Validator now detects indented sub-list items (e.g.
- nested) as errors; previously lines with leading whitespace - were silently skipped by
__validate_entry - Validator no longer cascades two errors for a single invalid version heading; after reporting an incompatible SemVer
- version the generator now returns early, preventing a spurious "Missing metadata" error on the same line
Added
- New 'edit' command to modify or recategorise existing [Unreleased] entries
- New 'remove' command (with '--list') to drop entries from [Unreleased] by index
- New 'from-commits' command that seeds [Unreleased] from git history, parsing Conventional Commits
- New 'to-yaml' and 'to-html' export commands (PyYAML + stdlib html.escape, no new dependencies)
- 'release --yes' (alias '-y') confirmation guard; non-interactive runs without --yes are refused
- 'validate --fix' applies autofixes: reorders versions descending, lowercases change types, drops empty sections,
- dedupes entries
- 'validate --all' iterates over every component declared in the config file
- 'validate --changed-only' (with --all) skips components whose changelog is not modified per git status
- Global '--quiet' flag suppresses human-friendly output for scripting use
- Global '--json' flag emits a single machine-readable JSON object on stdout
- 'github-release' now falls back to the GITHUB_TOKEN environment variable when --github-token is omitted
- Auto-detect '.changelogmanager.yml/.yaml' in the current directory; on Python 3.11+ also
- honour [tool.changelogmanager] in pyproject.toml
- Validator now warns on empty version sections, empty change-type sections, and duplicate entries within a section
- Optional canonical-preamble check, enabled via 'project.validation.enforce_preamble: true' in the config file
--dry-runoption to support migration away from Click- New 'config' and 'config init' commands for viewing and interactively creating or updating YAML or pyproject.toml
- configuration
- New 'skill export' command to export the bundled keepachangelog-manager-cli skill to Copilot, Claude, or a custom
- directory
[4.0.0] - 2025-06-10
Removed
- Removed support for Python >=3.7,\<=3.8 in favor of minimum version 3.9
Changed
- Use
inquirerinstead of decomissionedinquirer2
[3.3.1] - 2022-09-14
Fixed
- Report an error when using the
releasecommand without the[Unreleased]section being present
Changed
- The
to-jsonoutput is now prettified
[3.3.0] - 2022-09-12
Added
- New option
--input-filefor managing CHANGELOG files in a different location
[3.2.2] - 2022-08-18
Changed
- The
CHANGELOG.jsonfile will now consist of an array of releases instead of having each release as dict-key
[3.2.1] - 2022-08-18
Fixed
- The
releasecommand is working correct again
[3.2.0] - 2022-08-18
Added
- The command
to-jsonallows you to export the changelog contents in JSON format (useful for external automation - purposes)
[3.1.0] - 2022-07-20
Added
- References to the Homepage and Issue Tracker in the package metadata
[3.0.0] - 2022-05-18
Removed
- Removed the
--applyand--no-applyflags from theadd,releaseandgithub-releasecommand.
Changed
- Improved user interaction for the
addcommand
Added
- The
github-releasecommand now supports the--draft/--releaseflags to indicate the GitHub release status
[2.0.0] - 2022-05-18
Fixed
- Releasing a Changelog containing no previously released version will now result in version
0.0.1to be released
Removed
- Removed the
keepachangelog-draft-release,keepachangelog-releaseandkeepachangelog-validateactions as these - have only been intended for internal use.
[1.0.3] - 2022-05-17
Fixed
- The option
--override-versionaccepts versions prefixed with v`
[1.0.2] - 2022-05-17
Changed
- GitHub Releases and associated tags are now both prefixed with
v(i.e.v1.0.0iso1.0.0)
[1.0.1] - 2022-05-04
Changed
- Updated README.md to be compatible with PyPi
[1.0.0] - 2022-05-04
Added
- Add support Python for older versions (
>=3.7) - Command Line Interface allowing users to add and release changes
- Users can now create an empty
CHANGELOG.mdusing thecreatecommand - Support for GitHub style error messages
- Added
validatecommand to verify CHANGELOG.md consistency - Support for creating (Draft) releases on GitHub using the
github-releasecommand - Workflow to update the draft release notes when new changes are pushed to `main`