Conventional Commit Builder

Compose a properly formatted Conventional Commits message.

Open tool

Overview

Build a commit message that satisfies the Conventional Commits 1.0 spec by filling in the parts: type, optional scope, short description, optional body, breaking-change note, and footers like Closes #123 or Co-authored-by. The output is copy-paste ready and validated against the official grammar.

It's for teams using automated changelog generators, semantic-release pipelines, or commit linters - anywhere your CI cares about the shape of feat(api): add pagination vs Add pagination. Reach for it when training new contributors, breaking a long history of inconsistent messages, or just making sure your release-please / standard-version run picks the right bump.

How it works

Conventional Commits 1.0 defines a strict header grammar: <type>[(scope)][!]: <description>, where type is feat, fix, docs, style, refactor, perf, test, build, ci, chore, or revert. A ! after the scope (or a BREAKING CHANGE: footer) signals a major-version bump in semantic-release.

The body and footers follow a blank line, with footers parsed as Token: value pairs (per RFC 822-style). The builder emits the canonical 50/72 column convention - 50 for the subject, 72 for body wrap - that's friendly to git log --oneline displays.

Examples

  • Minimal feat:
    feat: add password reset endpoint
    
  • Scoped fix with footer:
    fix(auth): reject empty bearer tokens
    
    Closes #482
    
  • Breaking change (forces a major bump):
    feat(api)!: rename /users to /accounts
    
    BREAKING CHANGE: clients must update their base path.
    
  • Multi-line body with co-author:
    refactor(billing): extract invoice formatter
    
    Pulls Stripe-specific formatting out of BillingService so we
    can swap providers without touching the domain layer.
    
    Co-authored-by: Sam Reed <sam@example.com>
    

FAQ

What types should I use?

The 1.0 spec only mandates feat and fix. Most teams adopt the Angular convention's full list (docs, style, refactor, perf, test, build, ci, chore) for clarity.

Does the scope need to be a folder name?

No - scope is any short identifier. Common conventions are the affected package, feature area, or module name. Keep it lowercase and short.

How do I trigger a major-version bump?

Either append ! after the type/scope (feat(api)!:) or include a BREAKING CHANGE: <description> footer. Semantic-release treats either as a major bump.

Can I write Fix(API): with capitals?

The spec is lowercase. Linters like commitlint will reject capitalised types unless you configure exceptions.

Try Conventional Commit Builder

An unhandled error has occurred. Reload ×