# commitlint: what changed from 20 to 21 - Product: commitlint (https://whatsnew.fyi/product/commitlint) - Vendor: conventional-changelog - Range: changelog entries numbered after v20.5.3 up to and including v21.2.2, stable releases only - Entries below: 7 releases (newest first) - Resolved: 20 is v20.5.3 and 21 is v21.2.2, the newest stable release of each major we track - Carrying security changes: 0 · CVEs mentioned: 0 · Mentioning breaking changes: 0 · Removing or deprecating something: 1 - Page: https://whatsnew.fyi/product/commitlint/compare/20...21 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## What changed (22 changes, grouped by kind) ### Added #### v21.2.1 (2026-07-08) - resolve-extends now resolves pure-ESM presets (conventional-changelog v7/v9/v10) #### v21.2.0 (2026-06-30) - Resolve pure-ESM presets (conventional-changelog v7/v9/v10) in resolve-extends #### v21.1.0 (2026-06-23) - Add --default-config flag to lint without a config file - Allow for custom commit parser function ### Changed #### v21.0.0 (2026-05-08) - 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 ### Fixed #### v21.2.2 (2026-08-13) - Require colon after note keywords in parse - Resolve packages from TypeScript configs in container - Support Yarn Plug'n'Play in resolve-extends #### v21.1.0 (2026-06-23) - Remove duplicate es-toolkit@1.47.1 keys from lockfile #### v21.0.2 (2026-05-29) - 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 #### v21.0.1 (2026-05-12) - Only resolve relative formatter paths - Add presetConfig to ParserPreset interface #### v21.0.0 (2026-05-08) - Widen cz-commitlint inquirer peer dependency to support v9–v12 ### Removed #### v21.0.0 (2026-05-08) - Raise minimum Node version to v22 - Remove cross-env and move environment variables to vitest config ### Deprecated #### v21.0.0 (2026-05-08) - --legacy-output flag will be removed in a future major release ## Release notes ### v21.2.2 - Date: 2026-08-13 - Version: v21.2.2 - Original notes: https://github.com/conventional-changelog/commitlint/releases/tag/v21.2.2 - Permalink: https://whatsnew.fyi/product/commitlint/releases/v21.2.2 - **fixed** — Require colon after note keywords in parse - **fixed** — Resolve packages from TypeScript configs in container - **fixed** — Support Yarn Plug'n'Play in resolve-extends ##### [21.2.2](https://github.com/conventional-changelog/commitlint/compare/v21.2.1...v21.2.2) (2026-08-13) ###### Bug Fixes * **parse:** require colon after note keywords (conventional-commits-parser 7.1.2) ([#4927](https://github.com/conventional-changelog/commitlint/issues/4927)) ([b83c515](https://github.com/conventional-changelog/commitlint/commit/b83c51569d195183c695330eeb0b4f5784e0d418)), closes [conventional-changelog/conventional-changelog#1517](https://github.com/conventional-changelog/conventional-changelog/issues/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 - Date: 2026-07-08 - Version: v21.2.1 - Original notes: https://github.com/conventional-changelog/commitlint/releases/tag/v21.2.1 - Permalink: https://whatsnew.fyi/product/commitlint/releases/v21.2.1 - **added** — resolve-extends now resolves pure-ESM presets (conventional-changelog v7/v9/v10) #### [21.2.0](https://github.com/conventional-changelog/commitlint/compare/v21.1.0...v21.2.0) (2026-06-30) ###### Features * **resolve-extends:** resolve pure-ESM presets (conventional-changelog v7/v9/v10) ([#4859](https://github.com/conventional-changelog/commitlint/issues/4859)) ([fdb566f](https://github.com/conventional-changelog/commitlint/commit/fdb566fe59457a786eac80e2a8cbb994638daba0)) ###### 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 - Date: 2026-06-30 - Version: v21.2.0 - Original notes: https://github.com/conventional-changelog/commitlint/releases/tag/v21.2.0 - Permalink: https://whatsnew.fyi/product/commitlint/releases/v21.2.0 - **added** — Resolve pure-ESM presets (conventional-changelog v7/v9/v10) in resolve-extends #### [21.2.0](https://github.com/conventional-changelog/commitlint/compare/v21.1.0...v21.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 - Date: 2026-06-23 - Version: v21.1.0 - Original notes: https://github.com/conventional-changelog/commitlint/releases/tag/v21.1.0 - Permalink: https://whatsnew.fyi/product/commitlint/releases/v21.1.0 - **fixed** — Remove duplicate es-toolkit@1.47.1 keys from lockfile - **added** — Add --default-config flag to lint without a config file - **added** — Allow for custom commit parser function #### [21.1.0](https://github.com/conventional-changelog/commitlint/compare/v21.0.2...v21.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 - Date: 2026-05-29 - Version: v21.0.2 - Original notes: https://github.com/conventional-changelog/commitlint/releases/tag/v21.0.2 - Permalink: https://whatsnew.fyi/product/commitlint/releases/v21.0.2 - **fixed** — Emit actionable error when --edit cannot find COMMIT_EDITMSG - **fixed** — Apply oxfmt formatting to get-edit-commit.ts - **fixed** — Fail when --from and --to share no merge-base - **fixed** — Disallow same commit hash for --from and --to ##### [21.0.2](https://github.com/conventional-changelog/commitlint/compare/v21.0.1...v21.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 - Date: 2026-05-12 - Version: v21.0.1 - Original notes: https://github.com/conventional-changelog/commitlint/releases/tag/v21.0.1 - Permalink: https://whatsnew.fyi/product/commitlint/releases/v21.0.1 - **fixed** — Only resolve relative formatter paths - **fixed** — Add presetConfig to ParserPreset interface ##### [21.0.1](https://github.com/conventional-changelog/commitlint/compare/v21.0.0...v21.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 - Date: 2026-05-08 - Version: v21.0.0 - Original notes: https://github.com/conventional-changelog/commitlint/releases/tag/v21.0.0 - Permalink: https://whatsnew.fyi/product/commitlint/releases/v21.0.0 - **removed** — Raise minimum Node version to v22 - **changed** — Show input from a new line (adds --legacy-output flag as transitional escape hatch) - **deprecated** — --legacy-output flag will be removed in a future major release - **fixed** — Widen cz-commitlint inquirer peer dependency to support v9–v12 - **changed** — Replace dependencies with Node 22 built-ins (removes glob, fast-glob, import-meta-resolve, minimist, fs-extra) - **changed** — Replace read-pkg with native fs.readFile and JSON.parse - **changed** — Update dependency yargs to v18 - **removed** — Remove cross-env and move environment variables to vitest config > 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](https://github.com/conventional-changelog/commitlint/compare/v20.5.3...v21.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