Skip to content

Commit Message Convention

We use Conventional Commits. Commit messages are parsed by our release note generator to produce changelogs automatically, so consistent formatting matters.

Format

<type>: <subject>

<body>

<footer>

An optional scope can be added in parentheses: fix(bindings): resolve nullable handling.

Types

TypeDescriptionRelease notes category
breakBreaking change to the public APIBreaking Changes
featNew featureFeatures
fixBug fixFixes
refactorCode change that neither fixes a bug nor adds a featureRefactoring
perfPerformance improvementPerformance
choreBuild process, tooling, or maintenanceGeneral Changes
testAdding or updating testsTests
docDocumentation only changesDocumentation
styleFormatting, whitespace — no code behaviour changeStyle Changes
depDependency updatesDependencies
ciCI/CD pipeline changesGeneral Changes

Note

Dependency bot commits (Renovate, Dependabot) are automatically categorised as dependency updates regardless of prefix.

Subject

  • Use imperative, present tense: "change" not "changed" nor "changes"
  • Don't capitalise the first letter
  • No full stop at the end

Body

Optional. Use it to explain why the change was made and how it differs from previous behaviour. Same tense rules as the subject.

Use the footer for:

  • Breaking changes — start with BREAKING CHANGE: followed by a description
  • Issue references — e.g. Closes #123

Examples

feat: add WhenAnyValue overload for six properties

Closes #4200
break: seal ValidationState as record

BREAKING CHANGE: ValidationState is now a sealed record. Subclassing is no longer supported.
chore(deps): update dependency DynamicData to 9.4.31