A collection of 106 open-source linters
Tags: codequality, codereview, staticanalysis, linters
Published: 2021-07-08 15:51:07

**Linters** are commonly used in software development as they help to identify in your code :

- Possible bugs
- Code smells (method too long, with too many parameters, ...)
- Vulnerabilities issues
- And so much more...

They're used on local code repositories during coding or before a **commit**, and also during **CI/CD** with some break conditions that can stop the full process.

You may already know some of them. At [Promyze](https://promyze.com?utm_source=DevTo&utm_medium=referral), we try to regularly maintain a list of open-source linters and to identify new promising projects as well as those which are less and less updated. 

This year we decided to provide a new fresh list, and we'll prepare next year an updated list with the evolution of some indicators, like the number of **stars** on Github. 

Here is the complete list in the table below. Please now that **N/A** means that projects are not hosted on Github.

You can find the PDF/PNG version of the infographic [on this page](https://promyze.com/open-source-linters-2021?utm_source=DevTo&utm_medium=referral).


|Language|Name|Stars Github|Last Activity|
|---|---|---|---|
|Ansible|[ansible-lint](https://github.com/ansible-community/ansible-lint)|2534|June 24, 2021|
|C++|[oclint](https://github.com/oclint/oclint)|3,333|July 1, 2021|
|C++|[vera++](https://bitbucket.org/verateam/vera/wiki/Home)|0|July 28, 2020|
|C++|[cppcheck](http://cppcheck.sourceforge.net/)|0|July 4, 2021|
|C++|[cpplint](https://github.com/cpplint/cpplint)|821|May 20, 2021|
|C#|[gendarme](https://www.mono-project.com/docs/tools+libraries/tools/gendarme/)|155|December 9, 2020|
|C#|[dotnet-format](https://github.com/dotnet/format)|1,040|July 8, 2021|
|C#|[code-cracker](https://github.com/code-cracker/code-cracker)|1,058|May 19, 2021|
|C#|[Roslynator](https://github.com/JosefPihrt/Roslynator)|2,077|July 4, 2021|
|Chef|[cookstyle](https://github.com/chef/cookstyle/)|95|July 6, 2021|
|Clojure|[eastwood](https://github.com/jonase/eastwood)|1,018|July 1, 2021|
|Clojure|[joker](https://github.com/candid82/joker)|1,198|June 11, 2021|
|Clojure|[kibit](https://github.com/jonase/kibit)|1,668|April 13, 2021|
|Clojure|[clf-kondo](https://github.com/clj-kondo/clj-kondo)|1,180|July 7, 2021|
|CSS|[stylelint](https://github.com/stylelint/stylelint)|8,849|May 31, 2021|
|CSS|[csslint](https://github.com/CSSLint/csslint)|4,613|February 21, 2019|
|CSS|[csscomb.js](https://github.com/csscomb/csscomb.js)|3,097|June 24, 2019|
|CSS|[doiuse](https://github.com/anandthakker/doiuse)|988|April 2, 2021|
|D|[D-Scanner](https://github.com/dlang-community/D-Scanner)|226|June 5, 2021|
|Dart|[dart_style](https://github.com/dart-lang/dart_style)|502|July 2, 2021|
|Dart|[linter](https://github.com/dart-lang/linter)|419|July 8, 2021|
|Docker|[hadolint](https://github.com/hadolint/hadolint)|5,564|July 5, 2021|
|Docker|[dockerfilelint](https://github.com/replicatedhq/dockerfilelint)|778|September 15, 2020|
|Elixir|[credo](https://github.com/rrrene/credo)|3,955|July 7, 2021|
|Elixir|[dogma](https://github.com/lpil/dogma)|475|January 19, 2018|
|Erlang|[elvis](https://github.com/inaka/elvis)|389|April 6, 2021|
|F#|[fantomas](https://github.com/fsprojects/fantomas)|510|July 7, 2021|
|F#|[FSharpLint](https://github.com/fsprojects/FSharpLint)|235|July 5, 2021|
|Go|[golangci-lint](https://github.com/golangci/golangci-lint)|8,045|July 7, 2021|
|Go|[goreporter](https://github.com/360EntSecGroup-Skylar/goreporter)|2,880|September 2, 2018|
|Go|[revive](https://github.com/mgechev/revive)|2,821|June 30, 2021|
|Go|[go-critic](https://github.com/go-critic/go-critic)|953|June 29, 2021|
|Go|[ineffassign](https://github.com/gordonklaus/ineffassign)|330|May 22, 2021|
|Groovy|[CodeNarc](https://github.com/CodeNarc/CodeNarc)|259|July 4, 2021|
|Haml|[haml-lint](https://github.com/sds/haml-lint)|249|June 22, 2021|
|Haskell|[hlint](https://github.com/ndmitchell/hlint)|1,182|July 3, 2021|
|Haskell|[brittany](https://github.com/lspitzner/brittany)|647|May 18, 2021|
|HTML|[HTMLHint](https://github.com/htmlhint/HTMLHint)|2,645|June 14, 2021|
|HTML|[tidy-html5](https://github.com/htacg/tidy-html5)|2,312|July 1, 2021|
|HTML|[bootlint](https://github.com/twbs/bootlint)|2,399|May 10, 2021|
|HTML|[validator](https://github.com/validator/validator)|1,092|July 8, 2021|
|Java|[checkstyle](https://github.com/checkstyle/checkstyle)|6,095|July 8, 2021|
|Java|[error-prone](https://github.com/google/error-prone)|5,637|July 8, 2021|
|Java|[pmd](https://github.com/pmd/pmd)|3,364|July 8, 2021|
|Java|[spotbugs](https://github.com/spotbugs/spotbugs)|2381|July 6, 2021|
|Java|[spoon](https://github.com/INRIA/spoon)|1,160|July 8, 2021|
|JavaScript|[flow](https://github.com/facebook/flow)|21,339|July 8, 2021|
|JavaScript|[prettier](https://github.com/prettier/prettier)|40,046|July 8, 2021|
|JavaScript|[standard](https://github.com/standard/standard)|25,690|July 4, 2021|
|JavaScript|[eslint](https://github.com/eslint/eslint)|18,759|July 8, 2021|
|JavaScript|[xo](https://github.com/xojs/xo)|5,955|July 8, 2021|
|JavaScript|[rslint](https://github.com/rslint/rslint)|1,522|June 25, 2021|
|JavaScript|[hegel](https://github.com/JSMonk/hegel)|1,735|May 17, 2021|
|Julia|[Lint.jl](https://github.com/tonyhffong/Lint.jl)|161|August 21, 2019|
|Kotlin|[ktlint](https://github.com/pinterest/ktlint)|4,315|July 4, 2021|
|Kotlin|[detekt](https://github.com/detekt/detekt)|3,755|July 7, 2021|
|Kubernetes|[kube-lint](https://github.com/viglesiasce/kube-lint)|154|February 20, 2020|
|Kubernetes|[kubeval](https://github.com/instrumenta/kubeval)|2,413|April 26, 2021|
|Markdown|[markdownlint](https://github.com/DavidAnson/markdownlint)|2,572|February 12, 2021|
|Markdown|[textlint](https://github.com/textlint/textlint)|2,047|July 7, 2021|
|Ocaml|[mascot](http://mascot.x9c.fr/)|0|August 29, 2012|
|PHP|[PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer)|10,272|June 28, 2021|
|PHP|[phpstan](https://github.com/phpstan/phpstan)|9,986|July 8, 2021|
|PHP|[phpcpd](https://github.com/sebastianbergmann/phpcpd)|2,063|May 19, 2021|
|PHP|[PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer)|8,679|July 1, 2021|
|PHP|[phan](https://github.com/phan/phan)|5,101|June 27, 2021|
|PHP|[psalm](https://github.com/vimeo/psalm)|4,204|July 8, 2021|
|PHP|[phplint](https://github.com/overtrue/phplint)|702|July 8, 2021|
|Puppet|[puppet-lint](https://github.com/rodjek/puppet-lint)|758|January 18, 2021|
|Python|[pycodestyle](https://github.com/PyCQA/pycodestyle)|4,341|May 7, 2021|
|Python|[pylint](https://github.com/PyCQA/pylint)|3,423|July 7, 2021|
|Python|[bandit](https://github.com/PyCQA/bandit)|3,924|June 29, 2021|
|Python|[flake8](https://github.com/PyCQA/flake8)|1,360|July 6, 2021|
|Python|[mypy](https://github.com/python/mypy)|10,982|July 8, 2021|
|Python|[pyre-check](https://github.com/facebook/pyre-check)|5,458|July 7, 2021|
|Python|[pyright](https://github.com/Microsoft/pyright)|6,920|July 6, 2021|
|R|[pylama](https://github.com/klen/pylama)|860|July 4, 2021|
|R|[styler](https://github.com/r-lib/styler)|484|July 8, 2021|
|Ruby|[rubocop](https://github.com/rubocop/rubocop)|11,411|July 7, 2021|
|Ruby|[brakeman](https://github.com/presidentbeef/brakeman)|6,149|July 5, 2021|
|Ruby|[reek](https://github.com/troessner/reek)|3,558|July 4, 2021|
|Ruby|[sorbet](https://github.com/sorbet/sorbet)|2,612|July 7, 2021|
|Rust|[rust-clippy](https://github.com/rust-lang/rust-clippy)|6,029|July 6, 2021|
|Rust|[rust-analyzer](https://github.com/rust-analyzer/rust-analyzer)|6,739|July 8, 2021|
|Scss|[scss-lint](https://github.com/sds/scss-lint)|3,511|July 26, 2020|
|Scala|[scapegoat](https://github.com/sksamuel/scapegoat)|421|July 5, 2021|
|Scala|[scalastyle](https://github.com/scalastyle/scalastyle)|676|March 4, 2019|
|Scala|[wartremover](https://github.com/wartremover/wartremover)|967|June 25, 2021|
|Shell|[shellcheck](https://github.com/koalaman/shellcheck)|25,304|July 2, 2021|
|Shell|[bashate](https://pypi.org/project/bashate/)|0|May 31, 2021|
|Solidity|[Ethlint](https://github.com/duaraghav8/Ethlint)|721|September 14, 2019|
|SQL|[sqlint](https://github.com/purcell/sqlint)|364|April 2, 2021|
|SQL|[sqlfluff](https://github.com/sqlfluff/sqlfluff)|1,783|July 6, 2021|
|Swift|[SwiftLint](https://github.com/realm/SwiftLint)|14,939|July 6, 2021|
|Terraform|[tflint](https://github.com/terraform-linters/tflint)|2,430|July 5, 2021|
|Terraform|[tfsec](https://github.com/tfsec/tfsec)|2,868|July 8, 2021|
|Terraform|[terrascan](https://github.com/accurics/terrascan)|1,905|July 7, 2021|
|Terraform|[terragrunt](https://github.com/gruntwork-io/terragrunt)|5,097|June 22, 2021|
|TypeScript|[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint)|9,874|July 5, 2021|
|TypeScript|[gts](https://github.com/google/gts)|3,498|July 7, 2021|
|TypeScript|[codelyzer](https://github.com/mgechev/codelyzer)|2,420|July 5, 2021|
|Yaml|[yamllint](https://github.com/adrienverge/yamllint)|1,577|June 10, 2021|
|Yaml|[spectral](https://github.com/stoplightio/spectral)|1,005|July 8, 2021|
|Multi-lang|[Sonarqube](https://github.com/SonarSource/sonarqube)|5,905|July 7, 2021|
|Multi-lang|[super-linter](https://github.com/github/super-linter)|6,819|June 29, 2021|
|Multi-lang|[mega-linter](https://github.com/nvuillam/mega-linter)|230|July 7, 2021|