Coverage — Tailwind & shadcn
What flutterwindcss covers versus Tailwind CSS and shadcn/ui — what's built, what's delegated, and the small set that's genuinely impossible in Flutter.
flutterwindcss re-creates Tailwind's styling vocabulary and shadcn's token system on Flutter's widgets layer. It deliberately doesn't clone every utility — it builds the things that matter and aren't a hard add, delegates a few to existing solutions, and is honest about the tiny set Flutter genuinely can't express. Here's exactly where it stands.
vs Tailwind CSS
~96% of daily-driver Tailwind v4 utilities are built — verified against the full v4 catalog. Two properties make effective coverage even higher: arbitrary values are native (Tailwind
needs w-[37px]; here you just write .w(37)), and bgGradient/shadow are pass-through (any
Gradient or List<BoxShadow> works, so radial/conic gradients and arbitrary shadows already do).
✅ Built — everything you reach for daily
Spacing & sizing
Color & backgrounds
Borders & radius
Typography
Effects & filters
Transforms
Layout
Variants
🟡 Not built yet — feasible, by demand
Each has a known Flutter mechanism and is scheduled when a real need appears — none is a daily-driver
and none is a wall: inset-shadow/inset-ring, mask-*, backdrop color filters, columns,
negative margins, scroll-margin/scroll-padding/overscroll-behavior, scroll-snap-stop/-type,
scrollbar-gutter, order, bg-clip-text (gradient text), background-blend-mode,
bg-repeat-space/-round, the drop-shadow filter, sticky, position: fixed, font-stretch,
border-double, text-indent, vertical-align, word-break, and the 3D-transform completion set
(backface-visibility, perspective-origin, transform-style/preserve-3d, scale-z). The full
item-by-item enumeration (with Flutter mechanisms) lives in the engine's
coverage & roadmap spec.
Shipped in 1.0.3: theme-resolved
font-sans/-serif/-mono(+FwThemeapplies the theme font),overline,object-position(fit(..., alignment:)), and the scrollbartrackColor.
↪️ Delegated by design
Not the engine's job:
| Want | Use instead |
|---|---|
Element animation — transition/duration/ease/delay, animate-spin/pulse/bounce, enter/exit | flutter_animate — a mature, Material-free chaining API (Curves.* ↔ CSS easings) |
prose, forms, table-layout, SVG fill/stroke/stroke-width, user-select, accent-color, caret-color, resize, sr-only… | the flutterbits component layer |
🚫 Genuinely impossible in Flutter
No faithful analog exists (a small, honest set): the true CSS cascade (and the open-ended
child/descendant selectors */**/[&:…]), pseudo-elements ::before/::after + content (and
placeholder/marker/selection/first-line…), float/clear, touch-action,
text-wrap: balance/pretty, auto hyphenation, bg-attachment: fixed, font-smoothing,
underline-offset, print, and text-transform as a render-time style.
Variants
The variant system mirrors Tailwind's: you declare when a rule applies and the engine resolves it lazily. The daily-driver variants are first-class:
States
Responsive
Relations
Composition
For states your component owns — checked, required, open, valid, a custom toggle — use
whenState(WidgetState.…, …): it's the faithful path for any
injected boolean state. Structural index variants (first/last/odd/nth) resolve at the
list-building site, where you own child order.
By demand (feasible, not yet built): focus-within/focus-visible, has-*/not-*/in-*,
aria-*/data-*/supports-* (bridged to whenState), and the media variants motion-safe/-reduce,
portrait/landscape, contrast-more/-less (a MediaQuery-backed resolver condition).
By design, dark is theme-level, not a per-utility dark: variant — a whole-theme swap
(FwAnimatedTheme + dark tokens) reskins everything from one switch, which is the semantic-token
model's whole point.
vs shadcn/ui
shadcn is three layers. Here's where each lands in this project:
| shadcn layer | flutterwindcss | Gap |
|---|---|---|
| Design tokens (CSS variables) | All 32 semantic tokens baked in — 19 core + chart-1…5 + 8 sidebar-* | None |
| Theming (semantic indirection, light/dark) | context.fw indirection, light/dark, FwAnimatedTheme crossfade — plus theme portability: paste any tweakcn/shadcn theme → theme.dart | None — this exceeds shadcn |
| Components (button, dialog, card…) | The flutterbits layer (copy-paste registry + CLI) | Not built yet — the next track |
The short version
flutterwindcss fully covers shadcn's design-token and theming foundation — and the
theme generator is a trick shadcn itself doesn't have. The
component library is the deliberate gap, owned by flutterbits (the registry + CLI), which is
what's next.
Next steps
Animation
flutterwindcss animates theme transitions; for element animation (Tailwind's transition/animate-*) it composes with flutter_animate — style with .tw, animate with .animate().
Spacing & sizing
Padding, margin, width/height, min/max, fractional sizing, and aspect ratio — all on .tw, in utility units of 4 logical pixels.