CSS Libraries in 2026: Bootstrap Grew 42%, Tailwind Grew 12.9×
This is the "which library should I pick" page, built on one instrument: the npm downloads API, which records what build machines installed rather than what developers say they use in surveys.
Window: 2024-10-01 to 2026-10-10, pulled 2026-10-12. First 30 days against last 30 days. Change the package name at the end of that URL to check any figure here in about a minute.
The table
| Package | First 30 days | Last 30 days | Change | What it is |
|---|---|---|---|---|
tailwindcss | 46.27M | 596.2M | +12.9× | Utility-first framework |
autoprefixer | 89.93M | 287.5M | +220% | Vendor-prefix adder |
bootstrap | 19.65M | 27.9M | +42% | Component framework |
normalize.css | 4.778M | 6.026M | +26% | Browser-style baseline |
daisyui | 1.264M | 4.579M | +262% | Components on top of Tailwind |
@unocss/core | 1.429M | 3.617M | +153% | On-demand atomic engine |
@picocss/pico | 0.11M | 0.24M | +118% | Classless semantic CSS |
purecss | 0.13M | 0.09M | −31% | Small module library |
Installs, not people. Every number is my own pull, not quoted.
The ordering is the argument
The two biggest absolute numbers are tailwindcss (596.2M) and autoprefixer (287.5M). The two slowest growers are bootstrap (+42%) and normalize.css (+26%) — and note that normalize.css at 6.026M is a smaller library growing at a quarter of bootstrap's rate, which is what a baseline reset looks like when frameworks already bundle one.
purecss is the only decline here: 0.13M to 0.09M, roughly a third gone. It is a 2013-era module library whose entire pitch was "ridiculously tiny," and that pitch has been eaten from both sides — Tailwind emits only the classes you use, and Pico ships a whole page in one stylesheet nobody has to choose modules from. Small-and-hand-picked lost to small-and-automatic. I am confident in the direction; the magnitude is a small base, so treat −31% as directional rather than precise.
daisyui at +262% is the row I find most revealing, and the reason needs stating carefully. Its npm package declares no dependencies and no peerDependencies at 5.7.47, so nothing in the metadata forces Tailwind to be present — my first draft said "requires Tailwind" and the registry disagreed with me. What is true is weaker but still the point: it is documented and used as a component layer on top of Tailwind, and it grew faster than the standalone framework it usually sits beside (bootstrap, +42%). Frameworks are less often replacing each other now than stacking, and the composing layer outran the incumbent it usually displaces.
Picking one, in practice
- Building a product with a designer in the loop:
tailwindcss. The 12.9× is not a fad measurement at this scale; it is where the tooling, examples, and component ecosystems now live. - Existing Bootstrap app: keep it. +42% over two years is slow growth, not decline, and the migration cost is real. Nothing in this table justifies a rewrite.
- Documentation or a content site where you refuse to write classes:
@picocss/pico. Smallest absolute number in the table and the fastest-growing of the classless options. - You need vendor prefixes:
autoprefixeris 287.5M for a reason, but check whether your bundler already runs it before installing it again.
What this table cannot tell you
- A dependency can dwarf its own user base.
autoprefixer's 287.5M is mostly other tools running it, not you installing it. Same caveat applies totailwindcssbeing pulled by scaffolding and templates. - Downloads are not users. CI re-downloads; one monorepo can produce dozens of install events per developer.
daisyuiandtailwindcssare not independent measurements — the usual pairing means their windows overlap in real projects, so reading +262% against +12.9× as "component layers are beating utilities" would be wrong. It measures a layer that normally rides on top of the other.
Related
- CSS trends 2026 — parsers and linters, the layer underneath these
- CSS alternatives — what to use when the default stops fitting
- CSS best practices — the rules that survive a framework change