Commit standard

Conventional Commits

The most widely adopted git commit message standard. Conventional Commits gives your history a machine-readable structure that enables automated changelogs, semantic versioning, and better code review tooling.

Try the AI generator

Paste your diff, get a perfect Conventional Commit in seconds.

Open generator →

The format

type(scope): description

[blank line]

Optional body explaining WHY

[blank line]

Optional footer: BREAKING CHANGE: ...

The type is required and describes the category of change. The scope is optional but recommended — it names the part of the codebase affected. The description is a concise summary in imperative mood, under 72 characters.

Commit types

featA new feature visible to users
fixA bug fix visible to users
docsDocumentation changes only
styleFormatting, whitespace — no logic change
refactorCode restructure with no feature/fix
perfPerformance improvement
testAdding or fixing tests
choreBuild tooling, deps, CI config

Real examples

feat(auth): add OAuth2 login with Google
fix(api): handle null response in user.profile endpoint
docs(readme): update setup instructions for M1 Macs
perf(db): add index on users.email column
refactor(payments): extract Stripe client into service layer
feat!: replace REST API with GraphQL

BREAKING CHANGE: all /api/v1 endpoints removed

Breaking changes

When your change breaks backward compatibility, you must signal it in two places: append ! after the type/scope, and add a BREAKING CHANGE: footer explaining what changed and what users need to do.

feat(auth)!: require email verification before first login

BREAKING CHANGE: users who registered before 2024-01-01 will be
prompted to verify their email on next login. Silent login no
longer supported for unverified accounts.

Why adopt it?

  • Automated changelog generation — tools like release-please and semantic-release parse your commit types to build changelogs
  • Semantic versioning — feat bumps MINOR, fix bumps PATCH, BREAKING CHANGE bumps MAJOR. Automate your releases.
  • Better code review — reviewers immediately understand the intent of a commit from its type
  • Searchable history — `git log --grep='^feat'` instantly shows all features added

Related guides