Lint commit messages
Demo generated with svg-term-cli
cat docs/assets/commitlint.json | svg-term --out docs/public/assets/commitlint.svg --frame --profile=Seti --height=20 --width=80
Be a good commitizen
Share configuration via npm
Tap into conventional-changelog
Get Started | Website
Install and run
Releases
Benefits of using commitlint
Contents
What is commitlint
Getting started
CLI
Config
Shared configuration
Documentation
API
Tools
Roadmap
Version Support and Releases
Related projects
License
Development
commitlint checks if your commit messages meet the conventional commit format.
In general the pattern mostly looks like this:
type(scope?): subject #scope is optional; multiple scopes are supported (current delimiter options: "/", "" and ",")
Real world examples can look like this:
chore: run tests on travis ci
fix(server): send cors headers
feat(blog): add comment section
Common types according to commitlint-config-conventional (based on the Angular convention) can be:
build
chore
ci
docs
feat
fix
perf
refactor
revert
style
test
These can be modified by your own configuration.
Why Use Conventional Commits?
"The perks of committing with conventions" (Talk slides)
Local setup - Lint messages on commit with husky
CI setup - Lint messages during CI builds
Primary way to interact with commitlint.
npm install --save-dev @commitlint/cli
Packages: cli
Configuration is picked up from:
.commitlintrc
.commitlintrc.json
.commitlintrc.yaml
.commitlintrc.yml
.commitlintrc.js
.commitlintrc.cjs
.commitlintrc.mjs
.commitlintrc.ts
.commitlintrc.cts
commitlint.config.js
commitlint.config.cjs
commitlint.config.mjs
commitlint.config.ts
commitlint.config.cts
commitlint
field in package.json
commitlint
field in package.yaml
Packages: cli, core
See Rules for a complete list of possible rules
An example configuration can be found at @commitlint/config-conventional
A number of shared configurations are available to install and use with commitlint
:
@commitlint/config-angular
@commitlint/config-conventional
@commitlint/config-lerna-scopes
@commitlint/config-nx-scopes
@commitlint/config-patternplate
conventional-changelog-lint-config-atom
conventional-changelog-lint-config-canonical
️ If you want to publish your own shareable config then make sure it has a name aligning with the patterncommitlint-config-emoji-log
orcommitlint-config-your-config-name
— then in extend all you have to write isemoji-log
oryour-config-name
.
Check the main website.
Alternative, programmatic way to interact with commitlint
Packages:
format - Format commitlint reports
lint - Lint a string against commitlint rules
load - Load shared commitlint configuration
read - Read commit messages from a specified range or last edit
See API for a complete list of methods and examples
commitizen adapter
prompt
commitlint
is considered stable and is used in various projects as a development tool.
Ideas: conventional-changelog/commitlint#94
Node.js LTS >= 18
git >= 2.13.2
Security patches will be applied to versions which are not yet EOL.
Features will only be applied to the current main version.
Release | Initial release |
---|---|
v19 | 02/2024 |
v18 | 10/2023 |
EOL is usually after around a year.
We're not a sponsored OSS project. Therefore we can't promise that we will release patch versions for older releases in a timely manner.
If you are stuck on an older version and need a security patch we're happy if you can provide a PR.
conventional-changelog Generate a changelog from conventional commit history
commitizen Simple commit conventions for internet citizens
create-semantic-module CLI for quickly integrating commitizen and commitlint in new or existing projects
Copyright by @marionebl. All commitlint
packages are released under the MIT license.
commitlint
is developed in a mono repository.
git clone [email protected]:conventional-changelog/commitlint.gitcd commitlint yarn yarn run build # run build tasksyarn start # run tests, again on changeyarn run commitlint # run CLI
For more information on how to contribute please take a look at our contribution guide.