npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@leandromatos/commitlint-config

v0.1.4

Published

This repository contains a set of tools to help you standardize your commit messages. It is based on the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) with some customizations, including two custom plugins: `selective-scope` for p

Readme

Commitlint Config

This repository contains a set of tools to help you standardize your commit messages. It is based on the Conventional Commits with some customizations, including two custom plugins: selective-scope for per-type scope validation and subject-release for release commit enforcement.

Usage

Use yarn or another package manager to install the required dependencies:

yarn add --dev @commitlint/cli @leandromatos/commitlint-config

Then, create a commitlint.config.js in the root of your project with the following content:

export default {
  extends: [
    "@leandromatos/commitlint-config"
  ]
}

Rules

Standard Rules

These rules come from @commitlint/config-conventional.

body-leading-blank

The body-leading-blank rule is used to enforce the presence of a blank line between the subject and the body if the body is present.

# ❌ Fail
git commit -m "fix: Some message\nBody message"
# ✅ Pass
git commit -m "fix: Some message\n\nBody message"

body-max-line-length

The body-max-line-length rule is used to enforce a maximum line length for the body.

# ❌ Fail
git commit -m "fix: Some message\n\nSome body message with more than 100 characters just for testing if the commitlint is working properly"
# ✅ Pass
git commit -m "fix: Some short commit message"

footer-leading-blank

The footer-leading-blank rule is used to enforce the presence of a blank line between the body and the footer.

# ❌ Fail
git commit -m "fix: Some message\n\nBody message\nFooter message"
# ✅ Pass
git commit -m "fix: Some message\n\nBody message\n\nFooter message"

footer-max-line-length

The footer-max-line-length rule is used to enforce a maximum line length for the footer.

# ❌ Fail
git commit -m "fix: Some message\n\nSome footer message with more than 100 characters just for testing if the commitlint is working properly"
# ✅ Pass
git commit -m "fix: Some message\n\nFooter message"

header-max-length

The header-max-length rule is used to enforce a maximum line length for the header.

# ❌ Fail
git commit -m "fix: Some message with more than 100 characters just for testing if the commitlint is working properly"
# ✅ Pass
git commit -m "fix: Some message"

header-trim

The header-trim rule is used to enforce the absence of leading or trailing whitespaces in the header.

# ❌ Fail
git commit -m " fix: Some message"
# ❌ Fail
git commit -m "fix: Some message "
# ✅ Pass
git commit -m "fix: Some message"

subject-case

The subject-case rule is used to enforce the use of the sentence case.

# ❌ Fail
git commit -m "fix: some message"
# ✅ Pass
git commit -m "fix: Some message"

subject-empty

The subject-empty rule is used to enforce the presence of a subject.

# ❌ Fail
git commit -m ""
# ✅ Pass
git commit -m "fix: Some message"

subject-full-stop

The subject-full-stop rule is used to enforce the absence of a period at the end of the subject.

# ❌ Fail
git commit -m "fix: Some message."
# ✅ Pass
git commit -m "fix: Some message"

type-case

The type-case rule is used to enforce the use of the lowercase.

# ❌ Fail
git commit -m "FIX: Some message"
# ✅ Pass
git commit -m "fix: Some message"

type-empty

The type-empty rule is used to enforce the presence of a type.

# ❌ Fail
git commit -m ": Some message"
# ✅ Pass
git commit -m "fix: Some message"

type-enum

The type-enum rule is used to enforce the use of the following types:

  • build: Changes that affect the build system or external dependencies
  • chore: Changes that don't affect the source code
  • ci: Changes to our CI configuration files and scripts
  • docs: Documentation only changes
  • feat: A new feature
  • fix: A bug fix
  • perf: A code change that improves performance
  • refactor: A code change that neither fixes a bug nor adds a feature
  • revert: Reverts a previous commit
  • style: Changes that do not affect the meaning of the code (whitespace, formatting, missing semi-colons, etc)
  • test: Adding missing tests or correcting existing tests

Custom Rules

These rules are provided by this config's custom plugins.

selective-scope

The selective-scope rule provides per-type scope validation. You can configure which scopes are allowed for each commit type by overriding the rule in your config:

export default {
  extends: ["@leandromatos/commitlint-config"],
  rules: {
    "selective-scope": [2, "always", {
      feat: ["api", "ui"],
      fix: [null, "api", "ui"],
      chore: [],
      ci: [/^workflow-/],
    }],
  },
}

Configuration modes:

| Config value | Meaning | | --------------- | ------------------------------------------------------------- | | [] | Scope is forbidden for this type | | ['api', 'ui'] | Scope is required and must match one of the listed values | | [null, 'api'] | Scope is optional; if provided, must match | | [/^feature-/] | Scope must match the regex pattern |

Examples:

Given feat: ['api', 'ui']:

# ❌ Fail: scope is required
git commit -m "feat: Add endpoint"
# ✅ Pass
git commit -m "feat(api): Add endpoint"
# ❌ Fail: scope 'core' not allowed
git commit -m "feat(core): Add endpoint"

Given chore: []:

# ❌ Fail: scope is not allowed
git commit -m "chore(deps): Update deps"
# ✅ Pass
git commit -m "chore: Update deps"

Given fix: [null, 'api', 'ui']:

# ✅ Pass: scope is optional
git commit -m "fix: Resolve crash"
# ✅ Pass
git commit -m "fix(api): Resolve crash"
# ❌ Fail: scope 'core' not allowed
git commit -m "fix(core): Resolve crash"

Given ci: [/^workflow-/]:

# ✅ Pass
git commit -m "ci(workflow-lint): Update"
# ❌ Fail: scope doesn't match pattern
git commit -m "ci(deploy): Update"

Note: If you configure chore in selective-scope, make sure to include 'release' in the allowed scopes (e.g. chore: ['release'] or chore: [null, 'release']). Otherwise, the subject-release rule — which expects chore(release): vX.Y.Z commits — will conflict with selective-scope.

subject-release

The subject-release rule is used to enforce the presence of a release version in the subject, and it must be a non-breaking change.

# ❌ Fail
git commit -m "chore(release): New version"
# ❌ Fail
git commit -m "chore(release)!: v1.0.0"
# ✅ Pass
git commit -m "chore(release): v1.0.0"

Contributing

Contributions are welcome. Please see the CONTRIBUTING file for more information.

License

This package is licensed under the MIT License. For more information, see the LICENSE file.