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