NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4433 most downloaded on npm
The linux-x64 binary for sass-embedded
Last release 4 days ago
29 Sep 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
103 releases · first in 2022
One column per quarter.
Fully trim redundant selectors generated by @extend.
@extend.Support passing Version input for fatalDeprecations as string over embedded protocol.
Support passing Version input for fatalDeprecations as string over
embedded protocol.
Fix a bug in the JS Embedded Host where Version could be incorrectly accepted
as input for silenceDeprecations and futureDeprecations in pure JS.
Deprecation.duplicateVariableFlags has been deprecated and replaced with Deprecation.duplicateVarFlags to make it consistent with the duplicate-var-fl…
Deprecation.duplicateVariableFlags has been deprecated and replaced with
Deprecation.duplicateVarFlags to make it consistent with the
duplicate-var-flags name used on the command line and in the JS API.Don't emit deprecation warnings for functions and mixins beginning with __.
Don't emit deprecation warnings for functions and mixins beginning with __.
Allow user-defined functions whose names begin with _ and otherwise look
like vendor-prefixed functions with special CSS syntax.
Properly handle the --silence-deprecation flag.
Handle the --fatal-deprecation and --future-deprecation flags for
--interactive mode.
Fix a crash that could come up with importers in certain contexts.
*Don't* throw errors for at-rules in keyframe blocks.
Mixins and functions whose names begin with -- are now deprecated for forwards-compatibility with the in-progress CSS functions and mixins spec. This…
Throw errors for misplaced statements in keyframe blocks.
Mixins and functions whose names begin with -- are now deprecated for
forwards-compatibility with the in-progress CSS functions and mixins spec.
This deprecation is named css-function-mixin.
Fix a bug in which stylesheet canonicalization could be cached incorrectly when custom importers or the Node.js package importer made decisions based
importer to be passed without url in StringOptionsWithImporter.* No user-visible changes.
Support adjacent /s without whitespace in between when parsing plain CSS expressions.
Support adjacent /s without whitespace in between when parsing plain CSS
expressions.
Allow the Node.js pkg: importer to load Sass stylesheets for package.json
exports field entries without extensions.
When printing suggestions for variables, use underscores in variable names when the original usage used underscores.
pkg: imports with the Node.js package importer when
arguments are passed to the JavaScript process.Ship the musl Linux release with the proper Dart executable.
Export the NodePackageImporter class in ESM mode.
Allow NodePackageImporter to locate a default directory even when the
entrypoint is an ESM module.
NodePackageImporter() a static error rather
than just a runtime error.For more information about pkg: importers, see [the announcement][pkg-importers] on the Sass blog.
For more information about pkg: importers, see the
announcement on the Sass blog.
--pkg-importer flag to enable built-in pkg: importers. Currently
this only supports the Node.js package resolution algorithm, via
--pkg-importer=node. For example, @use "pkg:bootstrap" will load
node_modules/bootstrap/scss/bootstrap.scss.NodePackageImporter importer that can be passed to the importers
option. This loads files using the pkg: URL scheme according to the Node.js
package resolution algorithm. For example, @use "pkg:bootstrap" will load
node_modules/bootstrap/scss/bootstrap.scss. The constructor takes a single
optional argument, which indicates the base directory to use when locating
node_modules directories. It defaults to
path.dirname(require.main.filename).NodePackageImporter importer that can be passed to the importers
option. This loads files using the pkg: URL scheme according to the Node.js
package resolution algorithm. For example, @use "pkg:bootstrap" will load
node_modules/bootstrap/scss/bootstrap.scss. The constructor takes a single
argument, which indicates the base directory to use when locating
node_modules directories.Add a sass.initCompiler() function that returns a sass.Compiler object which supports compile() and compileString() methods with the same API as the g
Add a sass.initCompiler() function that returns a sass.Compiler object
which supports compile() and compileString() methods with the same API as
the global Sass object. On the Node.js embedded host, each sass.Compiler
object uses a single long-lived subprocess, making compiling multiple
stylesheets much more efficient.
Add a sass.initAsyncCompiler() function that returns a sass.AsyncCompiler
object which supports compileAsync() and compileStringAsync() methods with
the same API as the global Sass object. On the Node.js embedded host, each
sass.AsynCompiler object uses a single long-lived subprocess, making
compiling multiple stylesheets much more efficient.
Support the CompileRequest.silent field. This allows compilations with no
logging to avoid unnecessary request/response cycles.
The Dart Sass embedded compiler now reports its name as "dart-sass" rather
than "Dart Sass", to match the JS API's info field.
In the JS Embedded Host, properly install the x64 Dart Sass executable on ARM64 Windows.
Produce better output for numbers with complex units in meta.inspect() and debugging messages.
Produce better output for numbers with complex units in meta.inspect() and
debugging messages.
Escape U+007F DELETE when serializing strings.
When generating CSS error messages to display in-browser, escape all code points that aren't in the US-ASCII region. Previously only code points U+0100 LATIN CAPITAL LETTER A WITH MACRON were escaped.
Provide official releases for musl LibC and for Android.
Don't crash when running meta.apply() in asynchronous mode.
SourceSpans that didn't
follow the documented SourceSpan API.Compatibility with Node.js 21.0.0.
* No user-visible changes.
Fix TypeScript type locations in package.json.
package.json.Fix a bug where Sass crashed when running in the browser if there was a global variable named process.
process.* No user-visible changes.
Breaking change: As a consequence of the change in calculation parsing described above, calculation functions containing interpolation are now parsed…
All functions defined in CSS Values and Units 4 are now once again parsed as
calculation objects: round(), mod(), rem(), sin(), cos(), tan(),
asin(), acos(), atan(), atan2(), pow(), sqrt(), hypot(),
log(), exp(), abs(), and sign().
Unlike in 1.65.0, function calls are not locked into being parsed as
calculations or plain Sass functions at parse-time. This means that
user-defined functions will take precedence over CSS calculations of the same
name. Although the function names calc() and clamp() are still forbidden,
users may continue to freely define functions whose names overlap with other
CSS calculations (including abs(), min(), max(), and round() whose
names overlap with global Sass functions).
Breaking change: As a consequence of the change in calculation parsing
described above, calculation functions containing interpolation are now parsed
more strictly than before. However, almost all interpolations that would
have produced valid CSS will continue to work. The only exception is
#{$variable}% which is not valid in Sass and is no longer valid in
calculations. Instead of this, either use $variable directly and ensure it
already has the % unit, or write ($variable * 1%).
Potentially breaking bug fix: The importer used to load a given file is no longer used to load absolute URLs that appear in that file. This was unintented behavior that contradicted the Sass specification. Absolute URLs will now correctly be loaded only from the global importer list. This applies to the modern JS API, the Dart API, and the embedded protocol.
Fix a bug where Sass compilation could crash in strict mode if passed a callback that threw a string, boolean, number, symbol, or bignum.
Breaking change: Drop support for the additional CSS calculations defined in CSS Values and Units 4. Custom Sass functions whose names overlapped with…
Breaking change: Drop support for the additional CSS calculations defined in CSS Values and Units 4. Custom Sass functions whose names overlapped with these new CSS functions were being parsed as CSS calculations instead, causing an unintentional breaking change outside our normal [compatibility policy] for CSS compatibility changes.
Support will be added again in a future version, but only after Sass has emitted a deprecation warning for all functions that will break for at least three months prior to the breakage.
* No user-visible changes.
Fix a bug where a valid SassCalculation.clamp() with less than 3 arguments would throw an error.
SassCalculation.clamp() with less than 3 arguments
would throw an error.Fix a bug where nested relative @imports failed to load when using the deprecated functions render or renderSync and those relative imports were loade…
Comments that appear before or between @use and @forward rules are now
emitted in source order as much as possible, instead of always being emitted
after the CSS of all module dependencies.
Fix a bug where an interpolation in a custom property name crashed if the file
was loaded by a @use nested in an @import.
Add a new SassCalculation type that represents the calculation objects added
in Dart Sass 1.40.0.
Add Value.assertCalculation(), which returns the value if it's a
SassCalculation and throws an error otherwise.
Produce a better error message when an environment that supports some Node.js APIs loads the browser entrypoint but attempts to access the filesystem.
@imports failed to load when using the
deprecated functions render or renderSync and those relative imports were
loaded multiple times across different files.Fix import sass from 'sass' again after it was broken in the last release.
import sass from 'sass' again after it was broken in the last release.exports declaration in package.json.Fix a bug where loading the package through both CJS require() and ESM import could crash on Node.js.
require() and ESM
import could crash on Node.js.Fix a deadlock when running at high concurrency on 32-bit systems.
Fix a race condition where the embedded compiler could deadlock or crash if a compilation ID was reused immediately after the compilation completed.
Deprecate the use of multiple !global or !default flags on the same variable. This deprecation is named duplicate-var-flags.
Deprecate the use of multiple !global or !default flags on the same
variable. This deprecation is named duplicate-var-flags.
Allow special numbers like var() or calc() in the global functions:
grayscale(), invert(), saturate(), and opacity(). These are also
native CSS filter functions. This is in addition to number values which were
already allowed.
Fix a cosmetic bug where an outer rule could be duplicated after nesting was resolved, instead of re-using a shared rule.
Potentially breaking change: Drop support for End-of-Life Node.js 12.
Potentially breaking change: Drop support for End-of-Life Node.js 12.
Fix remaining cases for the performance regression introduced in 1.59.0.
Add support for the pi, e, infinity, -infinity, and NaN constants in calculations. These will be interpreted as the corresponding numbers.
Add support for the pi, e, infinity, -infinity, and NaN constants in
calculations. These will be interpreted as the corresponding numbers.
Add support for unknown constants in calculations. These will be interpreted as unquoted strings.
Serialize numbers with value infinity, -infinity, and NaN to calc()
expressions rather than CSS-invalid identifiers. Numbers with complex units
still can't be serialized.
Fix a performance regression introduced in 1.59.0.
Fix a performance regression introduced in 1.59.0.
The NPM release of 1.59.0 dropped support for Node 12 without actually indicating so in its pubspec. This release temporarily adds back support so that the latest Sass version that declares it supports Node 12 actually does so. However, Node 12 is now end-of-life, so we will drop support for it properly in an upcoming release.
* No user-visible changes.
* No user-visible changes.
Add a timestamp to messages printed in --watch mode.
Add a timestamp to messages printed in --watch mode.
Print better calc()-based suggestions for /-as-division expression that
contain calculation-incompatible constructs like unary minus.
* No user-visible changes.
The embedded compiler now supports version 1.2.0 of the embedded protocol.
Importer results now validate that contents is actually a string and whether sourceMapUrl is an absolute URL.
contents is actually a string and whether
sourceMapUrl is an absolute URL.Emit a deprecation warning for $a -$b and $a +$b, since these look like they could be unary operations but they're actually parsed as binary operation…
Potentially breaking bug fix: Sass numbers are now universally stored as 64-bit floating-point numbers, rather than sometimes being stored as integers. This will generally make arithmetic with very large numbers more reliable and more consistent across platforms, but it does mean that numbers between nine quadrillion and nine quintillion will no longer be represented with full accuracy when compiling Sass on the Dart VM.
Potentially breaking bug fix: Sass equality is now properly transitive.
Two numbers are now considered equal (after doing unit conversions) if they
round to the same 1e-11th. Previously, numbers were considered equal if they
were within 1e-11 of one another, which led to some circumstances where $a == $b and $b == $c but $a != $b.
Potentially breaking bug fix: Various functions in sass:math no longer
treat floating-point numbers that are very close (but not identical) to
integers as integers. Instead, these functions now follow the floating-point
specification exactly. For example, math.pow(0.000000000001, -1) now returns
1000000000000 instead of Infinity.
Emit a deprecation warning for $a -$b and $a +$b, since these look like
they could be unary operations but they're actually parsed as binary
operations. Either explicitly write $a - $b or $a (-$b). See
https://sass-lang.com/d/strict-unary for more details.
Add an optional argumentName parameter to SassScriptException() to make it
easier to throw exceptions associated with particular argument names.
Most APIs that previously returned num now return double. All APIs
continue to accept num, although in Dart 2.0.0 these APIs will be changed
to accept only double.
Fix an incorrect span in certain @media query deprecation warnings.
@media query deprecation warnings.* No user-visible changes.
Add support for 32-bit ARM releases on Linux.
Improve error messages when passing incorrect units that are also out-of-bounds to various color functions.
Your coding agent can read these notes before it upgrades. Set up the MCP server →