I hope the time of CSS preprocessors is over.
Why? For a couple reasons:
CSS is a language that has a definition of its syntax specified in a document. This means that everything CSS is and does fits within this predefined grammar, and also every new feature that will ever be dreamed up and added to the language will also fall inside of the grammar we can read and use today.
This means if you were setting out to create a CSS preprocessor - you should write something that abides by the same CSS grammar rules so when you add your new features and functionality you can be sure that it won't ever be something that's added to CSS. The key here is that you have to fully support CSS, while claiming to do things CSS will never do.
Most preprocessors get that backward. Most preprocessors don't support CSS's grammar, but rather have a limited ability to parse or read CSS, and rather than trying to do things CSS will never do, most of them claim to let you write things that will someday be in CSS in your code today. This is where all of the problems with CSS processors as we have them today lies.
An example - Sass followers often claim:
One great and recent example was CSS variables, the real kind of CSS variables like --bg: blue; and var(--bg). When the people who made SCSS thought of what was valid CSS or wasn't valid CSS, because this wasn't based on CSS's grammar but their understanding (or guesses) at what CSS was, when this feature was first added to CSS it broke SCSS. So they updated it and now it works. Fast forward a year and CSS is in the process of standardizing min() and max() functions. But SCSS already added their own min() function to CSS so now you have to pick:
min() functionmin() functionYou can't do both!
Over time as CSS grows (always within the grammar that has been defined for it) more and more you see preprocessor maintainers having extra work to do just to keep normal, regular CSS from blowing up their compilers and breaking the sites of all of their users. And sometimes, like with min(), they have already camped on something that eventually ends up in CSS's namespace and now it's incompatible with actual CSS and will be…forever.
So to summarize, preprocessors are (truthfully):
The sooner people put down their preprocessors, the sooner they'll realize they were doing a lot of extra work (learn non-standard language, run compiler to convert file to another language every time you save before you can preview your work, makes it harder to debug the resulting CSS, etc) to solve problems they think they have…that just actually using vanilla CSS might solve for them without all the extra work.