Git & CI/CD ReferenceUpdated: 2026-11-06
Conventional Commits Specification & SemVer Release Rules Reference
Standard prefix keywords (feat, fix, docs, chore), breaking change exclamation marks, and automated release bumps.
The Conventional Commits specification is a lightweight convention on top of commit messages that provides an easy set of rules for creating an explicit commit history. It enables automated tooling (like Semantic Release or Changesets) to determine semver version bumps and generate changelogs automatically.
Table of Contents
Standard Commit Types & SemVer Mapping
The core prefixes recognized by semantic release automation tools.
| Type Prefix | SemVer Release Impact | Description & Example |
|---|---|---|
| `feat:` | `MINOR` (0.X.0) | Introduces a new user-facing feature (e.g. feat: add client-side WebP converter) |
| `fix:` | `PATCH` (0.0.X) | Patches a bug in production code (e.g. fix: prevent canvas memory leak on iOS) |
| `docs:` | None | Documentation only changes (e.g. docs: update API cURL examples) |
| `style:` | None | Formatting, white-space, semi-colons (no code logic changes) |
| `refactor:` | None | Code restructuring that neither fixes a bug nor adds a feature |
| `perf:` | `PATCH` (0.0.X) | Code change that improves execution performance |
| `test:` | None | Adding missing unit/integration tests or correcting existing tests |
| `chore:` | None | Maintenance tasks, dependency updates, or internal build configs |
Breaking Changes & Anatomy
How to communicate breaking API changes that require a MAJOR SemVer bump.
| Syntax Pattern | SemVer Impact | Full Example |
|---|---|---|
| `feat!: <desc>` (Exclamation mark) | `MAJOR` (X.0.0) | feat!: drop Node.js 16 runtime support |
| `BREAKING CHANGE:` footer | `MAJOR` (X.0.0) | fix: change return type of parseUser\n\nBREAKING CHANGE: parseUser now returns Promise |
Interactive Client-Side Tools for this Guide
Test and run these patterns directly inside your browser with zero server uploads:
Frequently Asked Questions
Why adopt conventional commits in team projects?
Conventional commits enable automated CHANGELOG.md generation, eliminate debate over pull request naming, and automate semantic package releases without manual tagging.
Can I include a scope in the commit message?
Yes! Scopes are placed in parentheses after the type, such as `feat(auth): add OAuth2 provider` or `fix(pdf): handle corrupted xref tables`.