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 5 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.
Improve error messages for @extends across different media queries.
@extends across different media queries.Add support for first-class modules. These can be accessed using the new meta.load() and meta.get-module() functions, and may be passed as the $module
Add support for first-class modules. These can be accessed using the new
meta.load() and meta.get-module() functions, and may be passed as the
$module argument to numerous eisting sass:meta functions.
Add the meta.css() mixin, which includes CSS from a first-class module.
SassModule class and a corresponding Value.assertModule() method.SassModule class and a corresponding Value.assertModule() method.Fix a bug where loud comments before @use rules could be emitted multiple times under certain circumstances.
Fix a bug where loud comments before @use rules could be emitted multiple
times under certain circumstances.
Fix a bug in which an invalid selector at the end of an indented syntax stylesheet would cause the parser to crash instead of emitting a useful error message.
Many-to-many compilations no longer compile any files that appear in the
output directory if the output directory is also within the source directory.
This fixes a bug where --watch mode could enter an infinite loop recompiling
the same CSS file over and over.
Sass now sets the modification time of output files to the time compilation
started rather than the time it ended. This ensures that, if a source file
is modified during compilation, --watch and --update mode will recompile
the outputs to include the new source file contents.
Potentially breaking compatibility fix: Colors now convert the special values NaN and negative zero, as well as infinity and negative infinity for pol
Potentially breaking compatibility fix: Colors now convert the special values NaN and negative zero, as well as infinity and negative infinity for polar-hue channels, to 0 as per the CSS spec.
The special value negative zero is now serialized as -0 instead of 0 for
greater compatibility when using it in CSS calculations.
* No user-visible changes.
Update Dart Sass version and release
Update Dart Sass version and release
Update Dart Sass version and release
Update Dart Sass version and release
exports, sass, and style fields of package.json. Previously, these
files were ignored even when loaded via @import, so any code relying on
loading module-system-only files this way may break.Update Dart Sass version and release
Update Dart Sass version and release
Writing two compound selectors adjacent to one another without any whitespace
between them, such as [class]a, is now deprecated. This was always an error
in CSS and Sass only supported it by mistake.
See the Sass website for details.
Update Dart Sass version and release
Update Dart Sass version and release
Add support for parent selectors (&) at the root of the document. These are
emitted as-is in the CSS output, where they're interpreted as the scoping
root.
User-defined functions named calc or clamp are no longer forbidden. If
such a function exists without a namespace in the current module, it will be
used instead of the built-in calc() or clamp() function.
User-defined functions whose names begin with - and end with -expression,
-url, -and, -or, or -not are no longer forbidden. These were
originally intended to match vendor prefixes, but in practice no vendor
prefixes for these functions ever existed in real browsers.
User-defined functions named EXPRESSION, URL, and ELEMENT, those that
begin with - and end with -ELEMENT, as well as the same names with some
lowercase letters are now deprecated, These are names conflict with plain CSS
functions that have special syntax.
See the Sass website for details.
In a future release, calls to functions whose names begin with - and end
with -expression and -url will no longer have special parsing. For now,
these calls are deprecated if their behavior will change in the future.
See the Sass website for details.
Calls to functions whose names begin with - and end with -progid:... are
deprecated.
See the Sass website for details.
Update Dart Sass version and release
Update Dart Sass version and release
--watch mode.const Logger.defaultLogger field. This provides a logger that emits to
standard error or the browser console, but automatically chooses whether to
use terminal colors.Fix a crash when manually constructing a SassCalculation for 'calc' with
an argument that can't be simplified.
Properly emit deprecation warnings as text rather than StringBuffer objects
when running in a browser.
Emit colored warnings and other messages on the console when running in a browser.
Update Dart Sass version and release
Update Dart Sass version and release
Update Dart Sass version and release
Update Dart Sass version and release
Update Dart Sass version and release
Update Dart Sass version and release
if() syntax where values would be evaluated
even if their conditions didn't match.Update Dart Sass version and release
Update Dart Sass version and release
Allow numbers with complex units (more than one numerator unit or more than zero denominator units) to be emitted to CSS. These are now emitted as cal
calc() expressions, which now support complex units in plain CSS.* No user-visible changes.
The old Sass if() syntax is now deprecated. Users are encouraged to migrate to the new CSS syntax. if($condition, $if-true, $if-false) can be changed…
Add support for the CSS-style if() function. In addition to supporting the
plain CSS syntax, this also supports a sass() query that takes a Sass
expression that evaluates to true or false at preprocessing time depending
on whether the Sass value is truthy. If there are no plain-CSS queries, the
function will return the first value whose query returns true during
preprocessing. For example, if(sass(false): 1; sass(true): 2; else: 3)
returns 2.
The old Sass if() syntax is now deprecated. Users are encouraged to migrate
to the new CSS syntax. if($condition, $if-true, $if-false) can be changed to
if(sass($condition): $if-true; else: $if-false).
See the Sass website for details.
Plain-CSS if() functions are now considered "special numbers", meaning that
they can be used in place of arguments to CSS color functions.
Plain-CSS if() functions and attr() functions are now considered "special
variable strings" (like var()), meaning they can now be used in place of
multiple arguments or syntax fragments in various CSS functions.
Fix a performance regression that was introduced in 1.92.0.
Fix another error in the release process for @sass/types.
@sass/types.Fix an error in the release process for @sass/types.
@sass/types.Fix a crash when a style rule contains a nested @import, and the loaded file @uses a user-defined module as well as @includes a top-level mixin which
@import, and the loaded file
@uses a user-defined module as well as @includes a top-level mixin which
emits top-level declarations.@sass/types package which contains the type annotations used by
both the sass and sass-embedded package without any additional code or
dependencies.Fix a bug where variable definitions from one imported, forwarded module would not be passed as implicit configuration to a later imported, forwarded
Breaking change: Emit declarations, childless at-rules, and comments in the order they appear in the source even when they're interleaved with nested…
Breaking change: Emit declarations, childless at-rules, and comments in
the order they appear in the source even when they're interleaved with nested
rules. This obsoletes the mixed-decls deprecation.
Breaking change: The function name type() is now fully reserved for the
plain CSS function. This means that @function definitions with the name
type will produce errors, while function calls will be parsed as special
function strings.
Configuring private variables using @use ... with, @forward ... with, and
meta.load-css(..., $with: ...) is now deprecated. Private variables were
always intended to be fully encapsulated within the module that defines them,
and this helps enforce that encapsulation.
Fix a bug where @extend rules loaded through a mixture of @import and
@use rules could fail to apply correctly.
--watch mode, delete the source map when the associated source file is
deleted.Potentially breaking change: meta.inspect() (as well as other systems that use it such as @debug and certain error messages) now emits numbers with as…
Potentially breaking change: meta.inspect() (as well as other systems
that use it such as @debug and certain error messages) now emits numbers
with as high precision as is available instead of rounding to the nearest
1e⁻¹⁰ as we do when serializing to CSS. This better fits the purpose of
meta.inspect(), which is to provide full information about the structure of
a Sass value.
Passing a rest argument ($arg...) before a positional or named argument when
calling a function or mixin is now deprecated. This was always outside the
specified syntax, but it was historically treated the same as passing the rest
argument at the end of the argument list whether or not that matched the
visual order of the arguments.
Allow a @forwarded module to be loaded with a configuration when that module has already been loaded with a different configuration *and* the module d
@forwarded module to be loaded with a configuration when that module
has already been loaded with a different configuration and the module
doesn't define any variables that would have been configured anyway.Fixed a compilation error caused by an outdated buf dependency.
buf dependency.* No user-visible changes.
Allow the Node package importer to load files even when there are multiple potential resolutions, as long as those resolutions all point to the same f
Deprecate passing a relative URL to compileString() and related functions.
Allow custom properties with empty values (such as --var:;).
Fix a bug when calculating source spans for interpolations.
compileString() and related functions.Potentially breaking bug fix: When a plain CSS file with a top-level nesting selector & is loaded into a nested Sass context via meta.load-css() or @i
& is loaded into a nested Sass context via
meta.load-css() or @import, Sass now emits plain CSS nesting rather than
incorrectly combining it with the parent selector using a descendant
combinator.Fix a bug introduced in 1.86.1 where Sass fails to resolve paths starting with a .. segment.
.. segment.* No user-visible changes.
Improve the performance of file: URL case canonicalization on Windows and Mac OS.
file: URL case canonicalization on Windows and
Mac OS.Deprecate user-defined functions named type() so that we can eventually support the new CSS type() function.
Add support for % as an expression in its own right. It will still be parsed
as the modulo operator when between two other expressions, but in any other
context it will be an expression whose value is the unquoted string %.
Consider attr() to be a special number function that can be used as a
channel in color functions.
Deprecate user-defined functions named type() so that we can eventually
support the new CSS type() function.
Fix a bug where global Sass functions whose names overlap with CSS math functions could incorrectly be treated as CSS math functions even though they
round(-$var / 2) previously threw an error but now works as intended.No longer fully trim redundant selectors generated by @extend. This caused unacceptable performance issues for certain heavy users of @extend. We'll t
@extend. This caused
unacceptable performance issues for certain heavy users of @extend. We'll
try to find a more performant way to accomplish it in the future.* No user-visible changes.
* No user-visible changes.
Properly display deprecation IDs for the JS Sass API.
Properly display deprecation IDs for the JS Sass API.
Don't display deprecation IDs for user-defined deprecations.
Include deprecation IDs in deprecation warnings to make it easier to determine what to pass to --silence-deprecation or --fatal-deprecation.
Fix a bug where --quiet-deps would get deactivated for @content blocks,
even when those blocks were entirely contained within dependencies.
Include deprecation IDs in deprecation warnings to make it easier to determine
what to pass to --silence-deprecation or --fatal-deprecation.
Allow trailing commas in *all* argument and parameter lists.
Improve --watch mode reliability when making multiple changes at once, such as checking out a different Git branch.
Improve --watch mode reliability when making multiple changes at once, such
as checking out a different Git branch.
Parse the calc-size() function as a calculation now that it's supported in
some browsers.
SassCalculation.calcSize() function.* No user-visible changes.
Fix a few cases where deprecation warnings weren't being emitted for global built-in functions whose names overlap with CSS calculations.
Fix a few cases where deprecation warnings weren't being emitted for global built-in functions whose names overlap with CSS calculations.
Add support for the CSS round() calculation with a single argument, as long
as that argument might be a unitless number.
Don't treat 0 as undefined for the green and blue channels in the LegacyColor constructor.
0 as undefined for the green and blue channels in the
LegacyColor constructor.Make @parcel/watcher an optional dependency so this can still be installed on operating systems where it's unavailable.
@parcel/watcher an optional dependency so this can still be installed
on operating systems where it's unavailable.Don't produce phantom @import deprecations when using an importer with the legacy API.
@import deprecations when using an importer with the
legacy API.* No user-visible changes.
…to flags like --quiet, --verbose, and --silence-deprecation.
Fix a bug where @import url("...") would crash in plain CSS files.
Improve consistency of how warnings are emitted by different parts of the
compiler. This should result in minimal user-visible changes, but different
types of warnings should now respond more reliably to flags like --quiet,
--verbose, and --silence-deprecation.
Fix a bug where deprecation warnings were incorrectly emitted for the plain-CSS invert() function.
invert() function.Fix a bug where repeated deprecation warnings were not automatically limited.
@import is now officially deprecated, as are global built-in functions that are available within built-in modules. See [the Sass blog post] for more d…
@import is now officially deprecated, as are global built-in functions that
are available within built-in modules. See the Sass blog post for more
details on the deprecation process.Fix a bug where Sass would add an extra */ after loud comments with whitespace after an explicit */ in the indented syntax.
Fix a bug where Sass would add an extra */ after loud comments with
whitespace after an explicit */ in the indented syntax.
Potentially breaking bug fix: Adding text after an explicit */ in the
indented syntax is now an error, rather than silently generating invalid CSS.
SassBoolean type.Changes to how selector.unify() and @extend combine selectors:
Changes to how selector.unify() and @extend combine selectors:
The relative order of pseudo-classes (like :hover) and pseudo-elements
(like ::before) within each original selector is now preserved when
they're combined.
Pseudo selectors are now consistently placed at the end of the combined selector, regardless of which selector they came from. Previously, this reordering only applied to pseudo-selectors in the second selector.
Tweak the color transformation matrices for OKLab and OKLCH to match the newer, more accurate values in the CSS spec.
Fix a slight inaccuracy case when converting to srgb-linear and
display-p3.
Potentially breaking bug fix: math.unit() now wraps multiple denominator
units in parentheses. For example, px/(em*em) instead of px/em*em.
@parcel/watcher to watch the filesystem when running from JavaScript and
not using --poll. This should mitigate more frequent failures users have
been seeing since version 4.0.0 of Chokidar, our previous watching tool, was
released.SassColor.interpolate() to allow an undefined options parameter, as
the types indicate.Fix a bug where passing green or blue to color.change() for legacy colors would fail.
green or blue to color.change() for legacy
colors would fail.Update the $channel parameter in the suggested replacement for color.red(), color.green(), color.blue(), color.hue(), color.saturation(), color.lightn
$channel parameter in the suggested replacement for
color.red(), color.green(), color.blue(), color.hue(),
color.saturation(), color.lightness(), color.whiteness(), and
color.blackness() to use a quoted string.Update deprecation warnings for the legacy JS API to include a link to [relevant documentation].
Add a $space parameter to the suggested replacement for color.red(),
color.green(), color.blue(), color.hue(), color.saturation(),
color.lightness(), color.whiteness(), and color.blackness().
Update deprecation warnings for the legacy JS API to include a link to relevant documentation.
* No user-visible changes.
The meta.feature-exists function is now deprecated. This deprecation is named feature-exists.
The meta.feature-exists function is now deprecated. This deprecation is
named feature-exists.
Fix a crash when using @at-root without any queries or children in the
indented syntax.
Backport the deprecation options (fatalDeprecations, futureDeprecations,
and silenceDeprecations) to the legacy JS API. The legacy JS API is itself
deprecated, and you should move off of it if possible, but this will allow
users of bundlers and other tools that are still using the legacy API to
still control deprecation warnings.
Fix a bug where accessing SourceSpan.url would crash when a relative URL was
passed to the Sass API.
Explicitly expose a sass executable from the sass-embedded npm package.
This was intended to be included in 1.63.0, but due to the way
platform-specific dependency executables are installed it did not work as
intended. Now users can run npx sass for local installs or just sass when
sass-embedded is installed globally.
Add linux-riscv64, linux-musl-riscv64, and android-riscv64 support for the
sass-embedded npm package.
Fix an edge case where the Dart VM could hang when shutting down when requests were in flight.
Fix a race condition where the embedded host could fail to shut down if it was closed around the same time a new compilation was started.
Fix a bug where parse-time deprecation warnings could not be controlled by the deprecation options in some circumstances.
* No user-visible changes.
Your coding agent can read these notes before it upgrades. Set up the MCP server →