NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2831 most downloaded on npm
Leaner CSS
Last release 2 days ago
15 Sep 2026
Release timing varies
gaps range from 8 days to 3 months
Most releases are documented
notes for 53 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
16 years old
159 releases · first in 2011
- #3334 Adds range() function for lists (#3334) (@matthew-dean) - #3333 Fixes #3325 #3313 #3328 - each() function fixes (#3333) (@matthew-dean) - #333
- #3302 v3.8.1 (#3302) (@matthew-dean) - #3301 Fixes: #3300 (#3301) (@matthew-dean) - #3292 Demonstrate 3.7 fixes #3160 (#3292) (@matthew-dean) - #329
One column per quarter.
- #3293 v3.8.0 (#3293) (@matthew-dean) - #3248 Feature/rewrite urls (#3248) (@matthew-dean)
- #3284 Release v3.7.1 (#3284) (@matthew-dean) - #3283 Fix #3281: console.warning → console.warn (#3283) (@calvinjuarez)
- #3279 v3.7.0 (#3279) (@matthew-dean) - #3274 Fixes #1880 - Adds two new math modes and deprecates strictMath (@matthew-dean) - #3258 Fixes #2824 - E
- #3278 v3.6.0 (@matthew-dean) - #3252 Removes less-rhino (broken for a long time) - Fixes #3241 (@matthew-dean) - #3259 Removes "double paren" issue
less-rhino (broken for a long time) - Fixes #3241 (@matthew-dean)- #3272 Reverts operations not being performed in media queries (@matthew-dean) - #3257 Fixes #3182 (@matthew-dean)
Nothing published for this version
- #3267 Fixes issue with parentheses following variable in expressions (@matthew-dean)
- #3264 Release v3.5.0 (@matthew-dean)
- #3260 Release v3.5.0-beta.7 (#3260) (@matthew-dean) - #3256 Allow [] to resolve to last declaration's value (#3256) (@matthew-dean)
- #3255 v3.5.0-beta.6 (#3255) (@matthew-dean) - #3247 Plugins: If minVersion >= 3.0.0, don't "pre-run" .setOptions() (#3247) (@calvinjuarez) - #3254 T
- #3251 Bugfix - namespace values (#3251) (@matthew-dean) - #3250 Added small breakpoints example with namespaced values (#3250) (@matthew-dean)
- #3242 [Feature] Namespaced values (#3242) (@matthew-dean) - #3246 Release/v3.5.0 beta.3 (#3246) (@matthew-dean) - #3229 Fixes #3187 (couldn't repo,
- #3239 fix: browser cache is always considered stale if .modifyVars wasn't set (#3239) (@balpha)
- #3236 v3.5.0-beta.2 (#3236) (@matthew-dean) - #3228 Fixes #3205, partial 3.0 math regression #1880 (#3228) (@matthew-dean) - #3227 Fixes #1421 - re-
- #3230 Release v3.5.0 beta (#3230) (@matthew-dean) - #3219 Invalidate less-node file cache if modified (#3219) (@matthew-dean) - #3213 Fixes #3147 #2
- #3180 update source_map to 0.6.x (@akkumar) - #3172 Type checking length units (@jacobwarduk) - #3200 Fixes #3181 (@matthew-dean)
Nothing published for this version
- #3163 Merge 3.x into master (@matthew-dean, @barnabycolby, @kirillrogovoy, @maxbrunsfeld, @seven-phases-max, @ryysud, @bdsomer, @wiinci, @nikeee, @a
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
- #3096 Switch from request to phin! (@bdsomer) - #3082 Add Node.js v8 to Travis CI and AppVeyor (@ryysud) - #3079 Initial support for custom parsed f
Nothing published for this version
Nothing published for this version
- #3161 Remove legacy upgrade (@matthew-dean) - #3159 Bump to 3.0.0-RC.1 (@matthew-dean)
- #3150 Drop node 0.10 and 0.12 and added node 9 matrix testing (@anthony-redFox)
- #3122 Mime update (@nikeee) - #3120 Issue3115 ext in node path (@robhuzzey) - #3119 Update © year (@wiinci) - #3107 pinned request dep to v2.81.0 (@
- #2908 Added 'request' as optional dependency. (@maxrd2) - #2955 Allow less imports of paths like 'dir/css' (@maxbrunsfeld) - #2975 Refactor LessErro
Nothing published for this version
- #2894 Update my name. (@nex3) - #2892 Fix invalid extraction of the host part from URL (@Taritsyn) - #2874 removed dependency to unused package "req
- #2827 Revert "Update jit-grunt to version 0.10.0" (@seven-phases-max) - #2821 Update jit-grunt to version 0.10.0 (@greenkeeperio-bot) - #2797 Disall
- #2788 Update license year in README.md (@prayagverma) - #2735 Fix for #2384 and caching enabled with modifyVars set (@less) - #2783 Allow unknown no
Nothing published for this version
- #2609 Skip missing optional imports (@mmelvin0) - #2644 percentage function should throw error if result would be NaN (@SomMeri) - #2646 Parametric
percentage function should throw error if result would be NaN (@SomMeri)version property from bower.json (@kkirsche)Fix problems with less being async in some browsers
Ruleset.prototype.find failing for certain frames (@seven-phases-max)supports the scoped @plugin directive to load function plugins
@plugin directive to load function plugins@import (css) does not pull the directive above comments% and replace (@seven-phases-max)@plugin scoping rules (@rjgotten)url imports (@seven-phases-max, @wahuneke, @bassjobsen)Support for plugins that pre-process (to add libraries silently etc.)
& now work better\r newlines now process ok (regression in 2.0.0)Fix depends option (regression in 2.3.0)
&) used in sub element expression (e.g. :not(.c_&))add optional import option, causing less to not fail if file not found
isruleset (@Justineo)deprecate the compression option (still works, but outputs a warning unless silent)
- Fix for use with requirejs - Fixes for data-uri function
Improved keyword and anonymous usage with the replace function
Fixed isSync option, it was using sync file operations but promises are guaranteed to call back async. We now support promises as a feature rather tha
Fixed multiplication in non strict units mode to take the left operand unit, in the case that the unit cannot be resolved
some refactoring of browser structure to allow use of api vs normal browser bundle browser bundle no longer leaks require browser can now be scoped wi
some refactoring of browser structure to allow use of api vs normal browser bundle browser bundle no longer leaks require browser can now be scoped with just window browser useFileCache defaults to true, but file cache is now cleared when refreshing or in watch mode
Imports are now sequenced and so are consistent (previously some complex projects might end up with occasional different orderings) Imports with varia
Imports are now sequenced and so are consistent (previously some complex projects might end up with occasional different orderings) Imports with variables are better supported - variables can be specified in sub imports Support for rebeccapurple Browser can now accept options as attributes on the script tag and the link tags e.g. <script data-verbose="false" src="less.js"... adding a .less file extension is done in the abstract file manager so it the behaviour can be overridden by certain file managers Fixed a bug where unquoted urls beginning // e.g. url(//file/file.less) would be incorrectly interpreted (bug introduced in b-1) lessc plugins can be a function, used as a constructor as well as an object - this to allow the plugin more flexibility to be used programattically
Public Beta / Release Candidate - Feedback welcome For a guide to breaking changes see the v2 upgrade guide no longer including old versions of less i…
Public Beta / Release Candidate - Feedback welcome For a guide to breaking changes see the v2 upgrade guide no longer including old versions of less in the repo or npm not including test less and gradle files in npm colours now output in the format they are added, so yellow will output yellow, not its hex counterpart better parsing - better comment support and comments in brackets can now contain comments including quotes. Removal of dependency on clean-css - install less-plugin-clean-css and use --clean-css to reference plugin Environment Support - less is now separate from its node and browser environment implementations and adding support for another javascript environment should be straight forward. Plugin Support - it is now straight forward to add AST manipulations (see less-plugin-inline-images), file managers (see less-plugin-npm-import) and post processors (see less-plugin-clean-css and less-plugin-autoprefix). We now recommend using less.render and using the parser directly is not in the same way as in v2. It is possible but it would require changes and we do not guarantee it will not be broken in minor version releases. In the browser, less.pageLoadFinished will be a promise, resolved when less has finished its initial processing. less.refresh and less.modifyVars also return promises. In the browser, as before less is used as options, however this is now copied to less.options if you need to access after less has run In the browser, the cache can be overwritten by setting less.cache before less loads. After load less.cache will be the default implementation. less.js now uses browserify to generate its browser side component default values for the sourcemap options have been re-done and improved to hopefully mean creating sourcemaps is easier Many smaller bugfixes and API changes. Please let us know if something you relied on has disappeared or an area should be better documented.
Allow comments in keyframe (complete comment support coming in 2.0) pass options to parser from less.render Support /deep/ combinator handle fragments
Allow comments in keyframe (complete comment support coming in 2.0) pass options to parser from less.render Support /deep/ combinator handle fragments in data-uri's float @charsets to the top correctly updates to some dependencies Fix interpolated import in media query A few other various small corrections
@* values (@seven-phases-max)…or malformed Do not use util.print to avoid deprecate warnings in node 0.11
Handle uppercase paths in browser Show error if an empty selector is used in extend Fix property merging in directives Fix ordering of charset and import directives Fix race condition that caused a rules is undefined error sometimes if you had a complex import strategy Better error message for imports missing semi-colons or malformed Do not use util.print to avoid deprecate warnings in node 0.11
Include dist files, missing from 1.7.2 Do not round the results of color functions, like lightness, hue, luma etc. Support cover and contain keywords
Include dist files, missing from 1.7.2 Do not round the results of color functions, like lightness, hue, luma etc. Support cover and contain keywords in background definitions
Fix detection of recursive mixins Fix the paths option for later versions of node (0.10+) Fix paths joining bug Fix a number precision issue on some v
Fix detection of recursive mixins Fix the paths option for later versions of node (0.10+) Fix paths joining bug Fix a number precision issue on some versions of node Fix an IE8 issue with importing css files Fix IE11 detection for xhr requests Modify var works if the last line of a less file is a comment. Better detection of valid hex colour codes Some stability fixes to support a low number of available file handles Support comparing values with different quote types e.g. "test" now === 'test' Give better error messages if accessing a url that returns a non 200 status code Fix the e() function when passed empty string Several minor bug fixes
Add support for rulesets in variables and passed to mixins to allow wrapping Change luma to follow the w3c spec, luma is available as luminance. Contr
Add support for rulesets in variables and passed to mixins to allow wrapping Change luma to follow the w3c spec, luma is available as luminance. Contrast still uses luma so you may see differences if your threshold % is close to the existing calculated luma. Upgraded clean css which means the --selectors-merge-mode is now renamed --compatibility Add support for using variables with @keyframes, @namespace, @charset Support property merging with +_ when spaces are needed and keep + for comma separated Imports now always import once consistently - a race condition meant previously certain configurations would lead to a different ordering of files Fix support for .mixin(@args...) when called with no args (e.g. .mixin();) Do unit conversions with min and max functions. Don't pass through if not understood, throw an error Allow % to be passed on its own to the unit function e.g. unit(10, %) Fix a bug when comparing a unit value to a non-unit value if the unit-value was the multiple of another unit (e.g. cm, mm, deg etc.) Fix mixins with media queries in import reference files not being put into the output (they now output, they used to incorrectly not) Fix lint mode - now reports all errors Fixed a small scope issue with & {} selector rulesets incorrectly making mixins visible - regression from 1.6.2 Browser - added log level "debug" at 3 to get less logging, The default has changed so unless you set the value to the default you won't see a difference Browser - logLevel takes effect regardless of the environment (production/dev) Browser - added postProcessor option, a function called to post-process the css before adding to the page Browser - use the right request for file access in IE
luma follow spec (@seven-phases-max, @lukeapage)replace and % funcs improvement. (@seven-phases-max)+_ (replaces #1788) (@seven-phases-max, @mouyang)Fix issue with calling toCSS twice not working in some situations (like with bootstrap 2)
Fix issue with calling toCSS twice not working in some situations (like with bootstrap 2)
The Rhino release is fixed! ability to use uppercase colours Fix a nasty bug causing syntax errors when selector interpolation is preceded by a long c
The Rhino release is fixed! ability to use uppercase colours Fix a nasty bug causing syntax errors when selector interpolation is preceded by a long comment (and some other cases) Fix a major bug with the variable scope in guards on selectors (e.g. not mixins) Fold in & when () { to the current selector rather than duplicating it fix another issue with array prototypes add a url-args option which adds a value to all urls (for cache busting) Round numbers to 8 decimal places - thereby stopping javascript precision errors some improvements to the default() function in more complex scenarios improved missing '{' and '(' detection
( and { error detection. (@seven-phases-max)default() guards conflict detection. (@seven-phases-max)support ^ and ^^ shadow dom selectors fix sourcemap selector (used to report end of the element or selector) and directive position (previously not su
support ^ and ^^ shadow dom selectors fix sourcemap selector (used to report end of the element or selector) and directive position (previously not supported) fix parsing empty less files error on (currently) ambiguous guards on multiple css selectors older environments - protect against typeof regex returning function Do not use default keyword use innerHTML in tests, not innerText protect for-in in case Array and Object prototypes have custom fields
Your coding agent can read these notes before it upgrades. Set up the MCP server →