<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.knodel.net/oops/index.php?action=history&amp;feed=atom&amp;title=PostCSS</id>
		<title>PostCSS - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.knodel.net/oops/index.php?action=history&amp;feed=atom&amp;title=PostCSS"/>
		<link rel="alternate" type="text/html" href="http://www.knodel.net/oops/index.php?title=PostCSS&amp;action=history"/>
		<updated>2026-05-08T09:19:14Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.26.3</generator>

	<entry>
		<id>http://www.knodel.net/oops/index.php?title=PostCSS&amp;diff=358&amp;oldid=prev</id>
		<title>Eogen: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="http://www.knodel.net/oops/index.php?title=PostCSS&amp;diff=358&amp;oldid=prev"/>
				<updated>2018-09-19T08:19:15Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&#039;diff diff-contentalign-left&#039;&gt;
				&lt;tr style=&#039;vertical-align: top;&#039; lang=&#039;en&#039;&gt;
				&lt;td colspan=&#039;1&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&#039;1&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 08:19, 19 September 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&#039;2&#039; style=&#039;text-align: center;&#039; lang=&#039;en&#039;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Eogen</name></author>	</entry>

	<entry>
		<id>http://www.knodel.net/oops/index.php?title=PostCSS&amp;diff=357&amp;oldid=prev</id>
		<title>GreenC bot: Rescued 2 archive links; reformat 2 links. Wayback Medic 2.1</title>
		<link rel="alternate" type="text/html" href="http://www.knodel.net/oops/index.php?title=PostCSS&amp;diff=357&amp;oldid=prev"/>
				<updated>2018-04-13T20:45:40Z</updated>
		
		<summary type="html">&lt;p&gt;Rescued 2 archive links; reformat 2 links. &lt;a href=&quot;/oops/index.php?title=User:GreenC/WaybackMedic_2.1&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:GreenC/WaybackMedic 2.1 (page does not exist)&quot;&gt;Wayback Medic 2.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox software&lt;br /&gt;
| name                   = PostCSS&lt;br /&gt;
| logo                   = PostCSS Logo.svg&lt;br /&gt;
| logo alt               = Philosopher’s stone, PostCSS logo&lt;br /&gt;
| logo caption           =&lt;br /&gt;
| author                 = &lt;br /&gt;
| developer              = Andrey Sitnik, Ben Briggs, Bogdan Chadkin&amp;lt;ref&amp;gt;[https://www.npmjs.com/package/postcss/access Who can release PostCSS to npm]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| released               = {{Start date and age|2013|11|04}}&lt;br /&gt;
| discontinued           =&lt;br /&gt;
| ver layout             =&lt;br /&gt;
| latest release version = 6.0.2, Marquis Orias&lt;br /&gt;
| latest release date    = {{Start date and age|2017|06|12}}&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss/releases PostCSS Releases]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| status                 = Active&lt;br /&gt;
| programming language   = [[JavaScript]]&lt;br /&gt;
| operating system       = [[Cross-platform]]&lt;br /&gt;
| platform               =&lt;br /&gt;
| size                   = &lt;br /&gt;
| language               = English&lt;br /&gt;
| genre                  = CSS development tool&lt;br /&gt;
| license                = [[MIT License]]&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss/blob/master/LICENSE License in PostCSS repo]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| website                = [http://postcss.org postcss.org]&lt;br /&gt;
| repo                   = [https://github.com/postcss/postcss github.com/postcss/postcss]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;PostCSS&amp;#039;&amp;#039;&amp;#039; is a [[Programming tool|software development tool]] that uses [[JavaScript]]-based [[Plug-in (computing)|plugins]] to automate routine [[Cascading Style Sheets|CSS]] operations.&amp;lt;ref&amp;gt;[http://webdesign.tutsplus.com/tutorials/postcss-deep-dive-what-you-need-to-know--cms-24535 First article about PostCSS in Tuts+ course]&amp;lt;/ref&amp;gt; The tool has been used to develop the code of [[Wikipedia]],&amp;lt;ref name=&amp;quot;postcss-wiki&amp;quot;&amp;gt;[https://github.com/wikimedia/portals/commit/998d7ce74c1f68397a52434ce9b85064de7d0008 Adding PostCSS commit in Wikipedia repo]&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;stylelint-wiki&amp;quot;&amp;gt;[https://github.com/wikimedia/stylelint-config-wikimedia Wikimedia Stylelint Config]&amp;lt;/ref&amp;gt; [[Facebook]],&amp;lt;ref name=&amp;quot;stylelint-fb&amp;quot;&amp;gt;[https://code.facebook.com/posts/879890885467584/improving-css-quality-at-facebook-and-beyond/ Improving CSS quality at Facebook and beyond]&amp;lt;/ref&amp;gt; and [[GitHub]].&amp;lt;ref&amp;gt;[https://archive.is/20160823060733/https://github.com/primer/primer/blob/master/.postcss.json PostCSS settings GitHub build tool]&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;stylelint-gh&amp;quot;&amp;gt;[https://github.com/primer/stylelint-config-primer Primer Stylelint Config]&amp;lt;/ref&amp;gt; PostCSS is a top-favored CSS tool among [[npm (software)|npm]] users.&amp;lt;ref&amp;gt;[http://www.npmtrends.com/postcss-vs-less-vs-node-sass-vs-stylus CSS preprocessors downloads from npm]&amp;lt;/ref&amp;gt; It was designed by Andrey Sitnik with the idea taking its origin in his front-end work for Evil Martians.&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss/commit/513f9c1b46a7085ac215e4de9bac5c617d5b2f26 Evil Martians commit in PostCSS repo]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
=== Structure ===&lt;br /&gt;
&lt;br /&gt;
[[File:PostCSS scheme.svg|thumb|right|PostCSS workflow]]&lt;br /&gt;
&lt;br /&gt;
Unlike [[Sass (stylesheet language)|Sass]] and [[Less (stylesheet language)|Less]], PostCSS is not a CSS-compiled template language but a [[Software framework|framework]] to develop CSS tools.&amp;lt;ref name=&amp;quot;why-postcss&amp;quot;&amp;gt;[https://github.com/postcss/postcss/issues/861 What is PostCSS discussion]&amp;lt;/ref&amp;gt; However, it can be used to develop a template language such as Sass and LESS.&amp;lt;ref&amp;gt;[http://webdesign.tutsplus.com/tutorials/postcss-deep-dive-preprocessing-with-precss--cms-24583 PostCSS Deep Dive: Preprocessing with “PreCSS”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The PostCSS core consists of:&amp;lt;ref name=&amp;quot;cssconfus&amp;quot;&amp;gt;[https://www.youtube.com/watch?v=1yUFTrAxTzg Andrey Sitnik - PostCSS: The Future After Sass and LESS]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CSS [[parser]]&amp;#039;&amp;#039;&amp;#039; that generates an object tree ([[Abstract syntax tree|AST]]) for a line of CSS-code;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Set of [[Object-oriented programming|classes]]&amp;#039;&amp;#039;&amp;#039; that comprise the tree;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CSS generator&amp;#039;&amp;#039;&amp;#039; that generates a CSS line for the object tree;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Code map generator&amp;#039;&amp;#039;&amp;#039; for the CSS changes made.&lt;br /&gt;
&lt;br /&gt;
All the useful features are made available through plugins. The plugins are small programs working with [[Abstract syntax tree|the object tree]]. After the core has transformed a CSS string into an object tree, the plugins, by turn, analyze and change the tree. Then the PostCSS core generates a new CSS string for the plugin-changed tree.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
Both the PostCSS core and the plugins are written in [[JavaScript]] and distributed through [[npm (software)|npm]].&lt;br /&gt;
&lt;br /&gt;
PostCSS offers [[Application programming interface|API]] for low-level JavaScript operations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
// Load the core and plugins from npm&lt;br /&gt;
const postcss = require(&amp;#039;postcss&amp;#039;)&lt;br /&gt;
const autoprefixer = require(&amp;#039;autoprefixer&amp;#039;)&lt;br /&gt;
const precss = require(&amp;#039;precss&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
// Indicate the plugins to use &lt;br /&gt;
const processor = postcss([autoprefixer, precss])&lt;br /&gt;
&lt;br /&gt;
// Indicate the CSS code and the names of the input/output file &lt;br /&gt;
processor.process(&amp;#039;a {}&amp;#039;, { from: &amp;#039;./app.css&amp;#039;, to: &amp;#039;./app.build.css&amp;#039; })&lt;br /&gt;
  // Use Promise API in case there are asynchronous plugins&lt;br /&gt;
  .then(result =&amp;gt; {&lt;br /&gt;
    // Get the post-processed CSS code displayed&lt;br /&gt;
    console.log(result.css)&lt;br /&gt;
    // Get the warning messages displayed&lt;br /&gt;
    for ( let message of result.warnings() ) {&lt;br /&gt;
      console.warn(message.toString())&lt;br /&gt;
    }&lt;br /&gt;
  })&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are official tools making it possible to use PostCSS with build systems such as [[Webpack]],&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss-loader postcss-loader]&amp;lt;/ref&amp;gt; [[Gulp.js|Gulp]],&amp;lt;ref&amp;gt;[https://github.com/postcss/gulp-postcss gulp-postcss]&amp;lt;/ref&amp;gt; and [[Grunt (software)|Grunt]].&amp;lt;ref&amp;gt;[https://github.com/nDmitry/grunt-postcss grunt-postcss]&amp;lt;/ref&amp;gt; There is also a console interface available for download.&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss-cli postcss-cli]&amp;lt;/ref&amp;gt; [[Browserify]] or [[Webpack]] can be used to open PostCSS in a browser.&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss/issues/830 Running postcss in the browser]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Syntaxes ===&lt;br /&gt;
&lt;br /&gt;
PostCSS allows changing the [[parser]] and generator. In this case, PostCSS could be used to work with the [[Less (stylesheet language)|Less]]&amp;lt;ref&amp;gt;[https://github.com/webschik/postcss-less postcss-less]&amp;lt;/ref&amp;gt; and [[Sass (stylesheet language)|SCSS]]&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss-scss postcss-scss]&amp;lt;/ref&amp;gt; sources. However, PostCSS on its own cannot compile Sass or Less to CSS. What it does is change the original files — for instance, by sorting the CSS properties or checking the code for mistakes.&lt;br /&gt;
 &lt;br /&gt;
Besides, PostCSS supports SugarSS, a syntax not unlike [[Sass (stylesheet language)|Sass]] and [[Stylus (stylesheet language)|Stylus]] in its simplicity and succinctness.&amp;lt;ref&amp;gt;[https://github.com/postcss/sugarss sugarss]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
&lt;br /&gt;
The number of PostCSS plugins amounts to more than 300.&amp;lt;ref&amp;gt;[https://github.com/himynameisdave/postcss-plugins PostCSS plugins list]&amp;lt;/ref&amp;gt; PostCSS plugins can solve most CSS processing tasks ranging from analysis and properties sorting to [[Minification (programming)|minification]]. However, the plugins significantly vary in quality and popularity.&lt;br /&gt;
&lt;br /&gt;
The complete plugin list can be found on [http://postcss.parts/ postcss.parts]. Below are a few examples, with the what-fors explained:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Autoprefixer&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[https://github.com/postcss/autoprefixer autoprefixer]&amp;lt;/ref&amp;gt; to add and clear browser prefixes. It is the most popular PostCSS plugin. According to the [[SitePoint]] polling, 56% of respondents used Autoprefixer in March 2016.&amp;lt;ref&amp;gt;[https://www.sitepoint.com/results-ultimate-css-survey/ The Results of The Ultimate CSS Survey]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CSS Modules&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[https://github.com/css-modules/css-modules css-modules]&amp;lt;/ref&amp;gt; to get CSS selectors isolated and code organized. It is supplied as part of the popular bundler [[Webpack]].&amp;lt;ref&amp;gt;[https://github.com/webpack/css-loader/blob/5a003e00645d2ed0b3e759db06f58a08fbdd6745/package.json#L17-L20 css-loader dependencies]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;stylelint&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[http://stylelint.io/ stylelint]&amp;lt;/ref&amp;gt; to [[Static program analysis|analyze]] CSS code for mistakes and check style consistency. It is used by [[Wikipedia]],&amp;lt;ref name=&amp;quot;stylelint-wiki&amp;quot; /&amp;gt; [[Facebook]]&amp;lt;ref name=&amp;quot;stylelint-fb&amp;quot; /&amp;gt; and [[GitHub]].&amp;lt;ref name=&amp;quot;stylelint-gh&amp;quot; /&amp;gt; Another plugin, &amp;#039;&amp;#039;&amp;#039;stylefmt&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[https://github.com/morishitter/stylefmt stylefmt]&amp;lt;/ref&amp;gt; fixes the CSS code according to the stylelint settings.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PreCSS&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[https://github.com/jonathantneal/precss precss]&amp;lt;/ref&amp;gt; to perform some [[Sass (stylesheet language)|Sass]]/[[Less (stylesheet language)|Less]] preprocessing functions.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;postcss-cssnext&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[http://cssnext.io/ cssnext.io]&amp;lt;/ref&amp;gt;  to emulate features from unfinished CSS specification drafts. Used by [[Wikipedia]].&amp;lt;ref name=&amp;quot;postcss-wiki&amp;quot; /&amp;gt; &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;cssnano&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[http://cssnano.co/ cssnano.co]&amp;lt;/ref&amp;gt; to make CSS smaller in size by getting rid of the spaces and rewriting the code succinctly. Used by [[Webpack]], [[BBC]], and JSFiddle.&amp;lt;ref&amp;gt;[https://github.com/ben-eb/cssnano/issues/45 cssnano users list]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RTLCSS&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[http://rtlcss.com/ rtlcss.com]&amp;lt;/ref&amp;gt; to change CSS code so that the design should be suitable for [[right-to-left]] writing (such is applied in [[Arabic]] and [[Hebrew]]). It is used by [[WordPress]].&amp;lt;ref&amp;gt;[https://bbpress.trac.wordpress.org/ticket/2848 RTL CSS generation: Switch from CSSJanus to RTLCSS]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;postcss-assets&amp;#039;&amp;#039;&amp;#039;,&amp;lt;ref&amp;gt;[https://github.com/assetsjs/postcss-assets postcss-assets]&amp;lt;/ref&amp;gt; &amp;#039;&amp;#039;&amp;#039;postcss-inline-svg&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[https://github.com/TrySound/postcss-inline-svg postcss-inline-svg]&amp;lt;/ref&amp;gt; and &amp;#039;&amp;#039;&amp;#039;postcss-sprites&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[https://github.com/2createStudio/postcss-sprites postcss-sprites]&amp;lt;/ref&amp;gt; to work with graphics.&lt;br /&gt;
&lt;br /&gt;
There are a number of tools expanding their functionality by PostCSS. For example, it is PostCSS that the popular bundler [[Webpack]] uses to work with CSS.&amp;lt;ref&amp;gt;[https://github.com/webpack/css-loader/blob/5a003e00645d2ed0b3e759db06f58a08fbdd6745/lib/processCss.js#L18 css-loader sources]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Criticism ==&lt;br /&gt;
&lt;br /&gt;
Despite certain plugins having faced criticism,&amp;lt;ref name=&amp;quot;trouble-future-specs&amp;quot;&amp;gt;[https://css-tricks.com/the-trouble-with-preprocessing-based-on-future-specs/ The Trouble With Preprocessing Based on Future Specs]&amp;lt;/ref&amp;gt; some PostCSS plugins have become de facto standard. For instance, [[Google]] recommends using Autoprefixer to solve the problem of browser prefixes in CSS.&amp;lt;ref&amp;gt;[https://developers.google.com/web/tools/setup/setup-buildtools#dont-trip-up-with-vendor-prefixes Set Up Your Build Tools]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The industry opinion of PostCSS is highly positive,&amp;lt;ref&amp;gt;[https://www.smashingmagazine.com/2015/12/introduction-to-postcss/ An Introduction To PostCSS]&amp;lt;/ref&amp;gt; it going as far as Sass developers considering PostCSS a good addition to Sass.&amp;lt;ref name=&amp;quot;sass-postcss&amp;quot;&amp;gt;[https://css-tricks.com/extending-sass-with-postcss/ Extending Sass with PostCSS]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The biggest question is whether PostCSS plugins should be the only option to use when making a CSS build system. On the one hand, PreCSS or cssnext can perform many Sass and Less functions,&amp;lt;ref&amp;gt;[https://benfrain.com/breaking-up-with-sass-postcss/ Breaking up with Sass: it’s not you, it’s me]&amp;lt;/ref&amp;gt; with SugarSS possibly being a good replacement for the minimalistic syntax of Sass and Stylus.&amp;lt;ref&amp;gt;[https://forums.meteor.com/t/css-modules-for-meteor-without-webpack/19682/25 SugarSS discussion on Meteor forum]&amp;lt;/ref&amp;gt; On the other hand, some experts, including the PostCSS creator himself, recommend sticking to Sass and Less for legacy projects.&amp;lt;ref name=&amp;quot;dotcss&amp;quot;&amp;gt;[https://www.youtube.com/watch?v=cGnlKFtAb64 dotCSS 2015 - Andrey Sitnik - Fix Global CSS with PostCSS]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Advantages ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Features.&amp;#039;&amp;#039;&amp;#039; Many PostCSS plugins one of a kind,&amp;lt;ref&amp;gt;[https://www.sitepoint.com/postcss-mythbusting/ PostCSS Mythbusting: Four PostCSS Myths Busted]&amp;lt;/ref&amp;gt; PostCSS is often used as an addition to Sass and Less.&amp;lt;ref&amp;gt;[http://webdesign.tutsplus.com/tutorials/using-postcss-together-with-sass-stylus-or-less--cms-24591 Using PostCSS Together with Sass, Stylus, or LESS]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Unification.&amp;#039;&amp;#039;&amp;#039; PostCSS plugins cover most CSS building tasks from [[Static program analysis|checking the code]] for mistakes to [[Minification (programming)|minification]]. As a result, all CSS tools can share the same parser, architecture, and development tools. PostCSS allows for better performance by making all the plugins use the same object tree — in contrast to the common practice of each tool creating one of its own.&amp;lt;ref name=&amp;quot;why-postcss&amp;quot; /&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Modules.&amp;#039;&amp;#039;&amp;#039; The user is free in their choice of PostCSS plugins and can switch off the unnecessary ones for faster performance.&amp;lt;ref&amp;gt;[https://twitter.com/elmd_/status/766254562135113728 PostCSS performance discussion in Twitter]&amp;lt;/ref&amp;gt; With different plugins solving the same problems, the user can choose whatever best fits their needs.&amp;lt;ref&amp;gt;[https://ashleynolan.co.uk/blog/postcss-a-review PostCSS – Sass Killer or Preprocessing Pretender?]&amp;lt;/ref&amp;gt; The PostCSS creator believes that the higher number of plugins compete for the user’s attention, the better they will eventually become.&amp;lt;ref  name=&amp;quot;cssconfus&amp;quot; /&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Speed.&amp;#039;&amp;#039;&amp;#039; PostCSS is equipped with one of the fastest JS-based CSS parsers.&amp;lt;ref&amp;gt;[https://github.com/postcss/benchmark/blob/master/parsers.js PostCSS parsers benchmark]&amp;lt;/ref&amp;gt; It is up to twenty times faster than Ruby Sass and four times faster than Less in doing basic preprocessing.&amp;lt;ref&amp;gt;[https://github.com/postcss/benchmark/blob/master/preprocessors.js PostCSS preprocessors benchmark]&amp;lt;/ref&amp;gt; However, real efficiency highly depends on the number of the plugins installed. In fact, the PostCSS creators themselves have confirmed that modern preprocessors work too fast for a speed up to be noticeable.&amp;lt;ref&amp;gt;[https://evilmartians.com/chronicles/postcss-1_5x-faster PostCSS becomes 1.5x faster]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Disadvantages ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Difficult to configure.&amp;#039;&amp;#039;&amp;#039; Some developers tend to avoid the burden of choosing plugins and tuning them up to work together.&amp;lt;ref&amp;gt;[https://medium.com/@wob/the-sad-state-of-web-development-1603a861d29f The Sad State of Web Development]&amp;lt;/ref&amp;gt; Ready-made plugin sets are only a partial solution to the problem.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Non-standard syntax.&amp;#039;&amp;#039;&amp;#039; With each project using its own plugin set, a new developer might not understand that the function unknown is related to the unpopular PostCSS plugin.&amp;lt;ref name=&amp;quot;sass-postcss&amp;quot; /&amp;gt; It is recommended to indicate  file plugins with postcss-use,&amp;lt;ref name=&amp;quot;dotcss&amp;quot; /&amp;gt; but some people find it unnecessary.&amp;lt;ref&amp;gt;[https://npm-stat.com/charts.html?package=postcss-use postcss-use downloads]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Selectors and values using separate parsers.&amp;#039;&amp;#039;&amp;#039; PostCSS saves CSS selectors and property values as lines without further parsing them. To parse them, plugins have to use extra parsers. The PostCSS team is going to fix this in future versions.&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss/issues/754 Integrate value &amp;amp; selector parsing into PostCSS core]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sequential processing.&amp;#039;&amp;#039;&amp;#039; With the object tree being able to respond to only one plugin at a time, having a number of plugins might result in lower performance. Besides, there are functions no plugin can process. The PostCSS team is going to fix this in future versions.&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss/issues/296 Event based API]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Born in the course of the Rework project, the idea of modular CSS processing was suggested by TJ Holowaychuk September 1, 2012.&amp;lt;ref&amp;gt;[https://github.com/reworkcss/rework/commit/0a7be255bfe753d03f93c7072351266fa636e80a First Rework commit]&amp;lt;/ref&amp;gt; February 28, 2013, TJ expressed it in public.&amp;lt;ref&amp;gt;[https://web.archive.org/web/20140918100709/http://tjholowaychuk.tumblr.com/post/44267035203/modular-css-preprocessing-with-rework Modular CSS preprocessing with rework]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
March 14, 2013, Andrey Sitnik’s front-end work for Evil Martians resulted in Autoprefixer, a Rework-based plugin.&amp;lt;ref&amp;gt;[https://github.com/postcss/autoprefixer/commit/d36346effe999e82fa8064076dc5f0e8f37e7e48 First Autoprefixer commit]&amp;lt;/ref&amp;gt; Initially, the plugin name was rework-vendors.&amp;lt;ref&amp;gt;[https://github.com/postcss/autoprefixer/commit/419a77d4d871a1d7be34ff7129e3cbf7fb755b0c Autoprefixer rename commit]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As Autoprefixer grew, Rework could no longer to meet its needs.&amp;lt;ref&amp;gt;[https://github.com/reworkcss/css/issues/20  Facilitate autoprefixer needs]&amp;lt;/ref&amp;gt; September 7, 2013,&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss/commit/2d96cea96e3a96f616c28f897358086a69caa506 First PostCSS commit]&amp;lt;/ref&amp;gt; Andrey Sitnik started to develop PostCSS based on the Rework ideas.&amp;lt;ref&amp;gt;[https://evilmartians.com/chronicles/postcss-second-birthday PostCSS Second Birthday]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 3 months, the first PostCSS plugin, grunt-pixrem was released.&amp;lt;ref&amp;gt;[https://github.com/robwierzbowski/grunt-pixrem/commit/0f7b662277edfc12f02f5615c66630be5d137b3a First grunt-pixrem commit]&amp;lt;/ref&amp;gt; December 22, 2013, Autoprefixer version 1.0 migrated to PostCSS.&amp;lt;ref&amp;gt;[https://github.com/postcss/autoprefixer/releases/tag/1.0 Autoprefixer release 1.0 “Plus ultra”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For PostCSS, the primary style focus is [[alchemy]].&amp;lt;ref&amp;gt;[https://github.com/postcss/postcss.org/issues/4 PostCSS website design discussion]&amp;lt;/ref&amp;gt; The project logo represents the [[philosopher&amp;#039;s stone]].&amp;lt;ref&amp;gt;[https://twitter.com/postcss/status/632182461108240384 Tweet about PostCSS logo]&amp;lt;/ref&amp;gt;  Major and minor PostCSS versions get their names after the [[Goetia|Ars Goetia]] [[List of demons in the Ars Goetia|demons]].&amp;lt;ref&amp;gt;[https://twitter.com/autoprefixer/status/413085919420219392 Tweet about PostCSS releases]&amp;lt;/ref&amp;gt; For instance, version 1.0.0 is called Marquis Decarabia.&lt;br /&gt;
&lt;br /&gt;
The term postprocessor has caused some confusion.&amp;lt;ref&amp;gt;[http://silvenon.com/css-pre-vs-post-processing/ CSS pre- vs. post-processing]&amp;lt;/ref&amp;gt; The PostCSS team used the term to show that PostCSS was not a template language (preprocessor) but a CSS tool. However, some developers think the term postprocessor would better suit browser tools&amp;lt;ref name=&amp;quot;trouble-future-specs&amp;quot; /&amp;gt;  (for instance, [https://leaverou.github.io/prefixfree/ -prefix-free]). The situation has become even more complicated after the release of PreCSS. Now, instead of postprocessor, the PostCSS team use the term processor.&amp;lt;ref&amp;gt;[https://twitter.com/PostCSS/status/626046993006239744 Tweet about stop using postprocessor word]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Reflist|30em}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://postcss.org/ Official website]&lt;br /&gt;
* {{GitHub|postcss|postcss}}&lt;br /&gt;
* [http://postcss.parts/ Plugin list]&lt;br /&gt;
&lt;br /&gt;
[[Category:Cascading Style Sheets]]&lt;br /&gt;
[[Category:Parsing]]&lt;br /&gt;
[[Category:Software using the MIT license]]&lt;br /&gt;
[[Category:Free compilers and interpreters]]&lt;br /&gt;
[[Category:Free software programmed in JavaScript]]&lt;/div&gt;</summary>
		<author><name>GreenC bot</name></author>	</entry>

	</feed>