| name | conventional-commits |
| description | Format commit messages following Conventional Commits 1.0.0 specification.
Ensures consistent, semantic commit messages that support automated
changelog generation and semantic versioning. Includes jujutsu and git
examples with jujutsu-first approach for best practices.
|
| license | MIT |
Conventional Commits
Format all commit messages according to the Conventional Commits 1.0.0
specification at https://www.conventionalcommits.org/
Ensures consistent, semantic commit messages that support automated
changelog generation and semantic versioning.
Commit Message Format
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Type Reference
| Type | When to Use | SemVer |
|---|
| โจ feat | New feature | MINOR |
| ๐ fix | Bug fix | PATCH |
| ๐ docs | Documentation only | - |
| ๐จ style | Formatting, whitespace (no code) | - |
| โป๏ธ refactor | Code restructuring (no feature/fix) | - |
| โก๏ธ perf | Performance improvement | - |
| โ
test | Adding/fixing tests | - |
| ๐๏ธ build | Build system, dependencies | - |
| ๐ท ci | CI/CD configuration | - |
| ๐งโ๐ป chore | Maintenance, tooling | - |
| โฎ๏ธ revert | Reverting previous commit | - |
Decision Framework
When determining commit type, ask:
- New functionality? โ
feat
- Bug fix? โ
fix
- Documentation only? โ
docs
- Performance improvement? โ
perf
- Code restructuring without behavior change? โ
refactor
- Code style/formatting only? โ
style
- Tests added/modified? โ
test
- Build system or dependencies changed? โ
build
- CI/CD configuration changed? โ
ci
- Maintenance or tooling? โ
chore
Message Best Practices
Description (first line)
- Keep under 50 characters
- Use imperative mood ("add" not "added")
- Don't capitalize first letter
- No period at end
Scope
Use clear, consistent names: feat(auth):, fix(api):,
docs(readme):
Body
- Include when change requires explanation
- Explain why the change was made
- Describe what problem it solves
- Wrap at 72 characters per line
Footers
Fixes #123 - Reference issues
Co-authored-by: Name <email> - Credit contributors
BREAKING CHANGE: description - Breaking changes
Refs: #456, #789 - Related issues
Breaking Changes
Indicate breaking changes using either method:
feat!: remove deprecated API endpoint
feat(api)!: change authentication flow
fix: update validation logic
BREAKING CHANGE: validation now rejects empty strings
Command Execution
Using Jujutsu (Recommended)
jj describe -m 'feat(auth): add OAuth2 support'
For multi-line messages:
jj describe << 'EOF'
feat(auth): add OAuth2 support
Implement OAuth2 authentication flow with support for
Google and GitHub providers.
BREAKING CHANGE: removes legacy session-based auth
EOF
Using Git (Alternative)
Use single quotes to avoid shell escaping with !:
git commit -m 'feat!: add new authentication flow'
git commit -m "feat\!: add new authentication flow"
For multi-line messages, use HEREDOC:
git commit -m "$(cat <<'EOF'
feat(auth): add OAuth2 support
Implement OAuth2 authentication flow with support for
Google and GitHub providers.
BREAKING CHANGE: removes legacy session-based auth
EOF
)"
Workflow
Using Jujutsu (Recommended)
- Make your code changes
- Run
jj status to see what changed
- Determine type using decision framework
- Use
jj describe to set commit message
- Run
jj show @ --no-patch to verify
jj diff
jj describe -m 'feat(api): add rate limiting to endpoints'
jj show @ --no-patch
Using Git (Alternative)
- Stage changes:
git add first if nothing staged
- Review changes:
git diff --cached
- Check recent style:
git log --oneline -5
- Determine type using decision framework
- Execute commit with single quotes
- Verify:
git log -1
git diff --cached --stat
git add .
git diff --cached
git log --oneline -5
git commit -m 'feat(api): add rate limiting to endpoints'
git log -1
Quality Checks
Before committing, verify:
Examples
Simple fix:
fix: prevent null pointer in user lookup
Feature with scope:
feat(api): add rate limiting to endpoints
With body:
refactor: extract validation into separate module
Move validation logic from controllers to dedicated
validator classes for better testability and reuse.
Breaking change:
feat!: upgrade to v2 API format
BREAKING CHANGE: response structure changed from
{data: [...]} to {items: [...], meta: {...}}
With issue reference:
fix(auth): resolve token refresh race condition
Fixes #234
Full Specification
For complete specification details, see references/full-spec.md.
For practical patterns and common workflows, see
references/common-patterns.md.