Vanilla JavaScript support for Tailwind Plus

Implementation details & use of web components

  • Tailwind Plus’ vanilla JS support is implemented as standards-based custom elements (@tailwindplus/elements).
  • Components do not use Shadow DOM (confirmed via inspection), which affects styling and event propagation; some consider this an advantage.
  • The elements are “headless”: they handle behavior and accessibility while leaving styling to Tailwind classes.
  • This approach allows usage across environments (Rails, Django templates, Vue, React, plain HTML) via a script tag or npm, avoiding framework-specific wrappers.
  • Some note this effectively restores/extends framework support (e.g., Vue) through web components instead of separate packages; others remain wary due to past abandoned Vue-specific packages.

Licensing, pricing & business model

  • Tailwind CSS itself remains free and open source; Tailwind Plus (UI components, templates, and now elements) is paid with a one-time, perpetual license.
  • Several commenters find it odd or “hilarious” that vanilla JS/headless components are behind a paywall, expecting the opposite (free primitives, paid framework integrations).
  • Others argue it’s reasonable: the library reportedly cost around $250k to develop; paid components are the Tailwind team’s main monetization path.
  • Confusion stems from the blog title and branding; some readers initially thought “vanilla JS support for Tailwind” itself was paywalled.
  • There’s discussion of revenue decline (blamed partly on AI and OSS alternatives) and a new corporate sponsorship program to support more free work.

Tailwind vs Bootstrap, CSS & design systems

  • Many criticize “class soup” (long Tailwind class lists) as unreadable and non-semantic, comparing unfavorably to Bootstrap’s shorter semantic classes.
  • Defenders say utility classes localize behavior, avoid cascade/specificity problems, and provide a shared “standard library” of spacing/colors.
  • Some teams wrap utilities into higher-level classes/components (.card, .btn) or use @apply, effectively layering semantic abstractions on top of Tailwind.
  • There’s substantial debate on whether Tailwind is a healthy evolution of CSS (functional/atomic, design-token-driven) or an overreaction to poorly managed traditional CSS.

Web components: enthusiasm & friction

  • Many welcome a major project embracing web components and see them as ideal for cross-framework UI distribution.
  • Others report disappointments: awkward lifecycle for TypeScript, attribute handling, performance and SSR issues in React, and lingering scars from Polymer-era designs.
  • Some argue web components shine mainly as a universal, framework-agnostic base; anything deeper tends to conflict with framework patterns and data binding.