NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2890 most downloaded on npm
A mighty CSS linter that helps you avoid errors and enforce conventions.
Last release 4 days ago
01 Oct 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
12 years old
283 releases · first in 2014
It fixes 2 bugs in the layout-mappings rules. This will likely be the last 17.x release, as we prepare for 18.0.0 .
It fixes 2 bugs in the layout-mappings rules. This will likely be the last 17.x release, as we prepare for 18.0.0.
It adds 1 new rule and 2 new rule options, and fixes 4 bugs.
It adds 1 new rule and 2 new rule options, and fixes 4 bugs.
selector-no-unmatchable rule (#9451) (@jeddy3).ignoreFunctions: [] to color-named and color-no-hex (#9463) (@jsmitty12).custom-property-no-missing-var-function false positives for anchor positioning (#9466) (@giaBaoJS).declaration-block-no-redundant-longhand-properties autofix for font shorthand (#9402) (@sarathfrancis90).declaration-property-max-values false positives for interpolated inline expressions (#9437) (@alexchen-sys).selector-no-invalid false negatives for pseudo-elements, combinators and nested :has() (#9452) (@jeddy3).One column per quarter.
Fixed: quiet option suppresses report* warning reports ( #9387 ) ( @ychampion ).
It fixes 4 bugs.
quiet option suppresses report* warning reports (#9387) (@ychampion).declaration-block-no-redundant-longhand-properties autofix producing invalid background shorthand when background-size is present (#9364) (@sarathfrancis90).rule-empty-line-before false positives for shared-line comments with except: ["after-single-line-comment"] (#9394) (@sarathfrancis90).It fixes 3 bugs, including a false negative one.
It fixes 3 bugs, including a false negative one.
It fixes 3 bugs, including a false negative one.
It fixes 3 bugs, including a false negative one.
declaration-block-no-duplicate-properties false negatives for interleaved non-consecutive duplicates with ignore: ["consecutive-duplicates(-*)"] (#9324) (@sarathfrancis90).selector-max-type false positives for nested selectors (#9319) (@romainmenke).selector-type-no-unknown false positives for install (#9308) (@Mouvedia).It fixes 3 bugs, including a false negative one.
It fixes 3 bugs, including a false negative one.
block-no-empty reported range when using comments (#9294) (@romainmenke).declaration-property-value-no-unknown false negatives for custom properties defined in reference files (#9292) (@romainmenke).value-keyword-layout-mappings false positives for caption-side (#9293) (@romainmenke).Fixed: node_modules ignore for codeFilename paths containing a dot-prefixed directory ( #9282 ) ( @tuhtah ).
It fixes 2 bugs.
node_modules ignore for codeFilename paths containing a dot-prefixed directory (#9282) (@tuhtah).declaration-block-no-redundant-longhand-properties range for contiguous redundant longhand properties (#9273) (@pamelalozano16).It adds 2 features, including a loader property to referenceFiles: {} for when the order of appearance in the reference styles matters.
It adds 2 features, including a loader property to referenceFiles: {} for when the order of appearance in the reference styles matters.
loader to experimental referenceFiles: {} (#9251) (@romainmenke).autofixed to the result object (#8771) (@Rob--W).It adds 3 rules and fixes 4 bugs. You can use the *-layout-mappings rules to enforce logical or physical properties, units and keywords.
It adds 3 rules and fixes 4 bugs. You can use the *-layout-mappings rules to enforce logical or physical properties, units and keywords.
selector-no-invalid rule (#9232) (@jeddy3).unit-layout-mappings rule (#9229) (@jeddy3).value-keyword-layout-mappings rule (#9233) (@jeddy3).property-layout-mappings false negatives for property names in declaration values (#9222) (@jeddy3).property-layout-mappings false positives for @page properties (#9223) (@jeddy3).selector-pseudo-class-no-unknown false positives for nested webkit-scrollbar part (#9259) (@rkdfx).Fixed: property-no-deprecated autofix for page-break-*: always ( #9214 ) ( @rkdfx ).
It fixes 4 bugs. We also documented the messageArgs each rule provides to the message configuration property.
ConfigurationError regression for custom syntaxes (#9245) (@jeddy3).property-no-deprecated autofix for page-break-*: always (#9214) (@rkdfx).selector-no-deprecated false positives for ::part() (#9227) (@SaekiTominaga).It adds 3 new features. Adding the referenceFiles property to your configuration object makes the no-unknown-animations , no-unknown-custom-media and
It adds 3 new features. Adding the referenceFiles property to your configuration object makes the no-unknown-animations, no-unknown-custom-media and no-unknown-custom-properties rules more useful.
referenceFiles to configuration object (#9179) (@jeddy3).abortSignal option to Node.js API for cancellation support (#9213) (@adalinesimonian).maxWarnings to configuration object (#9181) (@mrginglymus).Added: selector-no-deprecated rule (#8694) (@immitsu).
It adds 3 new rules and 1 configuration property.
languageOptions.directionality configuration property (#8687) (@sw1tch3roo).property-layout-mappings rule (#8687) (@sw1tch3roo).relative-selector-nesting-notation rule (#8730) (@sw1tch3roo).selector-no-deprecated rule (#8694) (@immitsu).It fixes 4 bugs, including clearer problem messages by removing filler words and leading with the problem. We've also released 1.0.0 of create-styleli
It fixes 4 bugs, including clearer problem messages by removing filler words and leading with the problem. We've also released 1.0.0 of create-stylelint to help with first-time Stylelint setup.
--print-config CLI flag to hide internal properties (#9194) (@ybiquitous).function-url-quotes false positives when URLs have modifiers (#8702) (@immitsu).selector-no-qualifying-type false positives for :has() (#9182) (@romainmenke).It adds support for extending units in languageOptions, which then apply to rules like declaration-property-value-no-unknown, and fixes 2 bugs.
It adds support for extending units in languageOptions, which then apply to rules like declaration-property-value-no-unknown, and fixes 2 bugs.
languageOptions (#9166) (@jeddy3).ruleMetadata when linting multiple files with overrides (#9154) (@kovsu).custom-property-no-missing-var-function false positives for timeline-scope and animation-timeline (#9164) (@splincode).It deprecates two rule options, adds 1 rule option and fixes 7 bugs. We've also released `2.1.0` of our VS Code extension, which adds 8 new requested…
It deprecates two rule options, adds 1 rule option and fixes 7 bugs. We've also released 2.1.0 of our VS Code extension, which adds 8 new requested features, and our first release of the Stylelint Language Server.
*syntax options from declaration-property-value-no-unknown (#9102) (@ragini-pandey).ignoreMediaFeatureNameValues: {} to media-feature-name-value-no-unknown (#8976) (@kovsu).node_modules not ignored when using codeFilename in Node.js API (#9130) (@adalinesimonian).Error TS7016 for imported css-tree types (#9133) (@ragini-pandey).declaration-property-value-keyword-no-deprecated false positives for function arguments (#9116) (@ragini-pandey).declaration-property-value-no-unknown false positives for calc-size() containing size keyword (#9105) (@hriztam).no-descending-specificity & no-duplicate-selectors false negatives for equivalent compound selectors (#8977) (@kovsu).no-invalid-position-declaration false positives for @mixin and @scope (#9120) (@ragini-pandey).property-no-unknown false negatives for types (#9117) (@Mouvedia).It adds 2 options to the rules and fixes 7 bugs.
It adds 2 options to the rules and fixes 7 bugs.
ignoreAtRules: [] to at-rule-no-vendor-prefix (#9096) (@theacrat).ignoreMediaFeatureNames: [] to media-feature-name-no-vendor-prefix (#9097) (@theacrat).*-empty-line-before performance (#9092) (@jeddy3).declaration-property-value-no-unknown performance (#9090) (@jeddy3).no-irregular-whitespace performance (#9091) (@jeddy3).property-no-unknown false negatives for at-rule descriptors (#9109) (@jeddy3).property-no-unknown false positives for corner-shape (#9099) (@jeddy3).property-no-unknown false positives for double-slashed properties (#9099) (@jeddy3).Fixed: declaration-property-value-keyword-no-deprecated performance (#9058) (@jeddy3).
It fixes 17 bugs. 3 related to supporting calc() in declaration-property-value-no-unknown, and 13 performance ones that make Stylelint a further 3x faster when using the rules in our standard config.
*-list performance (#9056) (@jeddy3).*-notation performance (#9044) (@jeddy3).declaration-property-max-values performance (#9057) (@jeddy3).declaration-property-value-keyword-no-deprecated performance (#9058) (@jeddy3).declaration-property-value-no-unknown false negatives for math functions inside of non-math functions (#9064) (@romainmenke).declaration-property-value-no-unknown false positives for calc() with mixed operations (#9064) (@romainmenke).declaration-property-value-no-unknown performance (#9062) (@jeddy3).declaration-property-value-no-unknown reported ranges for multiple math functions (#9064) (@romainmenke).length-zero-no-unit performance (#9046) (@jeddy3).named-grid-areas-no-invalid false positives for mix of tabs and spaces (#9039) (@adalinesimonian).no-unknown-custom-media performance (#9059) (@jeddy3).selector-max-* performance (#9042) (@jeddy3).shorthand-property-no-redundant-values performance (#9047) (@jeddy3).syntax-string-no-invalid performance (#9061) (@jeddy3).time-min-milliseconds performance (#9060) (@jeddy3).value-keyword-case performance (#9048) (@jeddy3).It fixes 7 bugs, including 5 performance ones that make Stylelint 7x faster and use 3x less memory on larger codebases such as design systems and mono
It fixes 7 bugs, including 5 performance ones that make Stylelint 7x faster and use 3x less memory on larger codebases such as design systems and monorepos. We also restructured our docs to create a contributor guide. If you'd like to help out and contribute to Stylelint, that's the place to start.
declaration-property-value-no-unknown false negatives for math functions (#9011) (@ragini-pandey).no-duplicate-selectors false negatives for matching escaped selectors (#8953) (@bjnewman).no-invalid-position-at-import-rule false negatives for layers with blocks (#9026) (@romainmenke).Fixed: resolution of configs, plugins, processors, and custom syntaxes in Yarn PnP environments (#9010) (@adalinesimonian).
It fixes 2 bugs.
lightness-notation autofix for decimals (#9009) (@IlyaSemenov).It fixes 5 bugs and adds the display-notation rule. Before we turn it on in our standard config, we'd like to hear the community's thoughts on which o
It fixes 5 bugs and adds the display-notation rule. Before we turn it on in our standard config, we'd like to hear the community's thoughts on which options to use.
display-notation rule (#8981) (@romainmenke).GlobbyOptions TypeScript errors (#8992) (@zalishchuk).hue-degree-notation false negatives and positives for relative colors (#8985) (@jamesnw).lightness-notation false negatives for relative colors (#8987) (@jamesnw).selector-type-no-unknown false positives for geolocation and usermedia (#9004) (@Mouvedia).selector-type-no-unknown false positives for rb, rtc and menuitem (#8972) (@Mouvedia).It contains 14 breaking changes, which we've detailed in the migrating to `17.0.0` guide. Additionally, it adds 3 options to the rules and fixes 9 bug…
It contains 14 breaking changes, which we've detailed in the migrating to 17.0.0 guide. Additionally, it adds 3 options to the rules and fixes 9 bugs. We've also released compatible versions of our shared config, Visual Studio Code extension, Node.js Rule Tester and Jest preset.
output property in the Node.js API returned resolved object (#8878) (@jeddy3).resolveNestedSelectors option from selector-class-pattern (#8931) (@jeddy3).checkContextFunctionalPseudoClasses option from selector-max-id (#8913) (@jeddy3).fix mode to strict (#8889) (@jeddy3).report to be consistent and predictable in how it handles the provided position arguments (#8217) (@romainmenke).selector-max-* syntax rules for standard CSS nesting and modern functional pseudo-classes (#8913) (@jeddy3).*-specificity semantic rules for standard CSS nesting (#8913) (@jeddy3).no-duplicate-selectors and selector-no-qualifying-type for standard CSS nesting (#8913) (@jeddy3).*-list rules to have consistent behaviour for vendor prefixes and case (#8912) (@jeddy3).*-no-vendor-prefix rules to have consistent behaviour for their ignore*: [] secondary options (#8924) (@jeddy3).declaration-property-max-values rule to have consistent behaviour for vendor prefixes (#8926) (@jeddy3).except: ["after-block"] to custom-property-empty-line-before (#8921) (@kovsu).except: ["after-block"] to declaration-empty-line-before (#8910) (@kovsu).ignoreSelectors: [] to no-duplicate-selectors (#8883) (@kovsu).at-rule-descriptor-no-unknown false positives for declarations within feature-value-blocks (#8868) (@kovsu).declaration-block-no-redundant-longhand-properties false negatives for short and long combinations (#8892) (@nathannewyen).media-feature-name-no-unknown false positives for namespaced dollar variables and range context queries (#8890) (@kovsu).nesting-selector-no-missing-scoping-root false positives for CSS-in-JS (#8905) (@kovsu).no-invalid-position-declaration false negatives for embedded blocks (#8907) (@kovsu).selector-no-qualifying-type false negatives for :is/where() (#8940) (@romainmenke).selector-type-no-unknown false positives for MathML 4 tags (#8874) (@jeddy3).It fixes numerous false positive bugs, including many in the declaration-property-value-no-unknown rule for the latest CSS specifications.
It fixes numerous false positive bugs, including many in the declaration-property-value-no-unknown rule for the latest CSS specifications.
*-no-unknown false positives for latest specs by integrating @csstools/css-syntax-patches-for-csstree (#8850) (@romainmenke).at-rule-no-unknown false positives for @function (#8851) (@jeddy3).declaration-property-value-no-unknown false positives for attr(), if() and custom functions (#8853) (@jeddy3).function-url-quotes false positives when URLs require quoting (#8804) (@taearls).selector-pseudo-element-no-unknown false positives for ::scroll-button() (#8856) (@Mouvedia).It adds 1 feature and fixes 2 bugs.
It adds 1 feature and fixes 2 bugs.
customSyntax with function export (#8834) (@silverwind).custom-property-no-missing-var-function false positives for style query in if() function (#8813) (@sajdakabir).media-feature-range-notation false positives for multiple queries and except: exact-value (#8832) (@jeddy3).It adds 3 new features, including experimental support for bulk suppressions. It's also our first immutable release, with the package published to npm
It adds 3 new features, including experimental support for bulk suppressions. It's also our first immutable release, with the package published to npm using trusted publishing and our dependencies updated on a cool down for improved supply chain security.
ignoreAtRules: [] to no-invalid-position-declaration (#8781) (@jrmlt).It adds 1 new rule, adds 1 option to a rule and fixes 2 bugs.
It adds 1 new rule, adds 1 option to a rule and fixes 2 bugs.
rule-nesting-at-rule-required-list rule (#8680) (@sw1tch3roo).ignoreAtRules: [] to nesting-selector-no-missing-scoping-root (#8743) (@karlhorky).function-no-unknown false positives for contrast-color() and sibling-*() (#8729) (@Mouvedia).selector-pseudo-class-no-unknown false positives for :heading (#8749) (@Mouvedia).Fixed: property-no-deprecated erroneously autofixing clip (#8699) (@immitsu).
It fixes 7 bugs.
no-invalid-position-declaration false positives for embedded styles (#8701) (@sw1tch3roo).property-no-deprecated erroneously autofixing clip (#8699) (@immitsu).property-no-deprecated false positives for -webkit-box-orient: vertical; (#8699) (@immitsu).selector-pseudo-*-no-unknown false positives for some meter pseudo classes/elements (#8708) (@Mouvedia).selector-pseudo-class-no-unknown false positives for :unchecked (#8705) (@Mouvedia).selector-pseudo-element-no-unknown false positives for ::search-text (#8707) (@Mouvedia).selector-type-no-unknown false positives for selectedcontent (#8716) (@Mouvedia).Added: media-type-no-deprecated rule (#8668) (@immitsu).
It adds 5 new rules, 1 option to a rule and fixes 3 bugs. We've turned on the new rules in our standard config.
block-no-redundant-nested-style-rules rule (#8684) (@sw1tch3roo).media-type-no-deprecated rule (#8668) (@immitsu).nesting-selector-no-missing-scoping-root rule (#8674) (@sw1tch3roo).no-invalid-position-declaration rule (#8669) (@sw1tch3roo).property-no-deprecated rule (#8682) (@immitsu).except: ["exact-value"] to media-feature-range-notation (#8675) (@immitsu).declaration-block-no-duplicate-properties false negatives for named colors with ignore: ['consecutive-duplicates-with-different-syntaxes'] (#8665) (@sw1tch3roo).function-no-unknown false positives (#8677) (@Mouvedia).no-irregular-whitespace false positives for strings (#8667) (@immitsu).Added: messageArgs to declaration-property-value-keyword-no-deprecated (#8654) (@Mouvedia).
It adds 3 rule features and fixes 2 bugs.
messageArgs to color-named (#8663) (@Mouvedia).messageArgs to declaration-property-value-keyword-no-deprecated (#8654) (@Mouvedia).no-descending-specificity report message includes line number of the anchoring selector (#8666) (@immitsu).at-rule-no-deprecated false positives for @apply (#8630) (@Mouvedia).lightness-notation crash with "number" option and single-digit percentage (#8661) (@ybiquitous).Fixed: unexpected change of syntax in computed EditInfo (#8638) (@romainmenke).
It fixes 3 bugs.
EditInfo (#8638) (@romainmenke).function-linear-gradient-no-nonstandard-direction false positives for CSS variables' names containing a direction substring (#8643) (@Solomon-mithra).media-feature-range-notation autofix for exact values (#8651) (@romainmenke).It rounds out the message secondary option and marks it as stable, adds 1 new option to a rule, and fixes 4 bugs.
It rounds out the message secondary option and marks it as stable, adds 1 new option to a rule, and fixes 4 bugs.
message secondary option (#8595) (@ybiquitous).ignore: ["after-custom-property"] to custom-property-empty-line-before (#8627) (@imkesin).cache configuration property not being respected (#8599) (@ybiquitous).fastest-levenshtein import when bundling (#8621) (@onigoetz).named-grid-areas-no-invalid false positives for interpolated grid-template-areas in CSS-in-JS (#8606) (@shahana308).selector-pseudo-*-no-unknown false positives for the missing form control styling selectors (#8623) (@tyrann0us).It fixes 2 bugs with the built-in rules.
It fixes 2 bugs with the built-in rules.
function-url-no-scheme-relative false negatives for @import (#8576) (@pamelalozano16).shorthand-property-no-redundant-values false negatives for additional radius (#8539) (@ryo-manba).It fixes 1 bug with the no-empty-source rule.
It fixes 1 bug with the no-empty-source rule.
no-empty-source false positives for non-standard syntaxes (#8548) (@ybiquitous).It adds 2 options to 2 rules and fixes 3 bugs.
It adds 2 options to 2 rules and fixes 3 bugs.
exceptWithoutPropertyFallback: [] to function-allowed-list (#8488) (@ryo-manba).ignore: ["four-into-three-edge-values"] to shorthand-property-no-redundant-values (#8527) (@ryo-manba).compact formatter with pnpm to newline the exit code (#8534) (@konomae).declaration-property-value-no-unknown range and message for invalid syntax within known functions (#8528) (@ryo-manba).no-empty-source false positives for --report-needless-disables (#8536) (@romainmenke).It adds 2 new rules and fixes 2 bugs. We've turned on these rules, and the syntax-string-no-invalid and layer-name-pattern ones from recent releases,
It adds 2 new rules and fixes 2 bugs. We've turned on these rules, and the syntax-string-no-invalid and layer-name-pattern ones from recent releases, in our standard config.
color-function-alias-notation rule (#8499) (@EduardAkhmetshin).container-name-pattern rule (#8498) (@nate10j).declaration-property-value-no-unknown false positives for math of font-size (#8495) (@otomad).font-family-no-missing-generic-family-keyword false positives for math (#8489) (@otomad).It adds 1 new rule, support for languageOptions to 2 rules, 1 option to a rule, the --compute-edit-info CLI flag (along with support for EditInfo in 3
It adds 1 new rule, support for languageOptions to 2 rules, 1 option to a rule, the --compute-edit-info CLI flag (along with support for EditInfo in 3 rules), and fixes 1 bug. EditInfo is useful for automated fixing tools and editor integrations.
layer-name-pattern rule (#8474) (@ryo-manba).--compute-edit-info CLI flag (#8473) (@ryo-manba).ignorePreludeOfAtRules: [] to length-zero-no-unit (#8472) (@ryo-manba).at-rule-no-unknown support for languageOptions (#8475) (@ryo-manba).property-no-unknown support for languageOptions (#8476) (@ryo-manba).declaration-block-no-redundant-longhand-properties support for computing EditInfo (#8482) (@pamelalozano16).function-url-quotes support for computing EditInfo (#8483) (@pamelalozano16).selector-attribute-quotes support for computing EditInfo (#8484) (@pamelalozano16).custom-property-pattern false negatives for @property preludes (#8468) (@rohitgs28).Added: at-rule-no-deprecated support for computing EditInfo (#8426) (@pamelalozano16).
It adds support for computing EditInfo to 22 more rules and reverts a change that added context.lexer to our public API in the previous release.
at-rule-empty-line-before support for computing EditInfo (#8425) (@pamelalozano16).at-rule-no-deprecated support for computing EditInfo (#8426) (@pamelalozano16).at-rule-no-vendor-prefix support for computing EditInfo (#8427) (@pamelalozano16).color-function-notation support for computing EditInfo (#8437) (@pamelalozano16).declaration-empty-line-before support for computing EditInfo (#8443) (@pamelalozano16).declaration-property-value-keyword-no-deprecated support for computing EditInfo. (#8439) (@pamelalozano16).font-family-name-quotes support for computing EditInfo (#8419) (@ryo-manba).font-weight-notation support for computing EditInfo (#8420) (@ryo-manba).function-calc-no-unspaced-operator support for computing EditInfo (#8440) (@pamelalozano16).function-name-case support for support for computing EditInfo." (#8442) (@pamelalozano16).hue-degree-notation support for computing EditInfo (#8444) (@pamelalozano16).import-notation support for computing EditInfo. (#8445) (@pamelalozano16).keyframe-selector-notation support for computing EditInfo (#8457) (@pamelalozano16).length-zero-no-unit support for computing EditInfo (#8459) (@pamelalozano16).lightness-notation support for computing EditInfo (#8458) (@pamelalozano16).media-feature-name-no-vendor-prefix support for computing EditInfo (#8456) (@pamelalozano16).media-feature-range-notation support for computing EditInfo (#8455) (@pamelalozano16).property-no-vendor-prefix support for computing EditInfo (#8461) (@pamelalozano16).rule-empty-line-before support for computing EditInfo (#8460) (@pamelalozano16).selector-no-vendor-prefix support for EditInfo (#8462) (@pamelalozano16).selector-not-notation support for computing EditInfo (#8463) (@pamelalozano16).selector-pseudo-element-colon-notation support for EditInfo (#8464) (@pamelalozano16).selector-type-case support for computing EditInfo (#8467) (@pamelalozano16).shorthand-property-no-redundant-values support for computing EditInfo (#8466) (@pamelalozano16).value-keyword-case support for computing EditInfo (#8469) (@pamelalozano16).value-no-vendor-prefix support for computing EditInfo (#8470) (@pamelalozano16).Could not find a declaration file for module 'css-tree' type error (#8452) (@danielrentz).Fixed: declaration-property-value-keyword-no-deprecated false negatives for text-decoration: blink (#8351) (@Mouvedia).
It adds 1 new rule, a languageOptions configuration property for configuring some of the new rules added in 16.13.0, regex support to 1 option and support for computing EditInfo to 6 rules. It fixes 9 bugs, including 2 with the tap reporter.
syntax-string-no-invalid rule (#8331) (@ryo-manba).languageOptions configuration property (#8297) (@ryo-manba).ignoreAtRules option of at-rule-empty-line-before (#8385) (@ryo-manba).alpha-value-notation support for computing EditInfo (#8369) (@pamelalozano16).color-hex-length support for computing EditInfo (#8415) (@ryo-manba).comment-empty-line-before support for computing EditInfo (#8416) (@ryo-manba).comment-whitespace-inside support for computing EditInfo (#8417) (@ryo-manba).custom-property-empty-line-before support for computing EditInfo (#8418) (@ryo-manba).declaration-block-no-duplicate-properties support for computing EditInfo (#8363) (@romainmenke).tap formatter not escaping # and \ in its test point descriptions (#8334) (@Mouvedia).tap formatter outputting invalid YAML blocks for rules containing double quotes in their warnings' messages (#8334) (@Mouvedia).declaration-block-no-redundant-longhand-properties false positives for properties with !important (#8366) (@immitsu).EditInfo missing semicolon in text field (#8370) (@pamelalozano16).declaration-property-value-keyword-no-deprecated false negatives for text-decoration: blink (#8351) (@Mouvedia).declaration-property-value-keyword-no-deprecated false positives for styled components interpolated functions (#8392) (@Mouvedia).font-family-name-quotes false positives due to vendor-prefixed font-size values (#8393) (@Mouvedia).font-family-no-missing-generic-family-keyword false positives for math, emoji and fangsong (#8395) (@ViachaslauIhnatsiuk).selector-type-no-unknown false positives for selectmenu and popup (#8376) (@Mouvedia).Fixed: incompatible cache file format (#8359) (@romainmenke).
It fixes a bug with caching.
Fixed: declaration-property-value-keyword-no-deprecated autofix of border-color and overflow (#8346) (@Mouvedia).
It fixes 8 bugs and adds features to our Warning type.
Warning type (#8234) (@romainmenke).SyntaxError: The requested module 'table'... (#8325) (@denisx).RuleContext['fix'] type (#8309) (@Mouvedia).declaration-property-value-keyword-no-deprecated autofix of border-color and overflow (#8346) (@Mouvedia).declaration-property-value-keyword-no-deprecated false negatives for overflow-x and overflow-y (#8340) (@Mouvedia).declaration-property-value-keyword-no-deprecated false negatives for scrollbar-color (#8346) (@Mouvedia).declaration-property-value-keyword-no-deprecated false positives for non-standard syntax values (#8329) (@Mouvedia).declaration-property-value-keyword-no-deprecated warning message for overflow: <keyword> <keyword> (#8340) (@Mouvedia).selector-pseudo-class-no-unknown false positives for :has-slotted (#8332) (@Mouvedia).It fixes a regression bug with --fix.
It fixes a regression bug with --fix.
--fix CLI flag raising unknown value error (#8313) (@ybiquitous).It fixes one bug due to an upstream change in our ignore dependency.
It fixes one bug due to an upstream change in our ignore dependency.
ignore.default is not a function (#8305) (@romainmenke).It adds 3 rules to help you write error-free at-rules and 2 rules to warn you about deprecated CSS features. We've turned these rules on in our standa…
It adds 3 rules to help you write error-free at-rules and 2 rules to warn you about deprecated CSS features. We've turned these rules on in our standard config. It also adds new rule options, a feature to display how long rules take, lax autofix and support for messageArgs in more rules. It fixes 7 bugs. Lastly, we've made a deprecation that may affect some plugins. We've updated our docs for plugin authors and end users on how to silence deprecation warnings.
utils.report() (#8244) (@romainmenke).lax/strict values to the fix Node.js API option and CLI flag (#8106) (@ryo-manba).TIMING environment variable (#8108) (@ryo-manba).at-rule-descriptor-no-unknown rule (#8197) (@ryo-manba).at-rule-descriptor-value-no-unknown rule (#8211) (@ryo-manba).at-rule-no-deprecated rule (#8251) (@jeddy3).at-rule-prelude-no-invalid rule (#8268) (@ryo-manba).declaration-property-value-keyword-no-deprecated rule (#8223) (@Mouvedia)."ignore": ["at-rule-preludes", "declaration-values"] to string-no-newline (#8214) (@ryo-manba).messageArgs to declaration-property-value-no-unknown, font-family-name-quotes, font-family-no-duplicate-names, function-calc-no-unspaced-operator, import-notation, media-feature-name-unit-allowed-list, selector-attribute-quotes and selector-pseudo-element-colon-notation (#8285 & #8252) (@Mouvedia).*-no-vendor-prefix message ambiguity (#8239) (@Mouvedia).at-rule-(dis)allowed-list, at-rule-no-vendor-prefix, at-rule-property-required-list message argument (#8277) (@Mouvedia).at-rule-property-required-list message for inclusion of properties and descriptors (#8207) (@jeddy3).at-rule-* false positives and negatives for @charset rule (#8215) (@jeddy3).declaration-property-value-no-unknown false positives for descriptors (#8240) (@jeddy3).property-(dis)allowed-list false negatives for custom properties, use /^--/ to (dis)allow them (#8209) (@fbasmaison-lucca).property-no-unknown false positives for descriptors (#8203) (@jeddy3).selector-pseudo-class-no-unknown false positives for deprecated pseudo-classes (#8264) (@Mouvedia).selector-type-case false positives for hatchPath (#8264) (@Mouvedia).selector-type-no-unknown false positives for shadow, hatch and hatchpath (#8264) (@Mouvedia).Added: selector-pseudo-class-allowed-list now checks @page pseudo-classes (#8176) (@Mouvedia).
selector-pseudo-class-allowed-list now checks @page pseudo-classes (#8176) (@Mouvedia).selector-pseudo-class-disallowed-list now checks @page pseudo-classes (#8171) (@Mouvedia).at-rule-property-required-list message to use "descriptor" for accuracy (#8186) (@ybiquitous).custom-property-no-missing-var-function false positives for container-name (#8157) (@Mouvedia).custom-property-no-missing-var-function false positives for custom properties passed to running() (#8172) (@Mouvedia).function-no-unknown false positives for running() (#8172) (@Mouvedia).selector-pseudo-class-no-unknown false positives for :open (#8184) (@lukewarlow).selector-pseudo-class-no-unknown false positives for :recto, :verso and :nth() (#8170) (@Mouvedia).selector-pseudo-class-no-unknown false positives for some moz-* vendor-prefixed pseudo-classes (#8188) (@Mouvedia).selector-pseudo-element-no-unknown false positives for ::details-content (#8174) (@lukewarlow).selector-type-no-unknown false positives for idents in functional pseudo-classes (#8191) (@elskhn).value-keyword-case false negatives (#8158) (@Mouvedia).value-keyword-case false positives for vendor-prefixed system colors (#8146) (@Mouvedia).Fixed: github formatter deprecation warning link to https://stylelint.io/awesome-stylelint#formatters (#8115) (@ryo-manba).
--report-unscoped-disables CLI flag and reportUnscopedDisables option to Node.js API and configuration object (#8024) (@Mouvedia).ignoreFunctions: [] to media-query-no-invalid (#8060) (@ryo-manba).name configuration property under overrides (#8095) (@ryo-manba).benchmark-rule script to resolve TypeError (#8090) (@ybiquitous).github formatter deprecation warning link to https://stylelint.io/awesome-stylelint#formatters (#8115) (@ryo-manba).function-calc-no-unspaced-operator false negatives for calc-size (#8026) (@azat-io).max-nesting-depth false positives when the & selector is being ignored (#8048) (@ryo-manba).media-feature-name-value-no-unknown false positives for display-mode: picture-in-picture (#8136) (@Mouvedia).no-irregular-whitespace reported ranges (#8066) (@romainmenke).selector-attribute-name-disallowed-list reported ranges (#8037) (@ryo-manba).selector-attribute-operator-allowed-list reported ranges (#8038) (@ryo-manba).selector-attribute-operator-disallowed-list reported ranges (#8039) (@ryo-manba).selector-class-pattern reported ranges (#8042) (@ryo-manba).selector-combinator-allowed-list reported ranges (#8046) (@ryo-manba).selector-combinator-disallowed-list reported ranges (#8047) (@ryo-manba).selector-disallowed-list reported ranges (#8067) (@ryo-manba).selector-id-pattern reported ranges (#8045) (@ryo-manba).selector-max-attribute reported ranges (#8052) (@ryo-manba).selector-max-class reported ranges (#8053) (@ryo-manba).selector-max-combinators reported-ranges (#8055) (@ryo-manba).selector-max-compound-selectors reported ranges (#8056) (@ryo-manba).selector-max-id reported ranges (#8054) (@ryo-manba).selector-max-pseudo-class reported ranges (#8057) (@ryo-manba).selector-max-specificity reported ranges (#8058) (@ryo-manba).selector-max-universal reported ranges (#8059) (@ryo-manba).selector-nested-pattern reported ranges (#8072) (@ryo-manba).selector-no-vendor-prefix reported ranges (#8073) (@ryo-manba).selector-not-notation reported ranges (#8074) (@ryo-manba).selector-pseudo-class-allowed-list reported ranges (#8061) (@ryo-manba).selector-pseudo-class-disallowed-list reported ranges (#8062) (@ryo-manba).selector-pseudo-class-no-unknown reported ranges (#8063) (@ryo-manba).selector-pseudo-element-allowed-list reported ranges (#8068) (@ryo-manba).selector-pseudo-element-colon-notation reported ranges (#8069) (@ryo-manba).selector-pseudo-element-disallowed-list reported ranges (#8070) (@ryo-manba).selector-pseudo-element-no-unknown false positives for ::scroll-marker and ::scroll-marker-group (#8110) (@Mouvedia).selector-pseudo-element-no-unknown reported ranges (#8071) (@ryo-manba).selector-type-no-unknown reported ranges (#8076) (@ryo-manba).Fixed: built .cjs files to address Rollup vulnerability (#8010) (@ybiquitous).
shorthand-property-no-redundant-values reported ranges (#8008) (@Mouvedia).formatter configuration property (#7826) (@emmacharp).validate option to Node.js API and --validate CLI flag (#8009) (@Mouvedia).verbose formatter (#7985) (@Mouvedia).string | RegExp to ignoreValues option of value-no-vendor-prefix (#7969) (@Mouvedia).string to ignoreLonghands option of declaration-block-no-redundant-longhand-properties (#7971) (@Mouvedia).at-rule-no-unknown false positives for @position-try (#7968) (@yelizsevinc).declaration-block-no-redundant-longhand-properties autofix for grid-column/grid-row (#8023) (@ryo-manba).declaration-property-value-no-unknown false negatives/positives via css-tree@3.0.0 (#7993) (@Mouvedia).declaration-property-value-no-unknown reported ranges and message (#8003) (@romainmenke).keyframe-selector-notation reported ranges (#7992) (@romainmenke).length-zero-no-unit false positives for Sass variables (#8035) (@ryo-manba).no-descending-specificity reported ranges (#7996) (@romainmenke).selector-anb-no-unmatchable reported ranges and message (#8001) (@romainmenke).string formatter handling of log symbols for non-Unicode terminals (#7981) (@Mouvedia)..cjs files to address Rollup vulnerability (#8010) (@ybiquitous).config option for Node.js API with extends and overrides (#8030) (@ybiquitous).declaration-property-max-values, declaration-property-value-no-unknown and number-max-precision (#7975) (@Mouvedia).Fixed: honour Node.js --no-deprecation flag for rule deprecation warnings (#7943) (@Mouvedia).
secondaryOptions argument type of the Rule function (#7950) (@Mouvedia).color-function-notation reporting functions with less than 3 arguments (#7948) (@Mouvedia).declaration-property-value-no-unknown false positives/negatives (#7944 & #7957 & #7956) (@Mouvedia & @sidverma32).
overflow, word-break, widthanchor-name, field-sizing, text-box-edge, text-box-trim, text-spacing-trim, text-wrap, text-wrap-mode, text-wrap-style, view-timeline, view-timeline-axis, view-timeline-inset, view-timeline-name, view-transition-namekeyframe-block-no-duplicate-selectors/keyframe-declaration-no-important/keyframe-selector-notation/no-unknown-animations false negatives for @-o-keyframes and @-ms-keyframes (#7953) (@Mouvedia).no-duplicate-selectors reported ranges (#7938) (@romainmenke).property-no-vendor-prefix report for -webkit-background-size (#7940) (@Mouvedia).selector-class-pattern reported ranges (#7959) (@Mouvedia).selector-no-qualifying-type reported ranges (#7937) (@romainmenke).--no-deprecation flag for rule deprecation warnings (#7943) (@Mouvedia).Deprecated: context.fix usage in favour of recommending to pass a fix callback to report() (#7895) (@Mouvedia).
context.fix usage in favour of recommending to pass a fix callback to report() (#7895) (@Mouvedia).github formatter (#7909) (@Mouvedia).custom-property-no-missing-var-function false positives for view-transition-name (#7914) (@Mouvedia).keyframe-block-no-duplicate-selectors reported ranges (#7932) (@romainmenke).no-invalid-double-slash-comments reported ranges (#7907 & #7905) (@Mouvedia & @romainmenke).selector-max-type reported ranges (#7916) (@romainmenke).selector-type-no-unknown false positives for ::highlight() and ::view-transition-*() (#7913) (@Mouvedia).Fixed: no-duplicate-selectors false positives with Less syntax (#7888) (@romainmenke).
no-duplicate-selectors false positives with Less syntax (#7888) (@romainmenke).Deprecated: github formatter (#7865) (@marcalexiei).
github formatter (#7865) (@marcalexiei).function-url-quotes false positives for SCSS variables and #/? characters (#7874) (@vimalloc).keyframe-selector-notation false positives for entry-crossing and exit-crossing (#7859) (@romainmenke).no-descending-specificity false positives for nested rules without declarations (#7850) (@romainmenke).no-duplicate-selectors end positions (#7867) (@romainmenke).no-duplicate-selectors false negatives for three or more duplicates (#7867) (@romainmenke).selector-max-compound-selectors error for @nest (#7875) (@romainmenke).selector-pseudo-class-no-unknown false positives for :active-view-transition and :active-view-transition-type() (#7868) (@Mouvedia).selector-type-*, selector-max-type and selector-class-pattern false positives for <timeline-range-name> in keyframe selectors (#7856) (@romainmenke).stylelint.utils.checkAgainstRule() regression when reportNeedlessDisables and quiet are both enabled (#7879) (@ybiquitous).Fixed: quietDeprecationWarnings to suppress stylelint:003 warning (#7837) (@ybiquitous).
tap formatter to support TAP14 (#7759) (@Mouvedia).url secondary option (#7743) (@emmacharp).at-rule-no-unknown false positives for @historical-forms and @font-palette-values (#7774) (@Mouvedia).at-rule-no-unknown false positives for @view-transition (#7753) (@sebdanielsson).at-rule-no-vendor-prefix false negatives for @-moz-document and @-webkit-viewport (#7772) (@Mouvedia).comment-whitespace-inside end positions (#7744) (@Mouvedia).declaration-block-no-duplicate-properties reported ranges (#7758) (@Mouvedia).declaration-block-no-redundant-longhand-properties/declaration-block-no-shorthand-property-overrides false negatives for font-variant (#7734) (@Bilie).font-family-name-quotes false negatives for -moz-*/-webkit-* keywords (#7777) (@Mouvedia).font-family-no-missing-generic-family-keyword false negatives for font families which names match a CSS3 font-variant keyword (#7823) (@Mouvedia).function-name-case end positions (#7747) (@Mouvedia).function-no-unknown performance by reducing file read count (#7801) (@ybiquitous).media-feature-name-no-vendor-prefix autofix (#7770) (@Mouvedia).no-invalid-double-slash-comments reported ranges (#7768) (@Mouvedia).property-no-unknown false positives for navigation and miscellaneous legacy properties (#7764) (@Mouvedia).quietDeprecationWarnings to suppress stylelint:003 warning (#7837) (@ybiquitous).selector-no-vendor-prefix autofix (#7763) (@Mouvedia).selector-not-notation end positions when new lines are part of the selector (#7755) (@Mouvedia).selector-type-case end positions (#7752) (@Mouvedia).shorthand-property-no-redundant-values false negatives for logical properties, overflow, overscroll-behavior, scroll-margin and scroll-padding (#7808) (@Mouvedia).string-no-newline false positives for escaped multi-line (#7818) (@romainmenke).value-keyword-case end positions (#7760) (@Mouvedia).stylelint.utils.checkAgainstRule() for Promise-based rules (#7821) (@aaronccasanova).stylelint.utils.checkAgainstRule() to use result.stylelint if present (#7833) (@ybiquitous).tap formatter (#7759) (@Mouvedia).Fixed: no-descending-specificity false positives for nested selectors (#7724) (@romainmenke).
no-descending-specificity false positives for nested selectors (#7724) (@romainmenke).selector-type-no-unknown false positive for model (#7718) (@Mouvedia).Fixed: function-calc-no-unspaced-operator false negatives (#7655 & #7670 & #7676) (@ybiquitous & @romainmenke).
function-calc-no-unspaced-operator false negatives (#7655 & #7670 & #7676) (@ybiquitous & @romainmenke).selector-not-notation autofix of the "simple" option (#7703) (@Mouvedia).selector-max-specificity end positions (#7685) (@romainmenke).no-descending-specificity end positions (#7701) (@romainmenke).npm fund (#7707) (@ybiquitous).Added: regex support to ignoreValues for value-no-vendor-prefix (#7650) (@Mouvedia).
ignoreValues for value-no-vendor-prefix (#7650) (@Mouvedia).shorthand-property-no-redundant-values false negatives for functions (#7657) (@ybiquitous).value-no-vendor-prefix false negatives/positives (#7654 & #7658) (@Mouvedia).CosmiconfigResult type error (#7661) (@ybiquitous).Fixed: selector-type-no-unknown false positives for experimental and deprecated HTML tags (#7612) (@Mouvedia).
no-unknown-custom-media (#7594) (@fpetrakov).ignoreLonghands: [] to declaration-block-no-redundant-longhand-properties (#7611) (@Mouvedia).ignore: ["keyframe-selectors"] to rule-selector-property-disallowed-list (#7572) (@emmacharp).declaration-block-no-redundant-longhand-properties autofix conflicts (#7626) (@Mouvedia).declaration-block-no-redundant-longhand-properties autofix for text-decoration (#7611) (@Mouvedia).declaration-block-no-shorthand-property-overrides false negatives for border (#7585) (@fpetrakov).declaration-block-no-shorthand-property-overrides false negatives for font and border (#7606) (@Mouvedia).function-calc-no-unspaced-operator false negatives for some math functions (#7619) (@Mouvedia).function-no-unknown false positives for anchor and anchor-size (#7607) (@Mouvedia).selector-max-attribute end positions (#7592) (@romainmenke).selector-max-class end positions (#7590) (@romainmenke).selector-max-combinators end positions (#7596) (@romainmenke).selector-max-compound-selectors end positions (#7599) (@romainmenke).selector-max-pseudo-class end positions (#7598) (@romainmenke).selector-max-universal end positions (#7597) (@romainmenke).selector-type-no-unknown false positives for experimental and deprecated HTML tags (#7612) (@Mouvedia).Fixed: selector-max-id end positions (#7571) (@romainmenke).
selector-max-id end positions (#7571) (@romainmenke)./index.js (#7578) (@ota-meshi).Added: support for *-deprecation command-line flags of Node.js (#7550) (@fpetrakov).
ignoreSelectors: [] to selector-max-compound-selectors (#7544) (@FloEdelmann).string and verbose formatters (#7539) (@m-allanson).*-deprecation command-line flags of Node.js (#7550) (@fpetrakov).rule-selector-property-disallowed-list false positives for nesting selectors (#7558) (@romainmenke).selector-pseudo-*-allowed-list false positives for vendor prefixes (#7525) (@carlosjeurissen).report() for index/endIndex zero values (#7565) (@romainmenke).selector-max-type end positions (#7518) (@romainmenke).Fixed: report flags not reporting on subsequent runs when cache is used (#7483) (@ybiquitous).
custom-property-no-missing-var-function false positives for properties that can contain author-defined identifiers (#7478) (@ybiquitous).selector-pseudo-class-no-unknown false positives for :seeking, the media loading state and sound state pseudo-classes (#7490) (@Mouvedia).selector-max-specificity false positives with ignoreSelectors option for of <selector> syntax (#7475) (@ybiquitous).function-calc-no-unspaced-operator performance (#7505) (@ybiquitous).validateOptions to report when secondary option object is an empty object or null (#7476) (@ybiquitous).report() error message responsibility for a missing node or line number (#7474) (@ybiquitous).Added: media-query-no-invalid specific problem messages (#7462) (@romainmenke).
media-query-no-invalid specific problem messages (#7462) (@romainmenke).checkContextFunctionalPseudoClasses: [] to selector-max-id (#7380) (@brigitamaria).declaration-property-value-no-unknown false negatives for @starting-style (#7461) (@fpetrakov).function-no-unknown|value-keyword-case false positives for template literals with line breaks (#7443) (@Sh031224).allowEmptyInput option ignored in configuration object regression (#7446) (@ybiquitous).at-rule-no-unknown false positives for @starting-style (#7438) (@fpetrakov).ERR_UNSUPPORTED_ESM_URL_SCHEME for --custom-formatter on Windows (#7432) (@JounQin).Error: Could not find <package> message clarity (#7456) (@jeddy3).overrides.files negated pattern regression introduced in 15.0.0 (#7468) (@ybiquitous).Added: lightness-notation rule (#7366) (@fpetrakov).
lightness-notation rule (#7366) (@fpetrakov).ignore: ["keyframe-selectors"] to selector-disallowed-list (#7417) (@mattxwang).selector-pseudo-class-no-unknown false positive for :popover-open (#7425) (@mattxwang).declaration-property-value-no-unknown and other false positives for multiline SCSS interpolation. (#7406) (@FloEdelmann).function-url-quotes false positives for SCSS variable and @ character (#7416) (@mattxwang).Fixed: ERR_UNSUPPORTED_ESM_URL_SCHEME error on Windows (#7383) (@JounQin).
ERR_UNSUPPORTED_ESM_URL_SCHEME error on Windows (#7383) (@JounQin).Your coding agent can read these notes before it upgrades. Set up the MCP server →