Version 5.0.1

May 14, 2026

Changed

  • Renamed the main plugin class from craftpulse\tailwind\Plugin to craftpulse\tailwind\Tailwind (and src/Plugin.php to src/Tailwind.php), aligning with the Craft ecosystem convention of naming the entry class after the plugin. Third-party code that imported the old class name will need to update its use statement.
  • Extracted plugin scaffolding into base\PluginTrait (event and URL registration, settings response overrides) and services\ServicesTrait (typed service getters and static config() for component registration), matching the PluginTrait / ServicesTrait split used across the other CraftPulse plugins.
  • composer.json license declaration switched from MIT to proprietary to match the LICENSE.md commercial terms.

Fixed

  • LICENSE.md now uses the canonical Craft License text (added the # The Craft License heading and straight quotes throughout). Required for Craft Plugin Store submission.

Version 5.0.0

May 13, 2026

Initial public release for Craft CMS 5.

Added

  • Server-side Tailwind CSS class merging via craft.tailwind.merge(), wrapping michtio/tailwind-merge-v3 and michtio/tailwind-merge-v4 (drop-in forks of gehrisandro/tailwind-merge-php and tales-from-a-dev/tailwind-merge-php — see the Commerce-compatibility note below).
  • Named-slot ClassList builder via craft.tailwind.classes({ slot: '...' }), with immutable .override(), .extend(), .without(), .merge(), .get(), and .toArray().
  • Automatic Tailwind v3/v4 detection from project files. Scans for @import "tailwindcss" / @theme (v4) and tailwind.config.{js,ts,cjs,mjs} (v3). Configurable buildchainPath and cssPath; manual override via tailwindVersion. Exposed as craft.tailwind.version.
  • CSS custom properties container via craft.tailwind.cssVariables (.get(), .has(), .all(), .isEmpty(), .asCss()), with save-time validation against a safe-character whitelist and render-time silent drop of unsafe values.
  • <style> tag rendering via craft.tailwind.include({ nonce, media, title }) — returns Twig\Markup so no |raw is required.
  • Auto-inject mode (autoInject + autoInjectAttributes) that registers the CSS variables style block on every site request via View::registerCss(). Skips console and CP requests.
  • O(1) LRU merge cache, request-scoped, with configurable cacheSize (set to 0 to disable). Hit/miss counters surfaced through the debug panel.
  • Yii debug toolbar panel showing total calls, unique inputs, cache hit rate, and per-merge detail (input, output, resolved/passthrough, count, originating template + line). Zero overhead when the debug module isn't loaded.
  • CP settings page organized into Detection / Output / Typography tabs, with editable tables for cssVariables and autoInjectAttributes, per-field override warnings when shadowed by config/tailwind.php, a conditional CSS-path field shown only when version detection includes v4, and a read-only render in production (when allowAdminChanges is disabled) so editors can still inspect configured values without being able to modify them.
  • Multi-environment configuration support in config/tailwind.php (Craft's standard '*' + env pattern).
  • Compatible with Craft Commerce — both merger dependencies are forks (michtio/tailwind-merge-v3, michtio/tailwind-merge-v4) with a widened psr/simple-cache constraint (^1.0 || ^2.0 || ^3.0) so installations resolve cleanly when Commerce's ibericode/vat chain transitively requires psr/simple-cache ^1.0. The forks replace the upstream package names — any other dependency requiring the originals is satisfied transparently.
  • Tailwind class prefix support (bare-form value, e.g. prefix: 'tw') wired into both v3 and v4 engines — v3 emits tw-px-4, v4 emits tw:px-4, matching each version's native prefix syntax. Validation rejects trailing-hyphen input on explicit v4 to surface the v3-vs-v4 syntax difference at save time.
  • Opt-in @tailwindcss/typography conflict resolution. Enable the typography setting to have prose-{size} and prose-{theme} classes merge as mutually-exclusive utilities (sizes among themselves, colors among themselves, size and color stay orthogonal). Defaults cover the suffixes shipped by @tailwindcss/typography 0.5.x; typographyExtraSizes / typographyExtraColors register custom suffixes for your own prose-* themes.
  • Debug toolbar row showing the active typography config — whether resolution is enabled and which custom suffixes are loaded.