Shareable commitlint config enforcing conventional commits

get started| let's chatslack| website">Get Started| Let's chatslack| Website

Lint commit messages

Demo generated with svg-term-cli

cat docs/assets/commitlint.json | svg-term --out docs/assets/commitlint.svg --frame --profile=Seti --height=20 --width=80

npm latestCircleCI

  • <g-emoji class="g-emoji" alias="police_car" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f693.png">🚓</g-emoji> Be a good commitizen
  • <g-emoji class="g-emoji" alias="package" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f4e6.png">📦</g-emoji> Share configuration via npm
  • <g-emoji class="g-emoji" alias="robot" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f916.png">🤖</g-emoji> Tap into conventional-changelog


  • What is commitlint
    • Benefits using commitlint
  • Getting started
  • CLI
  • Config
  • Shared configuration
  • API
  • Tools
  • Roadmap
  • Version Support
  • Related projects
  • License
  • Development
    • Install and run
    • Publishing a release

What is commitlint

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

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 the Angular convention)can be:

  • build
  • ci
  • chore
  • docs
  • feat
  • fix
  • perf
  • refactor
  • revert
  • style
  • test

These can be modified by your own configuration.

Benefits using commitlint

Getting started

# Install commitlint cli and conventional config
npm install --save-dev @commitlint/{config-conventional,cli}
# For Windows:
npm install --save-dev @commitlint/config-conventional @commitlint/cli

# Configure commitlint to use conventional config
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js

To lint commits before they are created you can use Husky's 'commit-msg' hook:

  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"

Detailed Setup instructions


  • Primary way to interact with commitlint.
  • npm install --save-dev @commitlint/cli
  • Packages: cli


  • Configuration is picked up from commitlint.config.js, .commitlintrc.js, .commitlintrc.json, or .commitlintrc.ymlfile or a commitlintfield in package.json
  • Packages: cli, core
  • See Rulesfor a complete list of possible rules
  • An example configuration can be found at @commitlint/config-conventional

Shared configuration

A number of shared configurations are available to install and use with commitlint:

<g-emoji class="g-emoji" alias="warning" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/26a0.png">⚠️</g-emoji> If you want to publish your own shareable config then make sure it has a name aligning with the pattern commitlint-config-emoji-logor commitlint-config-your-config-name— then in extend all you have to write is emoji-logor your-config-name.


  • 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 APIfor a complete list of methods and examples



Ideas: conventional-changelog/commitlint#94

commitlintis considered stable and is used in various projects as development tool.

We identify ease of adoptionand developer experienceas fields where there is room and need for improvement. The items on the roadmap should enhance commitlintregarding those aspects.

  • <input checked="" disabled="" type="checkbox"> Adoption: Provide reusable Travis CI integration: @commitlint/travis-cli(https://github.com/conventional-changelog/commitlint/releases/tag/v5.1.0)
  • <input disabled="" type="checkbox"> DX: Support PR squash scenario via ahmed-taj/commitlint-botand @commitlint/travis-cli
  • <input disabled="" type="checkbox"> Adoption: Make ahmed-taj/commitlint-botconfigurable via commitlintconfiguration
  • <input disabled="" type="checkbox"> Adoption: Create commitlint init
  • <input disabled="" type="checkbox"> DX: Extend the configuration schema to allow for additional fields (descriptions, examples, fixes) on both the rule and value level
  • <input disabled="" type="checkbox"> DX: Incorporate an extended version of lennym/commit-templatededucing a template from commitlint configuration
  • <input disabled="" type="checkbox"> DX: Rewrite @commitlint/promptfor better usability (might involve a lot of yak-shaving)

Version Support

  • Node.js LTS>= 6
  • git >= 2.13.2

Related projects

  • 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
  • commitlint.io- helps your project to ensures nice and tidy commit messages without needing any download or installation


Copyright by @marionebl. All commitlintpackages are released under the MIT license.


commitlintis developed in a mono repository.

Install and run

git clone git@github.com:conventional-changelog/commitlint.git
cd commitlint
yarn run build # run build tasks
yarn start # run tests, again on change

For more information on how to contribute please take a look at our contribution guide.

Publishing a release

yarn clean
yarn install
yarn run build
yarn test
yarn run publish

以上是 @commitlint/config-conventional 的使用教程帮助文档。

  • @commitlint/config-conventional官网:官网
  • @commitlint/config-conventional源码仓库:源码仓库


扫码加入 JavaScript 社区



欢迎加入 JavaScript 社区