Run commitlint with config-conventional on a commit message, without installing anything
Runs in your browser. Nothing you type is sent anywhere. Checked against sources on 16 Oct 2026.When a commit-msg hook or a CI job rejects a commit with "subject may not be empty" or "type must be one of", paste the message here to see exactly which of commitlint's twelve config-conventional rules it breaks and how to fix each one. The answers match @commitlint/lint 19 with @commitlint/config-conventional, checked on more than 100 messages, including the ones it skips such as merge and fixup! commits.
Paste the rejected commit message into the box.
Read the rule names and the fix under each, such as subject-case: start with a small letter.
Edit the message here until it passes, then commit it again.
Conventional Commits is a small format for commit messages that tools can read: release tools pick the next version number from it, and changelog tools turn it into release notes. Many teams enforce it with commitlint in a commit-msg hook, and a rejected commit message is a common small frustration.
What it checks. The twelve rules of @commitlint/config-conventional: ten errors (type empty, type case, type list, description empty, description case, full stop, header length, header spaces, body and footer line length) and two warnings (a blank line before the body and before the footer). Each failure is explained in plain words with the fix.
The answers were checked against @commitlint/lint 19 with config-conventional on more than 100 messages. Everything runs in your browser; nothing you type is sent anywhere.
The rest of the article, and all 6 questions about Conventional Commit Checker, are on the Conventional Commit Checker page.
A commit message whose first line is a type, an optional scope in brackets, a colon, a space and a short description, such as fix(api): handle empty response. The format comes from the Conventional Commits 1.0.0 specification, and tools use it to pick the next version number and to write changelogs automatically.
Usually because the header does not match type: description exactly, so commitlint finds neither a type nor a description. Common causes are a missing space after the colon, a space before it, a capital or unknown type, or no type at all. Paste the message here to see which part was misread.
Not with config-conventional: its subject-case rule rejects descriptions in sentence case, start case, pascal case or upper case, so Add login fails and add login passes. Text in backticks or quotes is ignored for this rule, so a name like `Button` at the start is fine. Teams that want capitals change the rule in their own config.
No. By default commitlint skips merge commits, reverts written by git, fixup! and squash! commits, and headers that are only a version number such as 1.2.3 or chore(release): 1.2.3. This page skips the same messages and says so, so a check here gives the same answer as the hook.
Rates and rules change; check the source before you rely on a figure.
Still stuck? Ask about Conventional Commit Checker and anybody who knows can answer. No account needed.
Same job, other tools: Link Preview Checker – Find the missing tag behind a WhatsApp or Slack link with no picture · Readability Checker – Flesch reading ease and grade level, with what to change · User-Agent String Checker – Check what a user-agent string can and cannot tell you before you rely on it.
On the related tools: JSONPath Evaluator – Evaluate a JSONPath expression and get the matching values and their paths.