---
title: "postcss Breaking Changes on npm | Since.dev"
description: "What each postcss release removed, renamed or changed: 169 breaking changes in 14 versions on npm, each with its source."
canonical_url: https://since.dev/packages/npm/postcss
last_updated: 2026-07-24
---

# 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

## 8.5.23

1 breaking change, first published July 24, 2026.

- **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](https://github.com/postcss/postcss/releases/tag/8.5.23)

## 8.5.18

2 breaking changes, first published July 12, 2026.

- **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](https://github.com/postcss/postcss/releases/tag/8.5.18)
- **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](https://www.npmjs.com/package/postcss/v/8.5.18)

## 8.5.9

6 breaking changes, first published April 7, 2026.

- **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](https://www.npmjs.com/package/postcss/v/8.5.9)
- **Signature changed** `lib/fromJSON:default`  

Was const fromJSON: FromJSON; now let fromJSON: FromJSON. [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.9)
- **Signature changed** `lib/list:default`  

Was const list: list.List; now let list: list.List. [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.9)
- **Signature changed** `lib/parse:default`  

Was const parse: Parse; now let parse: Parse. [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.9)
- **Signature changed** `lib/stringify:default`  

Was const stringify: Stringify; now let stringify: Stringify. [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.9)
- **Signature changed** `list`  

Was const list: list.List; now let list: list.List. [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.9)

## 8.5.6

48 breaking changes, first published June 16, 2025.

- **Removed** `lib/container:ContainerWithChildren.after`  

ContainerWithChildren.after was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)
- **Removed** `lib/container:ContainerWithChildren.append`  

ContainerWithChildren.append was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)
- **Removed** `lib/container:ContainerWithChildren.assign`  

ContainerWithChildren.assign was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)
- **Removed** `lib/container:ContainerWithChildren.before`  

ContainerWithChildren.before was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)
- **Removed** `lib/container:ContainerWithChildren.cleanRaws`  

ContainerWithChildren.cleanRaws was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)
- **Removed** `lib/container:ContainerWithChildren.clone`  

ContainerWithChildren.clone was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)
- **Removed** `lib/container:ContainerWithChildren.cloneAfter`  

ContainerWithChildren.cloneAfter was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)
- **Removed** `lib/container:ContainerWithChildren.cloneBefore`  

ContainerWithChildren.cloneBefore was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)
- **Removed** `lib/container:ContainerWithChildren.each`  

ContainerWithChildren.each was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)
- **Removed** `lib/container:ContainerWithChildren.error`  

ContainerWithChildren.error was removed in postcss 8.5.6 [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.6)

And 38 more in this version.

## 8.5.4

4 breaking changes, first published May 29, 2025.

- **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](https://www.npmjs.com/package/postcss/v/8.5.4)
- **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](https://www.npmjs.com/package/postcss/v/8.5.4)
- **Signature changed** `lib/stringifier:default.rawValue`  

Was rawValue(node: AnyNode, prop: string): string; now rawValue(node: AnyNode, prop: string): number | string. [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.4)
- **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](https://www.npmjs.com/package/postcss/v/8.5.4)

## 8.5.3

3 breaking changes, first published February 19, 2025.

- **Signature changed** `AtRule.nodes`  

Was nodes: Container\['nodes'\]; now nodes: Container\['nodes'\] | undefined. [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.3)
- **Signature changed** `lib/at-rule:default.nodes`  

Was nodes: Container\['nodes'\]; now nodes: Container\['nodes'\] | undefined. [npmjs.com](https://www.npmjs.com/package/postcss/v/8.5.3)
- **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](https://www.npmjs.com/package/postcss/v/8.5.3)

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#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.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
