postcss breaking changes
Every breaking API change we have recorded in postcss on npm: 169 breaking changes in 14 versions. Below are its newest 6 versions, removals and renames first, each with its source.
Newest change July 24, 2026

On this page
8.5.23
- Behavior changed
opts.from
PostCSS no longer loads source maps unless opts.from is passed. Set opts.from to keep source map loading working. github.com
8.5.18
- Behavior changed
Loading a previous source maps file is restricted to the opts.from folder for security. Code that loads maps from elsewhere must set unsafeMap: true to keep working. github.com - Signature changed
Parser.__call
Was (css: {toString(): string} | string, opts?: Pick<ProcessOptions, 'document' | 'from' | 'map'>): RootNode; now (css: {toString(): string} | string, opts?: Pick<ProcessOptions, 'document' | 'from' | 'map' | 'unsafeMap'>): RootNode. npmjs.com
8.5.9
- Signature changed
lib/container:ContainerWithChildren
Was type ContainerWithChildren<Child extends Node = ChildNode> = {nodes: Child[]} & (| AtRule | Root | Rule); now type ContainerWithChildren<Child extends Node = ChildNode> = {nodes: Child[]} & (AtRule | Root | Rule). npmjs.com - Signature changed
lib/fromJSON:default
Was const fromJSON: FromJSON; now let fromJSON: FromJSON. npmjs.com - Signature changed
lib/list:default
Was const list: list.List; now let list: list.List. npmjs.com - Signature changed
lib/parse:default
Was const parse: Parse; now let parse: Parse. npmjs.com - Signature changed
lib/stringify:default
Was const stringify: Stringify; now let stringify: Stringify. npmjs.com - Signature changed
list
Was const list: list.List; now let list: list.List. npmjs.com
8.5.6
- Removed
lib/container:ContainerWithChildren.after
ContainerWithChildren.after was removed in postcss 8.5.6 npmjs.com - Removed
lib/container:ContainerWithChildren.append
ContainerWithChildren.append was removed in postcss 8.5.6 npmjs.com - Removed
lib/container:ContainerWithChildren.assign
ContainerWithChildren.assign was removed in postcss 8.5.6 npmjs.com - Removed
lib/container:ContainerWithChildren.before
ContainerWithChildren.before was removed in postcss 8.5.6 npmjs.com - Removed
lib/container:ContainerWithChildren.cleanRaws
ContainerWithChildren.cleanRaws was removed in postcss 8.5.6 npmjs.com - Removed
lib/container:ContainerWithChildren.clone
ContainerWithChildren.clone was removed in postcss 8.5.6 npmjs.com - Removed
lib/container:ContainerWithChildren.cloneAfter
ContainerWithChildren.cloneAfter was removed in postcss 8.5.6 npmjs.com - Removed
lib/container:ContainerWithChildren.cloneBefore
ContainerWithChildren.cloneBefore was removed in postcss 8.5.6 npmjs.com - Removed
lib/container:ContainerWithChildren.each
ContainerWithChildren.each was removed in postcss 8.5.6 npmjs.com - Removed
lib/container:ContainerWithChildren.error
ContainerWithChildren.error was removed in postcss 8.5.6 npmjs.com
And 38 more in this version.
8.5.4
- Signature changed
lib/container:ContainerWithChildren.rangeBy
Was rangeBy(opts?: Pick<WarningOptions, 'endIndex' | 'index' | 'word'>): Node.Range; now rangeBy(opts?: Pick<WarningOptions, 'end' | 'endIndex' | 'index' | 'start' | 'word'>): Node.Range. npmjs.com - Signature changed
lib/stringifier:default.raw
Was raw(node: AnyNode, own: null | string, detect?: string): string; now raw(node: AnyNode, own: null | string, detect?: string): boolean | string. npmjs.com - Signature changed
lib/stringifier:default.rawValue
Was rawValue(node: AnyNode, prop: string): string; now rawValue(node: AnyNode, prop: string): number | string. npmjs.com - Signature changed
Node.rangeBy
Was rangeBy(opts?: Pick<WarningOptions, 'endIndex' | 'index' | 'word'>): Node.Range; now rangeBy(opts?: Pick<WarningOptions, 'end' | 'endIndex' | 'index' | 'start' | 'word'>): Node.Range. npmjs.com
8.5.3
- Signature changed
AtRule.nodes
Was nodes: Container['nodes']; now nodes: Container['nodes'] | undefined. npmjs.com - Signature changed
lib/at-rule:default.nodes
Was nodes: Container['nodes']; now nodes: Container['nodes'] | undefined. npmjs.com - Signature changed
plugin
Was export {default, stringify, fromJSON, plugin, parse, list, document, comment, atRule, rule, decl, root, CssSyntaxError, Declaration, Container, Processor, Document, Comment, Warning, AtRule, Result, Input, Rule, Root, Node... npmjs.com
Check your code
These are the changes. To see which of them reach your code, scan a public repository, or have your coding agent call check_code with your manifest or lockfile over MCP. The API reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

Put your code on continuous management.
Scan a public repository now, or give your agent one line.
See how out of date your code is.
Tell your agent what changed since it was trained.
claude mcp add --transport http since https://api.since.dev/mcp