Write Conventional Commit messages from a git diff, code snippet, or plain description. Also generates PR titles and 3-bullet PR summaries. Works with any language and any project — no setup, no config.
Request a specific one or it defaults to Conventional Commits.
Paste one of:
git diff --staged)Optionally specify:
text
## Commit Message
[type]([scope]): [subject]
[body — explains WHY, not just WHAT. Omitted if obvious from subject]
[BREAKING CHANGE: description — only if applicable]
[Closes #123 — only if issue number is known]
---
## PR Title
[short, imperative, under 70 chars]
## PR Summary
- [What changed]
- [Why it changed / what problem it solves]
- [Any notable side effects, caveats, or follow-up needed]
TypeWhen to usefeatNew feature (triggers minor version bump)fixBug fix (triggers patch version bump)docsDocumentation onlystyleFormatting, whitespace — no logic changerefactorRestructure without changing behaviorperfPerformance improvementtestAdding or fixing testschoreBuild system, CI, dependency updatesrevertReverts a prior commitciCI pipeline changes
BREAKING CHANGE: footer with migration notesauth, api, db, ui)text
fix(auth): reject expired JWT tokens before checking claims
Previously, token expiry was checked after claim validation,
which allowed attackers to replay expired tokens with valid claims.
text
feat(api)!: require API key on all public endpoints
BREAKING CHANGE: All requests now require `X-API-Key` header.
Clients using anonymous access will receive 401. See migration guide.
text
chore(deps): bump openssl from 1.1.1 to 3.0.8
Addresses CVE-2023-0286 (X.400 address type confusion).
No API changes.
After each commit message written, note whether the input was a diff, description, or code snippet. After 20 uses, surface the most common missing context that leads to weaker messages.