// conventional commits 1.0.0
Say what changed.
Automate everything after.
A lightweight commit convention that both humans and tools can parse — it drives your changelog and your version bump. This is the fast-lookup cheatsheet; the canonical spec is one tap away.
↓ full structure, with the optional body and footer, below
// syntax
Full structure
<type>[optional scope]: <description> [optional body] [optional footer(s)]
- Type, colon, space are required — e.g.
feat:,fix: - Casing — any casing works, stay consistent. Exception:
BREAKING CHANGEin a footer is always uppercase - Breaking changes — mark with
!before the colon, aBREAKING CHANGE:footer, or both
// types
Commit types
Core — these drive SemVer
fix
A bug fix.
feat
A new feature.
any type + !
A breaking change, regardless of type.
Additional — common convention, no SemVer effect on their own
buildChanges to the build system or external dependencies
choreOther changes that don't modify src or test files — tooling, deps, config
ciChanges to CI configuration files and scripts
docsDocumentation-only changes
perfA code change that improves performance
refactorA code change that's neither a fix nor a feature
revertReverts a previous commit
styleFormatting only — whitespace, semicolons. No code meaning change
testAdding or correcting tests
These aren't mandated by the spec — teams can define their own.
// breaking changes
Signal a MAJOR bump
feat(api)!: drop support for Node 18
fix: prevent unauthorized access to admin panel BREAKING CHANGE: the isAdmin flag is now strictly enforced on all v2 endpoints
// examples
Real commits
docs: fix typo in README installation steps
feat(auth): add OAuth2 provider support
fix(parser): resolve race condition on rapid sequential inputs Introduce a unique request ID to tracking payloads. Dismiss incoming responses if they do not match the latest request ID. Reviewed-by: @dev-lead Refs: #402
// tips
Good to know
- One type per commit — if a change fits two types, split it into separate commits
- Footer tokens use
-instead of spaces (Reviewed-by), exceptBREAKING CHANGE - A scope is a noun in parentheses describing the affected area, e.g.
feat(parser):