npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

less-papandreou

v1.5.0-patch1

Published

Leaner CSS

Downloads

4

Readme

Less.js v1.5.0-b1

The dynamic stylesheet language. http://lesscss.org.

This is the JavaScript, and now official, stable version of LESS.

Getting Started

Options for adding Less.js to your project:

Feature Highlights

LESS extends CSS with dynamic features such as:

To learn about the many other features Less.js has to offer please visit http://lesscss.org and the Less.js wiki

Examples

nesting

Take advantage of nesting to make code more readable and maintainable. This:

.nav > li > a {
  border: 1px solid #f5f5f5;
  &:hover {
    border-color: #ddd;
  }
}

renders to:

.nav > li > a {
  border: 1px solid #f5f5f5;
}
.nav > li > a:hover {
  border-color: #ddd;
}

variables

Updated commonly used values from a single location.

// Variables ("inline" comments like this can be used)
@link-color:  #428bca; // appears as "sea blue"

/* Or "block comments" that span
   multiple lines, like this */
a {
  color: @link-color; // use the variable in styles
}

Variables can also be used in @import statements, URLs, selector names, and more.

operations

Continuing with the same example above, we can use our variables even easier to maintain with operations, which enables the use of addition, subraction, multiplication and division in your styles:

// Variables
@link-color:        #428bca;
@link-color-hover:  darken(@link-color, 10%);

// Styles
a {
  color: @link-color;
}
a:hover {
  color: @link-color-hover;
}

renders to:

a {
  color: #428bca;
}
a:hover {
  color: #3071a9;
}

mixins

"implicit" mixins

Mixins enable you to apply the styles of one selector inside another selector like this:

// Any "regular" class...
.link {
  color: @link-color;
}
a {
  font-weight: bold;
  .link; // ...can be used as an "implicit" mixin
}

renders to:

.link {
  color: #428bca;
}
a {
  font-weight: bold;
  color: #428bca;
}

So any selector can be an "implicit mixin". We'll show you a DRYer way to do this below.

parametric mixins

Mixins can also accept parameters:

// Transition mixin
.transition(@transition) {
  -webkit-transition: @transition;
     -moz-transition: @transition;
       -o-transition: @transition;
          transition: @transition;
}

used like this:

a {
  font-weight: bold;
  color: @link-color;
  .transition(color .2s ease-in-out);
  // Hover state
  &:hover {
    color: @link-color-hover;
  }
}

renders to:

a {
  font-weight: bold;
  color: #428bca;
  -webkit-transition: color 0.2s ease-in-out;
     -moz-transition: color 0.2s ease-in-out;
       -o-transition: color 0.2s ease-in-out;
          transition: color 0.2s ease-in-out;
}
a:hover {
  color: #3071a9;
}

extend

The extend feature can be thought of as the inverse of mixins. It accomplishes the goal of "borrowing styles", but rather than copying all the rules of Selector A over to Selector B, extend copies the name of the inheriting selector (Selector B) over to the extending selector (Selector A). So continuing with the example used for mixins above, extend works like this:

.link {
  color: @link-color;
}
a:extend(.link) {
  font-weight: bold;
}
// Can also be written as
a {
  &:extend(.link);
  font-weight: bold;
}

renders to:

.link, a {
  color: #428bca;
}

Usage

Compiling and Parsing

Invoke the compiler from node:

var less = require('less');

less.render('.class { width: (1 + 1) }', function (e, css) {
    console.log(css);
});

Outputs:

.class {
  width: 2;
}

You may also manually invoke the parser and compiler:

var parser = new(less.Parser);

parser.parse('.class { width: (1 + 1) }', function (err, tree) {
    if (err) { return console.error(err) }
    console.log(tree.toCSS());
});

Configuration

You may also pass options to the compiler:

var parser = new(less.Parser)({
    paths: ['.', './src/less'], // Specify search paths for @import directives
    filename: 'style.less'      // Specify a filename, for better error messages
});

parser.parse('.class { width: (1 + 1) }', function (e, tree) {
    tree.toCSS({ compress: true }); // Minify CSS output
});

More information

For general information on the language, configuration options or usage visit lesscss.org or the less wiki.

Here are other resources for using Less.js:

Contributing

Please read CONTRIBUTING.md. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.

Reporting Issues

Before opening any issue, please search for existing issues and read the Issue Guidelines, written by Nicolas Gallagher. After that if you find a bug or would like to make feature request, please open a new issue.

Development

Install Less.js

Start by either downloading this project manually, or in the command line:

git clone https://github.com/less/less.js.git "less"

and then cd less.

Install dependencies

To install all the dependencies for less development, run:

npm install

If you haven't run grunt before, install grunt-cli globally so you can just run grunt

npm install grunt-cli -g

You should now be able to build Less.js, run tests, benchmarking, and other tasks listed in the Gruntfile.

Using Less.js Grunt

Tests, benchmarking and building is done using Grunt ~0.4.1. If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to install and use Grunt plugins, which are necessary for development with Less.js.

The Less.js Gruntfile is configured with the following "convenience tasks" :

test - grunt

Runs jshint, nodeunit and headless jasmine tests using phantomjs. You must have phantomjs installed for the jasmine tests to run.

test - grunt benchmark

Runs the benchmark suite.

build for testing browser - 'grunt browser'

This builds less.js and puts it in 'test/browser/less.js'

build - grunt stable | grunt beta | grunt alpha

Builds Less.js from from the /lib/less source files. This is done by the developer releasing a new release, do not do this if you are creating a pull request.

readme - grunt readme

Build the README file from a template to ensure that metadata is up-to-date and (more likely to be) correct.

Please review the Gruntfile to become acquainted with the other available tasks.

Please note that if you have any issues installing dependencies or running any of the Gruntfile commands, please make sure to uninstall any previous versions, both in the local node_modules directory, and clear your global npm cache, and then try running npm install again. After that if you still have issues, please let us know about it so we can help.

Release History

See the changelog

License

Copyright (c) 2009-2013 Alexis Sellier & The Core Less Team Licensed under the Apache License.