Skip to main content


A regexp based customizable linter

Get Started
rules:  - id: com.example.github    pattern: Github    message: |      GitHub is GitHub, not Github
      You may have misspelling the name of the service!
index.html:9:30: GitHub is GitHub, not Github
<a href="/signup">Signup via Github</a>


Learn the patterns and syntax to make custom rules.

Syntax details


Want to see some pre-defined rules? Check out some rules here.

See rules


Goodcheck is written to be used on the command line. Learn about it’s usage here.

CLI details

A Goodcheck rule

Define patterns with messages in a goodcheck.yml file and run goodcheck within your repository. Any matching results will be displayed in the terminal.

rules:  - id: com.sample.no_blink    pattern: <blink    message: |      Stop using <blink> tag.
index.html:50:5: Stop using <blink> tag.
<h3><blink>HTML5 Markup</blink></h3></a>

A rule with negated pattern

Goodcheck rules are usually to detect if something is included in a file. You can define the negated rules for the opposite, something is missing in a file.

rules:  - id: com.sample.negated    not:      pattern: <!DOCTYPE html>    message: |      Write a doctype on HTML files.    glob: "**/*.html"
index.html:-:-: Write a doctype on HTML files.
<html lang="en">

A rule without pattern

You can define a rule without pattern. The rule emits an issue on each file specified with glob. You cannot omit glob from a rule definition without pattern.

rules:  - id: com.sample.without_pattern    message: |      Read the operation manual for DB migration.
      See    glob: db/schema.rb
db/schema.rb:-:-: Read the operation manual for DB migration
# This file is auto-generated from the current state of the database.

Stop reviewing the same patterns.

Start using Goodcheck