Rules 
body-case 
- condition: - bodyis in case- value
- rule: - always
- value text- 'lower-case'
- possible values js- [ "lower-case", // default "upper-case", // UPPERCASE "camel-case", // camelCase "kebab-case", // kebab-case "pascal-case", // PascalCase "sentence-case", // Sentence case "snake-case", // snake_case "start-case", // Start Case ];
body-empty 
- condition: bodyis empty
- rule: never
body-full-stop 
- condition: - bodyends with- value
- rule: - never
- value text- '.'
body-leading-blank 
- condition: bodybegins with blank line
- rule: always
body-max-length 
- condition: - bodyhas- valueor less characters
- rule: - always
- value text- Infinity
body-max-line-length 
- condition: - bodylines have- valueor less characters, or contain a URL
- rule: - always
- value text- Infinity
body-min-length 
- condition: - bodyhas- valueor more characters
- rule: - always
- value text- 0
breaking-change-exclamation-mark 
- condition: Either both or neither headerhas an exclamation mark before the:marker and a line infootermatches the regular expression^BREAKING[ -]CHANGE:
- rule: always
NOTE
This rule enforces that breaking changes are marked by both a ! in the header and BREAKING CHANGE in the footer. The behavior is that of an XNOR operation:
- It passes when either both are present or both are not.
- It fails when one is present and the other is not.
footer-empty 
- condition: footeris empty
- rule: never
footer-leading-blank 
- condition: footerbegins with blank line
- rule: always
footer-max-length 
- condition: - footerhas- valueor less characters
- rule: - always
- value text- Infinity
footer-max-line-length 
- condition: - footerlines have- valueor less characters
- rule: - always
- value text- Infinity
footer-min-length 
- condition: - footerhas- valueor more characters
- rule: - always
- value text- 0
header-case 
- condition: - headeris in case- value
- rule: - always
- value text- 'lower-case'
- possible values js- [ "lower-case", // default "upper-case", // UPPERCASE "camel-case", // camelCase "kebab-case", // kebab-case "pascal-case", // PascalCase "sentence-case", // Sentence case "snake-case", // snake_case "start-case", // Start Case ];
header-full-stop 
- condition: - headerends with- value
- rule: - never
- value text- '.'
header-max-length 
- condition: - headerhas- valueor less characters
- rule: - always
- value text- 72
header-min-length 
- condition: - headerhas- valueor more characters
- rule: - always
- value text- 0
header-trim 
- condition: headermust not have initial or trailing whitespaces
- rule: always
references-empty 
- condition: referenceshas at least one entry
- rule: never
scope-case 
- condition: - scopeis in case- value
- rule: - always
- value text- 'lower-case'
- possible values js- [ "lower-case", // default "upper-case", // UPPERCASE "camel-case", // camelCase "kebab-case", // kebab-case "pascal-case", // PascalCase "sentence-case", // Sentence case "snake-case", // snake_case "start-case", // Start Case ];
scope-empty 
- condition: scopeis empty
- rule: never
scope-enum 
- condition: - scopeis found in value
- rule: - always
- value text- []
NOTE
- This rule always passes if no scopes are provided in the message or the value > is an empty array.
- When set to always, all message scopes must be found in the value.
- When set to never, none of the message scopes can be found in the value.
scope-max-length 
- condition: - scopehas- valueor less characters
- rule: - always
- value text- Infinity
scope-min-length 
- condition: - scopehas- valueor more characters
- rule: - always
- value text- 0
signed-off-by 
- condition: - messagehas- value
- rule: - always
- value text- 'Signed-off-by:'
subject-case 
- condition: - subjectis in case- value
- rule: - always
- value js- ["sentence-case", "start-case", "pascal-case", "upper-case"];
- possible values js- [ "lower-case", // lower case "upper-case", // UPPERCASE "camel-case", // camelCase "kebab-case", // kebab-case "pascal-case", // PascalCase "sentence-case", // Sentence case "snake-case", // snake_case "start-case", // Start Case ];
subject-empty 
- condition: subjectis empty
- rule: never
subject-exclamation-mark 
- condition: subjecthas exclamation before the:marker
- rule: never
subject-full-stop 
- condition: - subjectends with- value
- rule: - never
- value text- '.'
subject-max-length 
- condition: - subjecthas- valueor less characters
- rule: - always
- value text- Infinity
subject-min-length 
- condition: - subjecthas- valueor more characters
- rule: - always
- value text- 0
trailer-exists 
- condition: - messagehas trailer- value
- rule: - always
- value text- 'Signed-off-by:'
type-case 
- description: - typeis in case- value
- rule: - always
- value text- 'lower-case'
- possible values js- [ "lower-case", // default "upper-case", // UPPERCASE "camel-case", // camelCase "kebab-case", // kebab-case "pascal-case", // PascalCase "sentence-case", // Sentence case "snake-case", // snake_case "start-case", // Start Case ];
type-empty 
- condition: typeis empty
- rule: never
type-enum 
- condition: - typeis found in value
- rule: - always
- value js- [ "build", "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "revert", "style", "test", ];
type-max-length 
- condition: - typehas- valueor less characters
- rule: - always
- value text- Infinity
type-min-length 
- condition: - typehas- valueor more characters
- rule: - always
- value text- 0
