# What changed in sass

> 52 changes in sass 1 from its official release notes, upgrade guides and advisories: 6 breaking, 5 deprecations, 12 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/sass/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## sass 1

### Breaking changes

- Special values in colors now convert to 0 according to the CSS specification, which may affect compatibility. (1.104.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.104.0)
- Conversions now preserve analogous sets of missing color channels per the CSS spec, potentially changing conversion results. (1.103.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.103.0)
- Uses the 2.4 gamma transfer function for rec2020, matching the latest draft of CSS Color 4. (1.102.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.102.0)
- Legacy colors with non-integer channels now serialize channels as percentages in rgb() or rgba() functions to preserve browser compatibility and precision. (1.101.4) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.101.4)
- User-defined clamp functions are allowed and take precedence over the built-in function when unnamespaced. (1.99.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.99.0)
- Mixin rules whose names begin with -- now produce errors because browsers do not yet support CSS mixins. (1.94.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.94.0)

### Deprecations

- Writing two compound selectors without whitespace, such as [class]a, is deprecated because it was always an error in CSS. (1.100.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.100.0)
- Certain user-defined names resembling CSS functions are deprecated because they conflict with special CSS function syntax. (1.99.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.99.0)
- Calls to functions whose names use the -progid suffix are deprecated. (1.99.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.99.0)
- Calls to hyphenated expression and URL functions are deprecated when their parsing behavior will change in a future release. (1.99.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.99.0)
- The old Sass if() syntax is deprecated in favor of the new CSS syntax. (1.95.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.95.0)

### New APIs and options

- Sass now supports first-class modules that can be accessed and passed to sass:meta functions. (1.105.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.0)
- Adds a mixin that includes CSS from a first-class module. (1.105.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.0)
- Adds a function for accessing first-class modules. (1.105.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.0)
- Adds a function for accessing first-class modules. (1.105.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.0)
- Existing sass:meta functions can receive first-class modules through a new `$module` argument. (1.105.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.0)
- Adds a JavaScript API class representing Sass modules. (1.105.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.0)
- Adds a Dart API class representing Sass modules. (1.105.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.0)
- Adds a JavaScript API method for asserting that a value is a Sass module. (1.105.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.0)
- Adds a Dart API method for asserting that a value is a Sass module. (1.105.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.0)
- Parent selectors are supported at the document root and emitted as-is in CSS output. (1.99.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.99.0)
- Adds a const default logger that writes to standard error or the browser console and automatically selects terminal colors. (1.98.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.98.0)
- Sass now supports the display-p3-linear color space for color values. (1.97.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.97.0)

### Behavior and default changes

- Output files use compilation start time, ensuring watch and update modes recompile sources modified during compilation. (1.104.1) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.104.1)
- Negative zero is serialized as -0 instead of 0 in CSS calculations for greater compatibility. (1.104.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.104.0)
- User-defined calc functions are allowed and take precedence over the built-in function when unnamespaced. (1.99.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.99.0)
- User-defined functions with specified hyphenated suffixes are no longer forbidden. (1.99.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.99.0)
- Warnings and other messages now appear in color on the console when running in a browser. (1.98.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.98.0)
- Numbers with complex units are emitted to CSS as calc expressions, which support complex units in plain CSS. (1.96.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.96.0)
- attr() functions can now replace multiple arguments or syntax fragments in various CSS functions. (1.95.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.95.0)
- Plain-CSS if() functions can now be used as arguments to CSS color functions. (1.95.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.95.0)
- Plain-CSS if() functions can now replace multiple arguments or syntax fragments in various CSS functions. (1.95.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.95.0)
- Functions named with -- are parsed as unknown at-rules, and result is parsed as raw CSS to support plain CSS @function. (1.94.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.94.0)

### Fixes and other changes

- Fixes a deadlock when the async compiler fails to start. (1.105.2) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.2)
- Improves error messages for @extend rules across different media queries. (1.105.1) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.105.1)
- Reports a useful error instead of crashing when an invalid selector ends an indented syntax stylesheet. (1.104.1) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.104.1)
- Prevents loud comments before @use rules from being emitted multiple times. (1.104.1) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.104.1)
- Avoids recompiling output files inside the source directory, preventing an infinite recompilation loop. (1.104.1) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.104.1)
- Plain-CSS if() expression values are now emitted using CSS serialization rather than meta.inspect() formatting. (1.101.4) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.101.4)
- The Node package importer now resolves import-only Sass file variants declared in package.json exports, sass, and style fields when loaded via @import. (1.101.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.101.0)
- Deprecation warnings in browsers are now emitted as text instead of StringBuffer objects. (1.98.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.98.0)
- Fixes a crash when manually constructing a SassCalculation for calc with an argument that cannot be simplified. (1.98.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.98.0)
- Dependency loops in watch mode are now handled gracefully. (1.98.0) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.98.0)
- Fixes omitted outer style rules when nesting an at-rule within multiple style rules in plain CSS. (1.97.3) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.97.3)
- Additional fixes address implicit configuration when nested imports are involved. (1.97.2) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.97.2)
- Fixes CSS-style if() so values are not evaluated when their conditions do not match. (1.97.1) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.97.1)
- Fixes the span reported for standalone % expressions followed by whitespace. (1.94.3) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.94.3)
- Fixes a bug where a variable could be used before initialization during async compilation. (1.94.2) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.94.2)
- Now excludes obsolete deprecations from the returned set. (1.94.2) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.94.2)
- No longer emits warnings about deprecations that are obsolete when a version is specified. (1.94.2) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.94.2)
- Excludes obsolete deprecations when a Version is passed. (1.94.2) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.94.2)
- Fixed a performance regression introduced in Sass 1.92.0. (1.93.3) — [release notes](https://github.com/sass/dart-sass/releases/tag/1.93.3)
