Conventional Commit Generator

Generate standardized Git commit messages.

Commit Details

Example

                            

Copy the message above and paste it into your terminal: git commit -m "..."

What are Conventional Commits?

Conventional Commits is a lightweight specification for writing standardized commit messages. Every commit begins with a type, an optional scope in parentheses, and a short description, in the form type(scope): description. The predictable structure makes commit history easier to read and, more importantly, easier for automated tools to parse.

The generator supports eleven types: feat for a new feature, fix for a bug fix, chore for build or tooling changes, docs for documentation, refactor for code changes that neither fix a bug nor add a feature, test for tests, style for formatting-only changes, perf for performance improvements, ci for continuous-integration changes, build for build-system or dependency changes, and revert for reverting a previous commit.

After the header line you can add an optional body, an optional BREAKING CHANGE note, and an optional footer. The tool places a blank line before each of these blocks, so the final message reads: header, blank line, body, blank line, BREAKING CHANGE, blank line, footer. Only the header — the type and description — is required.

The page pre-fills a complete example, feat(auth): add login with Google OAuth with a body and the footer Closes #123, #456, and regenerates the message live as you type. Copy it with one click and paste it into your terminal. All processing is client-side.

Key Concepts

  • Type — a keyword such as feat, fix, or docs that classifies the change.
  • Scope — an optional noun describing the affected area, e.g. auth or api.
  • Description — a short, imperative summary after the colon.
  • Body — optional details, separated from the header by a blank line.
  • BREAKING CHANGE — optional notice of an incompatible change.
  • Footer — optional metadata such as issue references.

How to Use

  1. Choose a type — Select one of the eleven commit types from the Type dropdown.
  2. Add an optional scope — Enter the part of the codebase affected, such as auth, api, or navbar.
  3. Write the description — Add a short, imperative summary. The type and description are required for output.
  4. Add optional body, breaking change, and footer — Expand the message with details, a BREAKING CHANGE note, or issue references.
  5. Copy the message — Click Copy and paste the result into git commit. The Example button loads a ready-made message.

Commit Type Reference

Type Purpose
featA new feature
fixA bug fix
choreBuild process or auxiliary tool changes
docsDocumentation only changes
refactorA code change that neither fixes a bug nor adds a feature
testAdding or correcting tests
styleFormatting changes that do not affect meaning
perfA change that improves performance
ciChanges to CI configuration or scripts
buildChanges to the build system or dependencies
revertReverts a previous commit

Worked Examples

  • Feature with scope, body, and footer — feat(auth): add login with Google OAuth, followed by a description body and the footer Closes #123, #456.
  • Bug fix without extras — fix(api): handle null response, with no body, breaking change, or footer.
  • Documentation change with no scope — docs: update README installation steps.
  • Breaking refactor — refactor(core): extract parser, then a BREAKING CHANGE: removed parseLegacy() line.
  • Dependency update — build(deps): bump eslint to v9.
  • Reverting a commit — revert: feat(auth): add login with Google OAuth.

Tips and Common Mistakes

  • Type and description are required — without both, the output shows a placeholder comment instead of a message.
  • Use the imperative present tense — write add, not added or adds.
  • Keep the description short and lowercase — save the detail for the body and skip a trailing period.
  • Flag incompatible changes — use the Breaking Change field so major version bumps and changelogs are detected.
  • Reference issues in the footer — for example Closes #123, #456 to link commits to tickets.
  • Add a scope only when it helps — omit it for changes that span the whole project.

Common Use Cases

Conventional Commits are widely adopted because a consistent message format pays off across the whole development workflow. Here are some of the most common reasons to use them.

  1. Team commit standards — give every commit a consistent, reviewable shape.
  2. Automated versioning — tools like semantic-release map types to major, minor, and patch bumps.
  3. Changelog generation — produce release notes directly from the commit history.
  4. Searchable history — filter commits by type or scope when investigating changes.
  5. Contributor onboarding — make it obvious how to describe a change correctly.
  6. Issue traceability — link commits to tickets through footer references.

Frequently Asked Questions

What is the difference between feat and fix?

feat introduces a new user-facing feature, while fix repairs a bug. Types like chore, docs, and style describe changes that do not alter user-facing behavior.

Does this tool require internet access?

No. The message is generated entirely in your browser and works offline after the page loads.

Can I use this with semantic-release?

Yes. Conventional Commits are the standard input for semantic-release; the commit types determine version bumps and changelog entries.

How do I signal a breaking change?

Enter the note in the Breaking Change field. The tool outputs a BREAKING CHANGE: line separated from the previous block by a blank line.

Is a scope required?

No. The scope is optional; omit it for changes that span the whole project or do not map to a single area.

Which commit types are supported?

Eleven types: feat, fix, chore, docs, refactor, test, style, perf, ci, build, and revert.

Are my commit messages sent to a server?

No. Everything runs client-side and nothing is transmitted, stored, or logged.

How does the output separate sections?

A blank line is inserted before the body, before the BREAKING CHANGE line, and before the footer, exactly as the specification expects.