NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3644 most downloaded on npm
CSS Object Model implementation and CSS parser
Last release 8 months ago
12 Jan 2026
Release timing varies
gaps range from 2 weeks to 3 months
Nearly every release is documented
notes for 32 of 32 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
32 releases · first in 2025
One column per month.
### Patch Changes - #91 `e600e1d` Thanks @acemir! - feat: improve RegExp and attr selectors handling - #89 `f29c634` Thanks @acemir! - feat: improve e
set selectorText, style and media configurable
#85 25f9726 Thanks @acemir! - feat: sync styleSheet.title with ownerNode.title
#81 4e349c3 Thanks @acemir! - fix: preserve context for sibling nested selectors
#84 84ac918 Thanks @acemir! - feat: implement CSSPropertyRule
#83 623e136 Thanks @acemir! - feat: improve CSSImportRule implementation
CSSImportRule.styleSheet to unconstructed@import rules into a constructed stylesheet### Patch Changes - #77 `f1e78c0` Thanks @acemir! - fix: parsing of deeply nested at-rule combinations
`3c2b77f` Thanks @acemir! - fix: importRule stylesheet assign from globalObject
### Patch Changes - #72 `f27c829` Thanks @acemir! - feat: enhance CSSOM setup method to create instance with globalObject support
CSSStyleSheet replace and replaceSync mutates cssText instead of reasign
e597dfe Thanks @acemir! - fix: improve CSSStyleSheet MediaList and parser
When parsing CSS with nested selectors (&) followed by @media rules inside an @layer block, the parser would crash with "Cannot read properties of nul
#66 e369d14 Thanks @Naycon! - Fix TypeError when parsing @media after nested selectors inside @layer
When parsing CSS with nested selectors (&) followed by @media rules inside an @layer block, the parser would crash with "Cannot read properties of null (reading 'constructor')" because nestedSelectorRule.parentRule can be null when the parent context is a CSSLayerBlockRule rather than a CSSStyleRule.
#69 52b93c7 Thanks @acemir! - fix: auto-closing statement rules
#68 907a0c2 Thanks @acemir! - feat: rules interfaces and parse improvements
Fix CSSScopeRule allows CSSNestedDeclarations
#60 dc858f3 Thanks @acemir! - fix: ending nested rules processing and unclosed sheet edge cases
#62 e65434c Thanks @acemir! - fix: serialization with empty nested declarations
#63 f334c70 Thanks @acemir! - fix: parser improvements
#59 fccf639 Thanks @Xiphoseer! - feat: implement CSSStyleSheet: replaceSync, replace
### Patch Changes - #56 `555f3cb` Thanks @acemir! - fix: prevent adding semicolon to token if it already ends with one
### Patch Changes - #54 `ddae783` Thanks @acemir! - fix: added parseError isNested argument
### Patch Changes - #52 `e912362` Thanks @acemir! - feat: support CSSPageRule and implementation improvements
### Patch Changes - #51 `94945d2` Thanks @acemir! - feat: support legacy CSSStyleSheet methods and improve nested selectors validation - #48 `2548929`
### Patch Changes - #45 `4092150` Thanks @acemir! - fix: revert cssrule type constant as properties
improve insertRule and deleteRule edge cases
CSSRule parentRule and parentStyleSheet, are now prototype getters to be readonly according to the CSSRule interface.
#41 a48b41f Thanks @acemir! - feat: sync common rules interfaces
parentRule and parentStyleSheet, are now prototype getters to be readonly according to the CSSRule interface.selectorText and style are now prototype getter and setter according to the CSSStyleRule interface.### Patch Changes - #39 `c3c8d12` Thanks @acemir! - fix: workaround for jsdom exceptions
### Patch Changes - #37 `cb267e6` Thanks @acemir! - fix: adjust DOMException errors names
### Patch Changes - #35 `e278d07` Thanks @acemir! - fix: attribute selector support
`9703341` Thanks @acemir! - fix: standardizes the cssText getters
### Patch Changes - #31 `5a863c0` Thanks @acemir! - fix: support namespace with filled unquoted url
### Patch Changes - #29 `be06274` Thanks @acemir! - fix: improve valid @layer name logic - #30 `cd35009` Thanks @acemir! - feat: added support for CSS
### Patch Changes - #25 `8ae26ad` Thanks @acemir! - chore: better parseError messages
### Patch Changes - #23 `dd8f3c7` Thanks @acemir! - fix: handle newlines in the middle of selectors
### Patch Changes - #21 `620ebfa` Thanks @acemir! - fix: improve CSSCounterStyleRule draft processing
### Patch Changes - #19 `ee897f0` Thanks @acemir! - feat: draft support for CSSCounterStyleRule
### Patch Changes - #16 `cf9dc7d` Thanks @acemir! - feat: improves complex selectors validation
### Patch Changes - #14 `2bde3f5` Thanks @acemir! - fix: injectable errorHandler
### Patch Changes - #12 `4f3abd2` Thanks @acemir! - feat: improve handling of complex selectors
`d2a81ae` Thanks @acemir! - feat: support attribute selector case-insensitive flag
### Patch Changes - #8 `5ea9d4f` Thanks @acemir! - feat: parser improvements on selectors, declaration values and error handling
### Patch Changes - #7 `6d14f90` Thanks @acemir! - feat: add layer() and supports() to CSSImportRule - #6 `a6526ad` Thanks @acemir! - feat: support CS
#7 6d14f90 Thanks @acemir! - feat: add layer() and supports() to CSSImportRule
#6 a6526ad Thanks @acemir! - feat: support CSSLayerStatementRule, adjust CSSLayerBlockRule and improves at-rule validation
#4 46a61ee Thanks @anntseng! - fix: check the priority value of the existing property
#3 243e8cd Thanks @DiogoDoreto! - index parameter of CSSStyleSheet.insertRule is now optional
### Changes - #2 `64e49ef` - feat: support for nested selectors, nested declarations and at-rule validations
Your coding agent can read these notes before it upgrades. Set up the MCP server →