Configuration: Standard
The "recommended for most teams" configuration. Generated by cw init --profile standard.
This config is suitable for small to mid-size teams that want:
- Consistent, typed commits
- Clear scope organization
- Automatic changelog
- Protected branch enforcement
- Optional breaking change tracking
version = 1
[commit]
subject_max_length = 72
use_emojis = false
# Built-in types with descriptions and changelog sections
[commit.types.feat]
emoji = "✨"
description = "A new feature"
bump = "minor"
section = "Features"
[commit.types.fix]
emoji = "🐛"
description = "A bug fix"
bump = "patch"
section = "Bug Fixes"
[commit.types.docs]
emoji = "📚"
description = "Documentation changes"
bump = "patch"
section = "Documentation"
[commit.types.style]
emoji = "🎨"
description = "Code style changes (no logic change)"
bump = "patch"
section = "Styling"
[commit.types.refactor]
emoji = "♻️"
description = "Code refactoring (no feature or fix)"
bump = "patch"
section = "Refactoring"
[commit.types.perf]
emoji = "⚡"
description = "Performance improvements"
bump = "patch"
section = "Performance"
[commit.types.test]
emoji = "✅"
description = "Test additions or changes"
bump = "patch"
section = "Tests"
[commit.types.chore]
emoji = "🔧"
description = "Maintenance, dependencies, config"
bump = "patch"
section = "Chores"
# Scopes are optional but can be defined
[commit.scopes]
mode = "optional"
restrict_to_defined = false
# Breaking changes are tracked but not required
[commit.breaking]
require_header = false
require_footer = false
footer_key = "BREAKING CHANGE"
emoji = "💥"
emoji_mode = "prefix"
# Tickets are not required
[commit.ticket]
required = false
# Branch defaults
[branch]
remote = "origin"
protected = ["main", "master", "develop"]
# Check behavior: only on protected branches
[check.commits]
enforce_on = "protected_branches"
# Push restrictions
[push.allow]
protected = false
force = false
[push.check]
commits = true
branch_policy = true
# Versioning
[versioning]
tag_prefix = "v"
# Changelog generation
[changelog]
output = "CHANGELOG.md"
format = "markdown"
[changelog.header]
use = true
title = "Changelog"
[changelog.layout]
group_by = ["type"]
section_order = ["feat", "fix", "perf", "docs", "refactor", "test", "chore"]
show_scope = true
show_empty_sections = false
show_empty_scopes = false
misc_section = "Miscellaneous"
unreleased_label = "Unreleased"
date_format = "%Y-%m-%d"
Key behaviors with this config
| Behavior | Result |
|---|---|
cw commit |
Interactive wizard, no scope required, supports feat, fix, docs, etc. |
cw check --from v1.0.0 |
Validates commits are typed correctly, allows any scope |
cw bump |
Calculates next version: feat = minor bump, fix = patch bump |
cw tag |
Creates tag: v1.2.0 |
cw push |
Blocks push to main, master, develop |
cw check on protected branches (CI) |
Only runs in CI for PRs targeting protected branches |
To customize
Add scope definitions:
[commit.scopes.definitions.api]
title = "API"
description = "REST endpoints"
[commit.scopes.definitions.ui]
title = "UI"
description = "Frontend components"
Require scopes:
[commit.scopes]
mode = "required"
restrict_to_defined = true
Add ticket requirements:
[commit.ticket]
required = true
pattern = "PROJ-\\d+"
source = "branch_or_prompt"
See Public API Reference for all available options.
To generate this
cw init --profile standard
# or
cw init
This is the default profile.
Next steps
- For solo dev: Use Minimal instead
- For enterprise: Use a Registry + Recommended for your team size
- To add rules: See With Rules