Why Conventional Commits?
Conventional Commits 1.0.0 adds a lightweight structure to Git commit messages. The structure communicates whether a change fixes a defect, adds a feature, affects a particular area, or breaks compatibility.
This matters to both people and tools. A consistent history is easier to scan, and automation can use it to generate changelogs, calculate releases, or trigger publishing workflows.
Relationship to Semantic Versioning
The specification gives three signals direct release meaning:
| Commit signal | Meaning | Typical SemVer effect |
|---|---|---|
fix: |
Corrects a bug | PATCH |
feat: |
Adds a feature | MINOR |
! or BREAKING CHANGE: |
Introduces incompatible behavior | MAJOR |
Other types such as docs, test, and refactor are allowed, but the specification assigns them no automatic semantic-version effect. A project's release tooling may define additional rules.
Structure separates concerns
Consider:
fix(api): avoid duplicate status requests
Reuse the in-flight request until it resolves.
Refs: #42
fixcommunicates the kind of change.apilocates the affected area.- the description makes the result scannable in a log.
- the body explains the reasoning.
- the footer connects the commit to other information.
The extension turns those decisions into a short sequence of focused prompts. It does not decide what your change means; it makes the chosen meaning consistent and correctly structured.
Specification versus team convention
Conventional Commits deliberately leaves room for teams to define types and style. It requires a type and description, defines optional scopes, bodies and footers, and defines how breaking changes are signalled. It does not require a 72-character header, lowercase summary, or omission of a final period.
Those additional rules are defaults in this extension because consistency is useful, and they remain configurable as project policy.