type(scope): emoji summary
- type — what kind of change (see table below)
- scope — optional; the module/concept being changed, not the file path; use a slash to orient in the big picture (e.g.
auth/oauth,api/users,payment/webhook); omit when the change is truly global or scope would be redundant - emoji — paired with type (see table); pick the one that best fits the specific change
- summary — imperative mood: "Add X", not "Added X"; no period at the end
Aim for readable at a glance. No hard character limit — just don't ramble.
Include when the why or how isn't obvious from the title. Skip it for self-evident changes.
Focus on what changed technically and why. Don't frame it as UX wins, DX improvements, or code quality gains — unless that is the change (e.g. a perf commit).
| Type | Emojis | Use for |
|---|---|---|
| feat | ✨ | New functionality |
| fix | ️🛠️ | Bug fixes |
| refactor | ♻️ | Restructuring, no behavior change |
| perf | ⚡ ️ | Performance improvements |
| test | ✅ | Adding or updating tests |
| docs | 📝 | Documentation only |
| security | 🔐 ️ | Security-related changes |
| chore | ⚙️ | Maintenance, tooling, config, deps |
feat(auth/oauth): ✨ Add PKCE flow for mobile clients
Implements RFC 7636 code challenge/verifier. Previous implicit flow left in place
behind a feature flag pending client migration.
fix(api/users): Handle missing profile fields gracefully
chore(deps): Add zod for runtime schema validation
refactor(payment/webhook): ♻️ Extract Stripe handler into service layer
{Use this hint to improve the commit message: $hint}
{diff}
Works good with
gpt-4o, ok withgpt-4o-miniandllama3.1. Not so good withphi3:mini