What changed in commitlint from 20 to 21
7 releases numbered after v20.5.3 up to and including v21.2.2, stable releases only. v20.5.3 and v21.2.2 are the newest stable releases of 20 and 21 we track; this page follows them as new ones ship.
- 1 removes or deprecates something
22 changes across 7 releases
- Show input from a new line (adds --legacy-output flag as transitional escape hatch)
- Replace dependencies with Node 22 built-ins (removes glob, fast-glob, import-meta-resolve, minimist, fs-extra)
- Replace read-pkg with native fs.readFile and JSON.parse
- Update dependency yargs to v18
- Require colon after note keywords in parse
- Resolve packages from TypeScript configs in container
- Support Yarn Plug'n'Play in resolve-extends
- Remove duplicate es-toolkit@1.47.1 keys from lockfile
- Emit actionable error when --edit cannot find COMMIT_EDITMSG
- Apply oxfmt formatting to get-edit-commit.ts
- Fail when --from and --to share no merge-base
- Disallow same commit hash for --from and --to
- Only resolve relative formatter paths
- Add presetConfig to ParserPreset interface
- Widen cz-commitlint inquirer peer dependency to support v9–v12
- Raise minimum Node version to v22
- Remove cross-env and move environment variables to vitest config
- --legacy-output flag will be removed in a future major release
Original release notes, newest first
The list above is our reading of these notes; the originals from conventional-changelog are here, one fold per release.
v21.2.2
21.2.2 (2026-08-13)
Bug Fixes
- parse: require colon after note keywords (conventional-commits-parser 7.1.2) (#4927) (b83c515), closes conventional-changelog/conventional-changelog#1517
- fix(container): resolve packages from TypeScript configs by @Guflly in https://github.com/conventional-changelog/commitlint/pull/4914
- fix(resolve-extends): support Yarn Plug'n'Play by @Guflly in https://github.com/conventional-changelog/commitlint/pull/4933
Chore, docs, etc.
- docs: fix typos in comments and JSDoc by @maxtaran2010 in https://github.com/conventional-changelog/commitlint/pull/4880
- docs: fix Deno setup without package.json by @awnoa in https://github.com/conventional-changelog/commitlint/pull/4896
- chore: repair broken lockfile from #4939 and add merge queue CI support by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4941
- docs(config-conventional): document rules that go beyond the spec by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4910
New Contributors
- @maxtaran2010 made their first contribution in https://github.com/conventional-changelog/commitlint/pull/4880
- @awnoa made their first contribution in https://github.com/conventional-changelog/commitlint/pull/4896
- @Guflly made their first contribution in https://github.com/conventional-changelog/commitlint/pull/4914
Full Changelog: https://github.com/conventional-changelog/commitlint/compare/v21.2.1...v21.2.2
v21.2.1
21.2.0 (2026-06-30)
Features
Chore, doc, etc.
- chore(read): replace deprecated git-raw-commits with git-client by @igordanchenko in https://github.com/conventional-changelog/commitlint/pull/4860
- docs(issue-template): ask for package manager and version by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4867
New Contributors
- @igordanchenko made their first contribution in https://github.com/conventional-changelog/commitlint/pull/4860
Full Changelog: https://github.com/conventional-changelog/commitlint/compare/v21.2.0...v21.2.1
v21.2.0
21.2.0 (2026-06-30)
Features
- feat(resolve-extends): resolve pure-ESM presets (conventional-changelog v7/v9/v10) by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4859
Chore
- ci: install git in stock-Ubuntu baseline job by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4847
Full Changelog: https://github.com/conventional-changelog/commitlint/compare/v21.1.0...v21.2.0
v21.1.0
21.1.0 (2026-06-23)
Bug Fixes
- fix: remove duplicate es-toolkit@1.47.1 keys from lockfile by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4833
Features
- feat(cli): add --default-config flag to lint without a config file by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4805
- feat(lint): allow for custom commit parser function by @esatterwhite in https://github.com/conventional-changelog/commitlint/pull/4829
Docs, chore, etc.
- test(cli): verify --cwd redirects config resolution #997 by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4796
- docs: add ai agent support (skill, guide, llms.txt) by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4804
- docs: add TDD commit flow and review expectations for contributors by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4836
New Contributors
- @esatterwhite made their first contribution in https://github.com/conventional-changelog/commitlint/pull/4829
Full Changelog: https://github.com/conventional-changelog/commitlint/compare/v21.0.2...v21.1.0
v21.0.2
21.0.2 (2026-05-29)
Bug Fixes
- fix: emit actionable error when --edit cannot find COMMIT_EDITMSG (#589) by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4755
- fix: apply oxfmt formatting to get-edit-commit.ts by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4768
- fix(read): fail when --from and --to share no merge-base #4555 by @CervEdin in https://github.com/conventional-changelog/commitlint/pull/4754
- fix: disallow same commit hash for --from and --to by @knocte in https://github.com/conventional-changelog/commitlint/pull/4773
Chore/CI
- ci: have renovate rebase stale PRs before merging by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4782
- chore: have renovate hold PRs for 3 days after release by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4788
- chore: anchor vite 8 by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4790
- ci: run commitlint once per same-repo PR by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4795
New Contributors
- @CervEdin made their first contribution in https://github.com/conventional-changelog/commitlint/pull/4754
Full Changelog: https://github.com/conventional-changelog/commitlint/compare/v21.0.1...v21.0.2
v21.0.1
21.0.1 (2026-05-12)
Bug Fixes
- fix(load): only resolve relative formatter paths by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4761
- fix(types): add presetConfig to ParserPreset interface by @SAY-5 in https://github.com/conventional-changelog/commitlint/pull/4749
CI
- ci: stop spawning schedule jobs on contributors' forks by @knocte in https://github.com/conventional-changelog/commitlint/pull/4753
- ci: add weekly non-blocking pnpm audit by @escapedcat in https://github.com/conventional-changelog/commitlint/pull/4766
New Contributors
- @SAY-5 made their first contribution in https://github.com/conventional-changelog/commitlint/pull/4749
Full Changelog: https://github.com/conventional-changelog/commitlint/compare/v21.0.0...v21.0.1
v21.0.0
Heads-up: --legacy-output is a transitional escape hatch. It will be removed in a future major release. Plan to migrate your parsers / snapshots to the new format during the v21 lifecycle.
21.0.0 (2026-05-08)
Breaking
- chore!: minimum node version v22 by @escapedcat in #4679
- feat!: show input from a new line by @knocte in #4727 (adds --legacy-output flag)
Fixes
- fix: widen cz-commitlint inquirer peer dep to support v9–v12 by @escapedcat in #4682 — closes #4554
Internals (Node 22 cleanup)
- chore: replace dependencies with Node 22 built-ins by @escapedcat in #4681 — drops glob, fast-glob, import-meta-resolve, minimist, fs-extra
- refactor: replace read-pkg with native fs.readFile + JSON.parse by @escapedcat in #4742
- chore: update dependency yargs to v18 by @escapedcat in #4686
- chore: remove cross-env, move env vars to vitest config by @escapedcat in #4684
Dependency updates
- chore: update dependency @types/node to v22.19.17 by @renovate[bot] in #4739
- chore: update dependency @swc/core to v1.15.33 by @renovate[bot] in #4743
Full Changelog: https://github.com/conventional-changelog/commitlint/compare/v20.5.3...v21.0.0