NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #49 most downloaded on npm
Tool for transforming styles with JS plugins
Last release 28 days ago
03 Sep 2026
Ships unpredictably
gaps range from 8 days to 9 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
292 releases · first in 2013
* Update funding link.
PostCSS 8.1 fixed the new visitor API from the 8.0 release.
<img src="https://user-images.githubusercontent.com/19343/94352064-65b83a00-002e-11eb-9382-6f249a5c7c50.png" align="right" width="200" height="200" alt="Duke Gemory seal">
PostCSS 8.1 fixed the new visitor API from the 8.0 release.
We fixed Root and RootExit re-calling on children's changes. And now visitors will visit the parent again if nested children were changed.
We added Once and OnceExit events, which will not be called again on node changes. You can use them to lint files or collect statistics:
module.exports = {
postcssPlugin: 'postcss-linter',
OnceExit (root) {
lint(root)
}
}
module.exports.postcss = true
We updated Migration guide according to new changes.
One column per quarter.
Replace prototype in PostCSS 7 nodes instead of recreating them.
Transformer to exported types (by @pmdartus).Transformer to exported types (by Pierre-Marie Dartus).Fix 8.0.7 regression on PostCSS 7 nodes converting (by @adamwathan)
8.0.7 regression on PostCSS 7 nodes converting (by @adamwathan)Fixed compatibility issue with mixin AST with PostCSS 7 and 8 nodes.
Fixed child adding methods in Container.
Container.- Update changelog.
Fixed Cannot read property 'line' of null error.
Cannot read property 'line' of null error.Fixed client-side bundling support.
- Fixed plugin packs support.
* Updated Processor#version.
Processor#version.We try to avoid any breaking changes for end-users:
<img src="https://user-images.githubusercontent.com/19343/92548424-fb795a00-f224-11ea-80d7-4e8f739ae759.png" align="right" width="200" height="200" alt="President Ose seal">
PostCSS 8.0 brings new plugin API, node_modules size reduction, better source map support, and CSS parser improvements.
Check out a day-by-day diary of PostCSS 8.0 development process.
See Migration Guides for end-users and for plugin developers.
With more than 100 M downloads per month, it becomes hard to support PostCSS in free time. For instance, getting the 8.0 release ready took 4 months of work.
This release was possible thanks to out community. Tailwind CSS, De Voorhoede, InVision AG, Brainbow, and many individual contributions.
<a href="https://tailwindcss.com/"> <img src="https://refactoringui.nyc3.cdn.digitaloceanspaces.com/tailwind-logo.svg" alt="Sponsored by Tailwind CSS" width="273" height="64"> </a>
If your company wants to support the sustainability of front-end infrastructure or just wants to give some love to PostCSS, you can join our supporters by:
We try to avoid any breaking changes for end-users:
node_modules/postcss for old browsers.postcss.vendor API.The biggest change in PostCSS 8 is a new plugin API. Thanks to @BondarenkoAlex for big help in creating a new API.
module.exports = () => {
return {
postcssPlugin: 'postcss-will-change',
Declaration: {
'will-change': (decl, { Declaration }) => {
decl.cloneBefore(
new Declaration({ prop: 'backface-visibility', value: 'hidden' })
)
}
}
}
}
module.exports.postcss = true
We know that rewriting old plugins will take time, but the new API will improve the end-user’s experience and make life easier for plugin developers:
postcss duplicates in your node_modules. New API fixes this problem.These resources will help plugin developers in API migration:
PostCSS development guidelines were also changed:
postcss in peerDependencies.Previously PostCSS used a React-based framework for the project's website. Since we have a static website, we decided to migrate to a React-free framework and got good performance improvements:
Check out postcss.org and new API docs that feature the awesome alchemy-inspired design by @okonet.
<a href="https://postcss.org/"> <img src="https://user-images.githubusercontent.com/19343/92683881-153c9f00-f302-11ea-8355-e61d0f02776e.jpeg" alt="PostCSS website performance results" /> </a>
We also removed Google Analytics tracking scripts and encourage other open source projects to be an example in caring about user’s privacy and performance.
Did you know that all examples below are valid CSS?
:root {
--empty: ;
--JSON: [1, "2", {"three": {"a":1}}, [4]];
--javascript: function(rule) { console.log(rule) };
}
@supports (--element(".minwidth", { "minWidth": 300 })) {
[--self] {
background: greenyellow;
}
}
Now PostCSS parses even those rare edge cases correctly. Thanks to Tailwind CSS and Prettier teams for adding more cases to our CSS parser tests collection.
Note that now --roundMixin: { border-radius: 8px } will be parsed as a Declaration with the { border-radius: 8px } value.
We have added support for two new source map formats: Index map and JSON (data:application/json).
PostCSS 8 is now much closer to the source map spec. Thanks to the Google team for reports:
sources in map as URLs instead of file paths.sources relative to map file, not CSS file.A few source map APIs were added:
opts.maps.absolute = true option for absolute paths in source map.opts.maps.annotation = (file, root) => url for a dynamic path to source map.Node#origin() now returns position.url in addition to position.file for compatibility with absolute URLs in source map’s sources.We have added ES modules support and now we export all classes from the main entry:
import { CssSyntaxError, parse } from "postcss"
@graberzz added Node#source.offset in addition to line and column.
CSS Custom Properties and Sass-like $-variables now have a special Declaration#variable mark:
const root = parse(`
:root {
--propery: value;
}
$variable: value
`)
root.first.first.variable //=> true
root.last.variable //=> true
PostCSS now has a first-class TypeScript support:
replaceWith with input replaced node (by @josephkaptur).chalk to colorette.Declaration#value auto-conversion to string to prevent plugin’s bugs.<input css 9M4X8l>:10:6.Backport nanocolors to picocolors migration.
nanocolors to picocolors migration.- Update Processor#version.
Processor#version.Backport chalk to nanocolors migration.
chalk to nanocolors migration.Backport ReDoS vulnerabilities from PostCSS 8.
Add migration guide link to PostCSS 8 error text.
Fix compatibility with postcss-scss 2.
postcss-scss 2.Add error message for PostCSS 8 plugins.
Fix error message (by @admosity).
Use only the latest source map annotation (by @emzoumpo).
Fix TypeScript definition (by @nex3)
- Update Processor#version.
Processor#version.Fix TypeScript definition (by @nex3).
Fix TypeScript definition (by @nex3).
Fix TypeScript definition (by @nex3)
Fix absolute path support for Windows (by @tomrav)
Fix TypeScript definition (by @keithamus).
- Update Processor#version.
Processor#version.* Add funding link for npm fund.
npm fund.Revert passing nodes property to node constructor.
nodes property to node constructor.Allow to pass PostCSS’s nodes in nodes property to node constructor.
nodes property to node constructor.Fix passing nodes property to node constructor.
nodes property to node constructor.Fix TypeScript type definitions (by @buschtoens).
Fix TypeScript type definitions (by @bmatcuk and @buschtoens).
Revert Custom Properties fix until PostCSS 8.0.
Fix Custom Properties support (by @isolovev).
Fix tokenizer for postcss-less (by @mattlyons0)
postcss-less (by @mattlyons0)Fix parsing regression in 7.0.12 for comments between property and value.
Fix parsing broken CSS with two words in declaration property.
Fix source maps on declaration semicolon (by @mischnic).
Fix source maps (by @mischnic).
Increase stringifing performance for non-raws AST.
Fix TypeScript definitions (by @aoberoi).
support-colors 6.0.support-colors 6.0.Extend Error in CssSyntaxError.
Error in CssSyntaxError.Fix parsing files with BOM (by @vkrol).
Reduce npm package size (by @pgilad).
- Fix safe parser regression.
Fix tokenizer extendability (by @shellscape).
* Fix warning text (by @rapzo).
- Fix JSDoc (by Steven Lambert).
PostCSS 7.0 dropped Node.js 4 support and brought small features.
<img src="https://user-images.githubusercontent.com/19343/42777541-41cc0ce2-88ef-11e8-9530-243eb38830a6.png" align="right" width="200" height="200" alt="President Amy seal">
PostCSS 7.0 dropped Node.js 4 support and brought small features.
We removed Node.js 4 and Node.js 9 support since it doesn’t have security updates anymore.
We removed IE and “dead” browsers (without security updates) from Babel’s Browserslist. Don't worry, PostCSS still generate IE-compatible code. These changes affect websites which run PostCSS on client-side like CodePen.
last 2 version
not dead
not Explorer 11
not ExplorerMobile 11
node 10
node 8
node 6
@nikhilgaba added cute thing for plugin developers. If an error was happened in Container#walk() circle, PostCSS will show in stack trace CSS node, which causes this error:
TypeError: Cannot read property '0' of undefined
at /home/ai/Dev/test/app.css:10:4
at plugin (plugin.js:2:4)
at runPostCSS (runner.js:2:1)
@igorkamyshev added finally method to LazyResult to make it compatible with the latest Promise API.
Fix parsing nested at-rules without semicolon, params, and spaces.
Fix Node#prev and Node#next on missed parent.
Node#prev and Node#next on missed parent.Rename Chinese docs to fix yarnpkg.com issue.
Better error message on null as input CSS.
null as input CSS.Fix TypeScript definitions for source maps (by @hzlmn).
source field in TypeScript definitions (by @sylvainpolletvillard).source field in TypeScript definitions (by Sylvain Pollet-Villard).Use primitive object in TypeScript definitions (by @sylvainpolletvillard).
Fix parsing comment in selector between word tokens (by @hzlmn).
Fix warning text (by @mhkeller).
Your coding agent can read these notes before it upgrades. Set up the MCP server →