An unopinionated and configurable linter and style checker for Pug
Clone or download
ilyakam and adrienverge Update
Change link to gulp-pug-linter
Latest commit 5f8fdff Apr 17, 2016
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin CLI hot-fix Jun 6, 2016
generators Adds options schema to each rule Nov 18, 2016
pliers Adds build script to regenerate full schema from rule schemas and docs Nov 18, 2016
schemas Add disallowTrailingSpaces rule Sep 3, 2017
.gitignore Lint with xo (#85) Jun 4, 2016
.jsinspectrc > Update jsinspect config Oct 8, 2015
.npmignore > Update `.npmignore` Jul 30, 2015
.sublimelinterrc Lint with xo (#85) Jun 4, 2016
.travis.yml Update Travis CI settings Jun 5, 2016 The Big Rename Dec 23, 2015
LICENSE > Update license Oct 8, 2015 Update Apr 3, 2018
package.json v2.5.0 Sep 3, 2017


An unopinionated and configurable linter and style checker for Pug (formerly Jade)

build status coverage status dependency status npm



$ npm install -g pug-lint


$ pug-lint [options] <file ...>


  • -h, --help: output usage information
  • -V, --version: output the version number
  • -c, --config <path>: configuration file path
  • -r, --reporter <reporter>: error reporter; console - default, inline

Editor integration

Sublime Text 3

If you use SublimeLinter 3 with Sublime Text 3, you can install the SublimeLinter-pug-lint plugin using Package Control.


If you use Atom, you can install the linter-pug package.

VS Code

If you use VS Code, you can install the vscode-puglint extension.


pug-lint is part of syntastic.

If you are using vim-plug to manage your Vim plugins (recommended), you can do:

" In your ~/.vimrc
Plug 'scrooloose/syntastic'
" Then run these commands
:source %

Then to turn the pug linter on, you will need this line in your .vimrc.

let g:syntastic_pug_checkers = ['pug_lint']

Build system integration


If you're using Gulp as your build system, you can use gulp-pug-linter for easier integration.


If you're using Grunt as your build system, you can use grunt-puglint for easier integration.

Configuration file

Options and rules can be specified in a .pug-lintrc, .pug-lintrc.js, or .pug-lintrc.json file, or via adding a "pugLintConfig" option to package.json.


preset deprecated

Presets have been deprecated in favour of extending configuration files.

Instructions for those wishing to continue to use the rules defined in the deprecated clock preset can be found at


Type: string

If you want to extend a specific configuration file, you can use the extends property and specify the path to the file. The path can be either relative or absolute

Configurations can be extended by using:

  1. JSON file
  2. JS file
  3. Shareable configuration package

The extended configuration provides base rules, which can be overridden by the configuration that references it. For example:

  "extends": "./node_modules/coding-standard/.pug-lintrc",
  "disallowIdLiterals": null

You can also extend configurations using shareable configuration packages. To do so, be sure to install the configuration package you want from npm and then use the package name, such as:

$ npm install --save-dev pug-lint-config-clock
  "extends": "pug-lint-config-myrules",
  "disallowIdLiterals": null

In this example, the pug-lint-config-myrules package will be loaded as an object and used as the parent of this configuration. You can override settings from the shareable configuration package by adding them directly into your .pug-lintrc file.

Note: You can omit pug-lint-config- and pug-lint will automatically insert it for you


Type: Array

Default: ["node_modules/**"]

Disables style checking for specified paths declared with glob patterns.


Type: Array

Array of file path matching patterns to load additional rules from, e.g.:

  "additionalRules": ["project-rules/*.js"]


List of available rules

You can specifically disable any rule by omitting it from your .pug-lintrc config file or by assigning it to null, like so:

  "disallowBlockExpansion": null

Some rules, if enabled at the same time, would be contradictory to one another, such as:

  "disallowSpaceAfterCodeOperator": true,
  "requireSpaceAfterCodeOperator": true

In this case requireSpaceAfterCodeOperator is treated as null, and ignored.

Shareable configuration packages

Shareable configs are simply npm packages that export a configuration object. To start, create a Node.js module like you normally would. Make sure the module name begins with pug-lint-config-, such as pug-lint-config-myconfig. Create a new index.js file and export an object containing your settings:

module.exports = {
  disallowBlockExpansion: true

Once your shareable config is ready, you can publish to npm to share with others. We recommend using the puglint and puglintconfig keywords so others can easily find your module.