Describe what you changed in plain English and get a properly formatted Conventional Commits message instantly — complete with the right type(scope): description header, an optional body, and BREAKING CHANGE footer. No signup, no cost, no limit. Great for keeping your git history clean and compatible with changelog and semantic-versioning tools.
Writing clear, consistent commit messages is one of those small habits that pays off enormously over the life of a project. This Commit Message Generator takes a plain English description of what you changed and turns it into a properly formatted Conventional Commits message — the type, an optional scope, an imperative-mood subject line, and an optional body or breaking-change footer.
Just describe your change — for example "fixed the bug where login button was unresponsive on mobile" — and the tool will detect the right commit type, rewrite the description in imperative mood, and assemble a header that follows the standard type(scope): description format.
Conventional Commits is a specification for adding human- and machine-readable meaning to commit messages. Every commit header follows the same shape: type(scope): description. Because the format is predictable, tooling like semantic-release, standard-version, and changelog generators can parse your git history automatically to determine the next version number (major, minor, or patch) and to build a changelog without any manual bookkeeping.
Teams that adopt Conventional Commits also get a more readable git log — skimming the history quickly tells you which commits were bug fixes, which added features, and which were just internal cleanup, without opening every diff.
| Type | Description |
|---|---|
feat | A new feature for the user |
fix | A bug fix |
docs | Documentation only changes |
style | Changes that do not affect meaning (whitespace, formatting, semicolons) |
refactor | A code change that neither fixes a bug nor adds a feature |
perf | A code change that improves performance |
test | Adding missing tests or correcting existing tests |
chore | Build process, tooling, or dependency changes |
git log --oneline and most git UIsfix(auth): ... or feat(api): ...! and a BREAKING CHANGE: footerWhen you don't pick a type from the dropdown, the generator scans your description for keywords associated with each Conventional Commits type. Words like "fix", "bug", or "crash" map to fix; words like "add", "new", or "implement" map to feat; words like "refactor" or "cleanup" map to refactor, and so on. If nothing matches, it falls back to chore. This is a simple keyword heuristic, not natural-language understanding — you can always override the detected type using the dropdown if it picks the wrong one.