Commit messages,
done right.

A minimal, deterministic commit standard that replaces noise with signal. Built for teams. Designed to last.

git log --oneline
// Before
feat(ui): Add accordion menu component
fix: Fix login redirect loop issue
refactor(core): Session cleanup and reorganization
chore(ci): Update pipeline for staging deployments
fix(a11y): Fix missing aria labels on modal
perf(db): optimize transaction batching
// OpenCommits
Add ui accordion menu
Fix login redirect loop
Ref core session cleanup
Chr ci update staging pipeline
Fix a11y missing aria labels
Opt db transaction batching

One structure.
Every commit.

Three components. No colons, parentheses, or mandatory footers. Just clarity.

Type[!]·[scope]·description
Typerequired
A 3-letter capitalized identifier describing the intent. Add, Fix, Ref and more.
!optional
Appended after Type. Signals a breaking change. Maps to SemVer MAJOR regardless of base type.
scopeoptional
Lowercase domain identifier — where the change lives. ui, api, db, auth.
descriptionrequired
Lowercase, concise, human-readable. No trailing period. Write for someone scanning git log at speed.

Every commit
has a name.

Core Types are mandatory for compliance. Extended Types are officially defined — opt in when your team benefits.

Addminor
New features or capabilities
Introducing new behavior, components, endpoints, or flows.
Add ui accordion menu
Fixpatch
Bug fixes or incorrect behavior
Any correction of incorrect runtime behavior or bugs.
Fix api pagination off by one
Ref
Refactor internal structure
Structural changes that do not alter external behavior.
Ref core session cleanup
Opt
Performance optimizations
When the primary goal is speed, efficiency, or resource reduction.
Opt db transaction batching
Rmv
Remove code or features
Dead code, obsolete functionality. Use Rmv! for breaking removals.
Rmv unused cache layer
Doc
Documentation and comments
README, API docs, architecture docs, inline comments.
Doc auth token lifecycle
Tst
Add or update tests
Any test-only change — adding, updating, or fixing tests.
Tst add jwt expiration edge cases
Sty
Style and formatting
Purely cosmetic — formatting, linting, prettier. No logic changes.
Sty apply prettier across backend
Chr
Chores
Tooling, CI/CD, dependency updates, build scripts, infrastructure.
Chr ci update staging pipeline
Rev
Revert a previous commit
Reference the original Type and description. Rev! for breaking rollbacks.
Rev Add experimental sidebar

Automation-ready
by design.

Every commit maps deterministically to a semantic version impact. No context. No guessing. Tooling reads it directly.

TypeSemVer ImpactRule
Any Type + !majorBreaking change overrides all defaults
AddminorNew capability added
DepminorSignals a future MAJOR
Fix, SecpatchCorrective change
Ref, Opt, Rmv, Mov, RnminternalNo version bump unless ! is used
Doc, Tst, Sty, Chr, Cfg, RevnoneNo version impact

One regex.
CI-ready.

The normative pattern for OpenCommits v1.0.0. Defines the complete grammar of a valid subject line. Drop it into any linter.

Default profile — allows up to two scope tokens
^(Add|Fix|Ref|Opt|Rmv|Doc|Tst|Sty|Chr|Mov|Rnm|Dep|Sec|Cfg|Rev)(!)?( [a-z][a-z0-9]*){0,2} [a-z].+$
Strict profile — single scope only
^(Add|Fix|Ref|Opt|Rmv|Doc|Tst|Sty|Chr|Mov|Rnm|Dep|Sec|Cfg|Rev)(!)?( [a-z][a-z0-9]*)? [a-z].+$

Start using it
today.

Read the full specification, contribute to the standard, or drop the regex into your CI pipeline right now.