Skip to main content

PostCSS Release Codenames Come From the Ars Goetia

Open the PostCSS changelog and the headings do not look like the ones in most JavaScript projects. Instead of bare version numbers, the entries read 8.5 "Duke Alloces", 8.4 "President Camio", 8.3 "Duke Murmur", and 8.0 "President Ose". Every one of those names is a demon catalogued in the Ars Goetia, and the title in front of it is the rank that the text assigns to that demon. The practice is not a recent joke either: the very first release, 0.1, is listed as "Count Andromalius", so the naming convention has been in place since the project began.

The Ars Goetia is the first of the five books that make up The Lesser Key of Solomon, an anonymously compiled grimoire that draws on material several centuries older and was assembled in its familiar form in the mid seventeenth century. Its best known section is a catalogue of seventy two spirits, each with a name, a noble rank, and a description of what it supposedly does. The ranks matter for reading PostCSS releases, because kings, dukes, presidents, marquises, princes, and counts are all represented in the list. It is worth noting that the count and the ranking of the spirits differ between the Ars Goetia and Johann Weyer's earlier Pseudomonarchia Daemonum, one of its main sources, so the PostCSS codenames follow the Goetic ordering rather than the older one. English readers mostly met the material through the Mathers and Crowley edition published in 1904 as The Book of the Goetia of Solomon the King.

The full roll call in the changelog is a decent tour of the hierarchy. PostCSS 2.0 is "King Belial", 2.1 is "King Amdusias", 2.2 is "Marquis Cimeies", 3.0 is "Marquis Andrealphus", 4.0 is "Duke Flauros", 4.1 is "Marquis Andras", 5.0 is "President Valac", 5.1 is "King and President Zagan", 5.2 is "Duke Vapula", 6.0 is "Marquis Orias", 7.0 is "President Amy", 8.1 is "Duke Gemory", 8.2 is "Prince Orobas", and so on through the current 8.x line. Where a source gives a demon two ranks, the changelog keeps both, which is why Zagan appears as king and president rather than one or the other.

The mechanics of the pattern are simple enough to be useful. Codenames are attached to minor and major releases only. Patch releases stay plain, so 8.5.30 and 8.5.29 carry no name, and the same is true further back in the file. Nothing in the published package changes either: package.json and the npm registry only ever see the numeric version, so npm ls postcss will never print "Duke Alloces". The name lives in the changelog and in conversation, not in the artifact you install.

That is exactly what makes the convention practical rather than merely decorative. Named milestones give teams a handle for debugging and support. When a build pipeline upgrades and CSS output changes shape, "this started with 8.4 Camio" is a far better search anchor than a three part number that returns hundreds of hits in an issue tracker, and it gives release managers a reason to write a changelog entry that names the behavior change instead of dumping a commit list. PostCSS also states at the top of the same changelog that the project follows semantic versioning, so the demon names sit on top of a versioning discipline rather than replacing it.

It also says something about the project's culture. PostCSS was created by Andrey Sitnik and grew out of his work at Evil Martians, where it started as a way to get more out of the Autoprefixer pipeline. That ecosystem has always had a taste for personality, and the demon catalogue fits the same instinct as the project's logo, which depicts the philosopher's stone, an alchemical symbol with the same occult framing as the Ars Goetia itself. Both are style choices that cost nothing and break nothing.

Codenames do not change how the parser handles a malformed declaration or whether your source maps line up, and no reviewer should care about them in a pull request. But humans remember "Duke Alloces" and they do not remember 8.5.0. In a codebase whose life span is measured in years, a name that makes people look up the history is worth more than it costs.

We use cookies for ads and analytics.