A simple, attractive code quality tool for CSS built on top of LESS


Developed at Twitter to support our internal styleguide, RECESS is a simple, attractive code quality tool for CSS built on top of LESS.

Incorporate it into your development process as a linter, or integrate it directly into your build system as a compiler, RECESS will keep your source looking clean and super managable.

$ recess [path] [options]
  • --compile - compiles your code and outputs it to the terminal. Fixes white space and sort order. Can compile css or less.
  • --compress - compress your compiled code.
  • --config - accepts a path, which specifies a json config object
  • --noIDs - doesn't complain about using IDs in your stylesheets
  • --noJSPrefix - doesn't complain about styling .js- prefixed classnames
  • --noOverqualifying - doesn't complain about overqualified selectors (ie:
  • --noUnderscores - doesn't complain about using semicolons in your class names
  • --noUniversalSelectors - doesn't complain about using the universal * selector
  • --strictPropertyOrder - doesn't looking into your property ordering
  • --zeroUnits - doesn't complain if you add units to values of 0

Lint all css files

$ recess *.css

Lint file, ignore styling of IDs

$ recess ./bootstrap.css --noIds false

Compile and compress .less file, then output it to a new file

$ recess ./bootstrap.less --compress > ./bootstrap-production.css

Recess provides a pretty simple programmatic api.

var recess = require('recess')

Once you've required recess, just pass it a path (or array of paths) and an optional options object and an optional callback:

recess(['../fat.css', '../twitter.css'], { compile: true }, callback)

The following options (and defaults) are available in the programatic api:

  • compile: false
  • compress: false
  • noIDs: true
  • noJSPrefix: true
  • noOverqualifying: true
  • noUnderscores: true
  • noUniversalSelectors: true
  • prefixWhitespace: true
  • strictPropertyOrder: true
  • zeroUnits: true

The callback is fired when each instance has finished processessing an input. The callback is passed an array of of instances (one for each path). The instances have a bunch of useful things on them like the raw data and an array of output strings.

When compiling, access the compiled source through the output property:

var recess = require('recess')
recess('./js/fat.css', { compile: true }, function (errobj) {
  if (err) throw err
    obj // recess instance for fat.css 
  , obj.output // array of loggable content 
  , obj.errors // array of failed lint rules 

To install recess you need both node and npm installed.

$ npm install recess -g
  • Jacob Thornton:

Copyright 2012 Twitter, Inc.

Licensed under the Apache License, Version 2.0: