NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #1277 most downloaded on pub.dev
A Sass implementation in Dart.
Last release 8 days ago
29 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
358 releases · first in 2013
To install Sass 1.105.1, download one of the packages below and add it to your PATH , or see the Sass website for full installation instructions.
To install Sass 1.105.1, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.
@extends across different media queries.See the full changelog for changes in earlier releases.
To install Sass 1.105.0, download one of the packages below and add it to your PATH , or see the Sass website for full installation instructions.
One column per quarter.
To install Sass 1.105.0, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.
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.See the full changelog for changes in earlier releases.
Fix --watch not recompiling sources modified during a compilation (…
Fix --watch not recompiling sources modified during a compilation (…
To install Sass 1.104.1, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.
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.
See the full changelog for changes in earlier releases.
To install Sass 1.104.0, download one of the packages below and add it to your PATH , or see the Sass website for full installation instructions.
To install Sass 1.104.0, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.
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.
See the full changelog for changes in earlier releases.
To install Sass 1.103.1, download one of the packages below and add it to your PATH , or see the Sass website for full installation instructions.
To install Sass 1.103.1, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.
See the full changelog for changes in earlier releases.
To install Sass 1.103.0, download one of the packages below and add it to your PATH , or see the Sass website for full installation instructions.
To install Sass 1.103.0, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.
color.to-space(lch(50% none none), lab) now returns lab(50% none none) instead of lab(50% 0 0).See the full changelog for changes in earlier releases.
To install Sass 1.102.0, download one of the packages below and add it to your PATH , or see the Sass website for full installation instructions.
To install Sass 1.102.0, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.
See the full changelog for changes in earlier releases.
To install Sass 1.101.7, download one of the packages below and add it to your PATH , or see the Sass website for full installation instructions.
To install Sass 1.101.7, download one of the packages below and add it to your PATH, or see the Sass website for full installation instructions.
See the full changelog for changes in earlier releases.
* No user-visible changes.
* No user-visible changes.
Avoid emitting rgb() or rgba() functions with non-percent decimal channels. Older browsers only support integer values or (potentially decimal) percen
Avoid emitting rgb() or rgba() functions with non-percent decimal
channels. Older browsers only support integer values or (potentially decimal)
percentages for these functions, so in order to preserve
backwards-compatibility while retaining full precision for modern browsers,
legacy colors that contain at least one non-integer channel will now use
percentages for their channels (for example, rgb(0%, 100%, 50%) rather than
rgb(0, 255, 127.5)).
Fix a bug where the values of plain-CSS if() expressions were emitted using
their meta.inspect() format rather than their CSS serialization format.
* No user-visible changes.
Fix a bug where the deprecation warning for vendor-prefixed expression() functions would incorrectly indicate whether or not the function would be inv…
expression()
functions would incorrectly indicate whether or not the function would be
invalid Sass in Dart Sass 2.0.0.Potentially breaking bug fix: The Node package importer now properly supports resolving import-only variants of Sass files declared in the exports, sa
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.Writing two compound selectors adjacent to one another without any whitespace between them, such as [class]a, is now deprecated. This was always an er…
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.
…same names with some lowercase letters are now deprecated, These are names conflict with plain CSS functions that have special syntax.
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.
Properly emit deprecation warnings as text rather than StringBuffer objects when running in a browser.
--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.
Fix a bug where nesting an at-rule within multiple style rules in plain CSS could cause outer style rules to be omitted.
Additional fixes for implicit configuration when nested imports are involved.
Fix a bug with the new CSS-style if() syntax where values would be evaluated even if their conditions didn't match.
if() syntax where values would be evaluated
even if their conditions didn't match.Add support for the display-p3-linear color space.
display-p3-linear color space.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 the span reported for standalone % expressions followed by whitespace.
% expressions followed by whitespace.Using --fatal-deprecation no longer emits warnings about deprecations that are obsolete.
--fatal-deprecation <version> no longer emits warnings about
deprecations that are obsolete.Deprecation.forVersion now excludes obsolete deprecations from the set it
returns.fatalDeprecations when a Version is
passed.* No user-visible changes.
Potentially breaking compatibility fix: @function rules whose names begin with -- are now parsed as unknown at-rules to support the plain CSS @functio
Potentially breaking compatibility fix: @function rules whose names
begin with -- are now parsed as unknown at-rules to support the plain CSS
@function rule. Within this rule, the result property is parsed as raw
CSS just like custom properties.
Potentially breaking compatibility fix: @mixin rules whose names begin
with -- are now errors. These are not yet parsed as unknown at-rules because
no browser currently supports CSS mixins.
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.Allow newlines in whitespace in the indented syntax.
Allow newlines in whitespace in the indented syntax.
Potentially breaking bug fix: Selectors with unmatched brackets now always
produce a parser error. Previously, some edge cases like [foo#{"]:is(bar"}) {a: b} would compile without error, but this was an unintentional bug.
Fix a bug in which various Color Level 4 functions weren't allowed in plain CSS.
Fix the error message for @extend without a selector and possibly other
parsing edge-cases in contexts that allow interpolation.
SassBoolean type to adhere to the spec,
now using a class instead of an interface.* 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.
Your coding agent can read these notes before it upgrades. Set up the MCP server →