honest comparison

css-is-awesome vs Tailwind vs Bootstrap

Three good tools. Different jobs. Here is where each one actually wins — and where cia is the only one that does the thing.

Compared against Tailwind CSS 4.3 and Bootstrap 5.3. cia sizes are measured from dist/; star counts and project ages come from GitHub. Figures verified 2026-08-17.

Featurecss-is-awesomeTailwindBootstrap
Installation1 <link> tagBuild step required1 <link> tag
JavaScript shipped in packagecia npm package contains zero .js/.mjs files. JS-driven features ship as separate add-on packages.0 KB0 KB (CSS-only)~25 KB (modals, dropdowns, tabs)
Gzipped core (tokens + resets)2.4 KB~10 KB (utilities JIT)~25 KB
Tokens-only bundlescss/tokens.scss compiles to a 2.2 KB :root-vars-only file. Useful for consumers who want cia tokens with their own opinions about everything else.2.2 KBn/an/a
Full bundle gzipped7.3 KBvaries (JIT)~29 KB CSS + 25 KB JS
Mixin APIcia is mixin-first; classes are an opt-in convenience layer. Tailwind rejects mixins on philosophy.primary APINoavailable
Utility classescia utilities default to off — Sass consumers add `@use ... with ($utilities: true)` to opt in. Pre-built dist file still ships every utility for CDN consumers.opt-inYesYes
Zero-JS interactive componentscia ships native-primitive components — <details name>, <dialog>, [popover], radio+:has(). Browser handles state, no JS.6 (Accordion · Modal · Tooltip · Dropdown · Tabs · CopyButton)0 (need Headless UI)No
Runtime theming (swap one file)Only cia lets you swap the entire visual identity by replacing one CSS file at runtimeYesNoNo
Pair two brands by mode (light=A, dark=B)Native <link media> trick. No mainstream design system has this. See /docs/themes/pairing.2 <link> tagsNoNo
Theme files shippedEach family ships three files: the base name auto-switches both modes via light-dark(), plus pinned -light and -dark variants. Terminal is the exception — terminal is dark-only by design and terminal-light is a separate daylight identity. 24 SCSS sources, 24 built files, all regenerated by npm run build:css:themes.24 files across 8 families0 (config only)2 (light / dark)
Drop a theme file in with no markup changeEvery theme emits `:root, :root[data-theme="name"]`, so swapping the file reskins the page on its own — data-theme is optional. It is required only for the 24-theme bundle, where the attribute is the only thing distinguishing themes.YesNoNo
In-browser theme editorEdit any of the 127 required tokens with color pickers / sliders / inputs, see every component reskin live, download a contract-conformant theme.css. Visit /themes.live preview + downloadable theme.cssNoNo
Typed theme contract + validatorscripts/theme-validator.js fails the build if any theme misses a contract token or a contrast pair. check:theme-drift separately proves the committed CSS still matches its SCSS source. No equivalent in Tailwind or Bootstrap.127 required + 36 optional · CI gateuntyped configNo
Themeable spacing scaleA theme owns the numbered spacing scale, so swapping a theme re-proportions the page rather than only recolouring it. The t-shirt names (--space-md etc.) are optional aliases the library emits as var() references into the numbered scale.--space-0…9, contract-requiredconfig-time only (rebuild)Sass variables (rebuild)
Theme-driven animationsSame keyframes feel snappy under Terminal, floaty under Glass — zero code change. See /docs/animation.reads --duration-* / --ease per themefixed timing utilitiesfixed timing utilities
Icon systemLucide-vendored core pack at public/icons/core/. Drop a new SVG in to add it; declare a CSS var to override per theme.49-glyph core + drop-in + per-theme overrideNoseparate Bootstrap Icons package
Requires a build stepNoYesNo
JavaScript dependencyBootstrap's dropdowns, modals, tabs need bootstrap.jsNoNoYes
Class namescia is mixin-first — pick your own selector, @include the mixin. Bootstrap bakes in BEM. Tailwind stacks utilities in markup.you pickcompose utilitiesBEM-style
Tree-shakeableopt-in core/utils bundlesYessort of
React components shipped (docs site)500 (utility-only)~30
Years of battle-testingTailwind's first commit landed Oct 2017; Bootstrap's July 2011. cia is new — that is a real disadvantage, not a rounding error.new8+15+
GitHub starshandful97k+174k+

Bundle tiers

Pick the smallest tier that covers your needs. Tier choice is a <link> URL change — no rebuild.

TierSizeWhat you get
core2.4 KB gzippedTokens (CSS custom properties) + resets. The minimum to use the system.
utilities4.1 KB gzippedAll cia-* utility classes (spacing, typography, layout, color, etc.).
full7.3 KB gzippedCore + utilities + every component recipe in one file.

Where each one wins

Pick Bootstrap if

You want prebuilt components with a decade of battle-testing, and you don't mind the weight.

Pick Tailwind if

You want maximum control via utility classes, you're fine with a build step, and a huge ecosystem matters.

Pick css-is-awesome if

You want a tiny, honest SCSS system with a mixin API, and you want to reskin your site by swapping one CSS file.

The differentiator

Theme