|
| 1 | +# Compared with other tools |
| 2 | + |
| 3 | +What else checks commit messages, branch names and pull request titles on |
| 4 | +GitHub, what each one does, and when it is the better choice. Prices and |
| 5 | +features are as the projects list them in September 2026; follow the links |
| 6 | +for the current state. GitHub's own rulesets are on |
| 7 | +[their own page](github-rules.md). |
| 8 | + |
| 9 | +## The field |
| 10 | + |
| 11 | +| Tool | What it is | What it checks | Where it runs | Price | |
| 12 | +|---|---|---|---|---| |
| 13 | +| [commitlint](https://commitlint.js.org/) with [commitlint-github-action](https://github.com/wagoid/commitlint-github-action) | The reference Conventional Commits linter in the JavaScript world: shared configs, plugins, a [commitizen](https://commitizen.github.io/cz-cli/) prompt | Commit messages | Node hook (husky), CI Action | Free, open source | |
| 14 | +| [action-semantic-pull-request](https://github.com/amannn/action-semantic-pull-request) | The most-used pull request title check; Electron, Vite and Vercel run it | The pull request title (optionally the single commit, for squash merges) | GitHub Action | Free, open source | |
| 15 | +| [Semantic PRs](https://github.com/Ezard/semantic-prs) | A GitHub App with the same idea: type and scope on the title or the commits | Pull request title or commits | GitHub App | Free, open source | |
| 16 | +| [commitcheck](https://github.com/marketplace/commitcheck) | A hosted App that applies one regular expression, set in its web admin | Commit message, pull request title or description, by regex | GitHub App | Free for public repositories; $25 a month for private ones | |
| 17 | +| [DCO app](https://github.com/apps/dco) and [DCO-2](https://github.com/cncf/dco2) | The sign-off check the Linux kernel and the CNCF use, with a remediation flow for missing sign-offs | `Signed-off-by` trailers | GitHub App | Free, open source | |
| 18 | +| [PRLint](https://github.com/ewolfe/prlint), [PR Title Checker](https://github.com/marketplace/actions/pr-title-checker) | Regular expressions over pull request fields | Title, body, labels, branch | App / Action | Free, open source | |
| 19 | +| **Commit Check** | One rule engine with [24 documented rules](../rules.md), run as a hook, a CLI, an Action, a hosted App or an MCP tool | Commit message, branch name, author name and email, sign-off, AI attribution, force pushes, file size and paths, tag names; the squash message of a pull request | All of the above | Free, open source; the App's private organization repositories move to a paid plan later | |
| 20 | + |
| 21 | +## What is different about Commit Check |
| 22 | + |
| 23 | +- **One config, every place it runs.** The same `cchk.toml` drives the |
| 24 | + [pre-commit hook](../guides/pre-commit.md), the [Action](../guides/github-actions.md), |
| 25 | + the [App](../guides/github-app.md) and the [MCP server](../guides/mcp.md). |
| 26 | + The others cover one place each: commitlint is a Node hook and an Action; |
| 27 | + the title checkers are Actions or Apps; commitcheck is an App. |
| 28 | +- **More than the message.** Branch names, author identity, sign-off, AI |
| 29 | + attribution trailers, force pushes and file rules are rules, not separate |
| 30 | + tools to find and wire up. |
| 31 | +- **A failure explains itself.** Every rule has a stable ID, a one-line error, |
| 32 | + a suggestion and a documentation page, and the Action and App show all of |
| 33 | + it where the failure is. A regex tool reports a mismatch. |
| 34 | +- **Squash-aware.** The App can check the message a squash merge would land, |
| 35 | + built from the repository's merge settings, rather than every commit on the |
| 36 | + branch or only the title. |
| 37 | +- **No JavaScript toolchain.** It is a Python package with no runtime |
| 38 | + dependencies; a Go, Rust or Java repository does not need Node to lint its |
| 39 | + commits. |
| 40 | + |
| 41 | +## Where the others are stronger |
| 42 | + |
| 43 | +- **commitlint's ecosystem.** Years of shared configs (`@commitlint/config-*`), |
| 44 | + plugins and editor integrations, plus an interactive prompt for writing the |
| 45 | + message. Commit Check has no prompt, and its rules are the ones it ships. |
| 46 | +- **A Node monorepo already on husky.** If commitlint is installed and the |
| 47 | + policy is "message only", there is little to gain from switching. |
| 48 | +- **Sign-off remediation.** The DCO app can accept a later commit that |
| 49 | + certifies earlier ones, and lets a maintainer override. Commit Check checks |
| 50 | + the trailer and stops there. |
| 51 | +- **Rejecting the push itself.** Only GitHub's rulesets (and a server-side |
| 52 | + hook on GitHub Enterprise Server) refuse a ref update; see the |
| 53 | + [rulesets page](github-rules.md). Every tool above, Commit Check included, |
| 54 | + marks the commit or blocks the merge. |
| 55 | + |
| 56 | +## Which to choose |
| 57 | + |
| 58 | +- You want the pull request title checked and nothing else: `action-semantic-pull-request`. |
| 59 | +- You are in a JavaScript repository with husky and want plugins: commitlint. |
| 60 | +- You need sign-off with a remediation flow: the DCO app, or DCO-2. |
| 61 | +- You want one policy for messages, branches and authors, the same everywhere |
| 62 | + a commit is made and checked, with a hosted option that needs no workflow |
| 63 | + file: Commit Check. |
0 commit comments