Packages

@tailwindcss/turbopack

4.3.4 · 2 Nov 2026MIT2.1M / weekRepositoryHomepagenpmAtom feed

Your version

4.3.4

latest2 Nov 2026Where it was published

In short

1 new2 faster39 fixed

Release note

Added

Fixed

  • Ensure watch mode detects changes to symlinked @source files whose real paths aren't otherwise scanned

  • Ensure variants using @scope wrap generated utilities instead of nesting inside them

  • Ensure nested @scope rules preserve their scoping semantics when flattened

  • Preserve declarations directly inside @scope by wrapping them in :where(:scope)

  • Ensure generated utilities include a space in empty var() fallbacks (e.g. var(--tw-blur,) → var(--tw-blur, ))

  • Canonicalization: Convert arbitrary breakpoint and container query variants to named equivalents (e.g. max-[64rem]:flex → max-lg:flex)

  • Prevent @tailwindcss/vite from crashing on every edit under Vite's experimental bundledDev mode

  • Ensure @tailwindcss/oxide falls back to WASM on platforms without native bindings

  • Extract class candidates from Ruby %w and %W literals using angle brackets or custom delimiters (e.g. %w<flex>, %w|flex|), including in Slim and Haml templates

  • Preserve whitespace in --default(…) values in functional @utility definitions (e.g. --default(box alphabetic) no longer becomes boxalphabetic)

  • Ensure automatic source detection respects negation-based .gitignore files (e.g. /* followed by !/… patterns)

  • Ensure root theme('…') namespace lookups in JavaScript plugins and config files return the full namespace object instead of the value of its DEFAULT key

  • Skip ignored directories when generating watch globs instead of walking their contents on every rebuild

  • Drop invalid UTF-8 candidates during class detection

  • Prevent @tailwindcss/vite from forcing full-page reloads for scanned files that Vite does not handle as modules (e.g. .php files)

  • Canonicalization: Don't merge utilities that reference different theme variables set to CSS-wide keywords like unset

  • Don't generate utilities when a modifier is used that would otherwise be silently ignored (e.g. rounded-sm/[5], shadow-sm/foo, stroke-2/50)

  • Preserve and, or, and not inside selectors in supports-[…] variants (e.g. supports-[selector(a:not(.foo))]:flex)

  • Don't warn about Angular's ::ng-deep and :host-context() when optimizing CSS

  • Don't generate CSS for candidates containing an empty additional modifier (e.g. bg-red-500/50/ and group-hover/foo//bar:flex)

  • Ensure min-*, max-*, and container query variants with decimal values are sorted numerically (e.g. min-[40.25rem] before min-[40.5rem])

  • Ensure CSS comments ending with \*/ are closed correctly instead of swallowing the CSS that follows (e.g. /* C:\temp\*/)

  • Improve style invalidation performance of group-* and peer-* variants

  • Ensure cached compilers release their loadModule and loadStylesheet callbacks after compilation

  • Canonicalization: Preserve & when moving a pseudo-element into * or ** (e.g. [&_::before]:flex → **:[&::before]:flex)

  • Ensure the Set.prototype.intersection polyfill in canonicalizeCandidates(…) returns the intersection instead of the first set on Node.js < 22

  • Canonicalization: Ensure inline theme(…) alphas with more than 2 decimals migrate to a percentage modifier with the same opacity (e.g. theme(colors.red.500/.12345) → text-red-500/[12.345%], not text-red-500/[12.345])

  • Canonicalization: Preserve inline theme(…) alphas as an arbitrary percentage when a custom --opacity-* theme value would change the opacity (e.g. theme(colors.red.500/50%) → text-red-500/[50%] with --opacity-50: 10%)

  • Ensure the @property fallback isn't applied in Safari versions that no longer support margin-trim: inline

  • Treat viewport units like dvmin and svi and font-relative units like cap and rex as lengths in arbitrary values (e.g. text-[10dvmin] generates font-size instead of color)

  • Write plugin logs to stderr in tailwindcss canonicalize so they don't end up in the results on stdout

  • Extract class shorthands on later lines when Pug text, comments, or quoted attribute values contain unbalanced brackets, or a quote that doesn't start a string (e.g. input(pattern=/"/.source)) (#20547, #20572)

  • Underline the correct occurrence of an unsupported data type in --value(…) warnings

  • Canonicalization: Prefer an existing candidate when collapsing utilities over another utility with the same default theme value (e.g. text-foreground text-primary → text-primary, not text-card-checked-border)

  • Canonicalization: Don't collapse utilities into a utility that uses another theme variable with the same default value (e.g. mt-card mb-card → my-card, not my-4)

  • Ensure @tailwindcss/postcss rewrites relative url(…)s of stylesheets that are inlined before it runs (e.g. @imports in Vite) in optimized builds

  • Drop nested rules that put a combinator after a pseudo-element when using pseudo-element variants (e.g. selection:* on a utility with a nested & > * rule)

  • Don't generate CSS for arbitrary values with unbalanced parentheses or brackets (e.g. w-[calc(1px] or [--x:a[b])

  • Canonicalization: Prevent collapse: true from taking exponentially longer when classes are linked through a utility that sets many properties (e.g. sr-only)

  • Ensure & is substituted inside :-moz-any(…) and :-webkit-any(…) in custom variants (e.g. @custom-variant firefox (:-moz-any(&));)

  • Ensure the standalone macOS binaries have a valid code signature, so macOS 27 no longer kills them at launch

  • Ensure @tailwindcss/turbopack and @tailwindcss/webpack rebuild when the input CSS changes (e.g. next dev with Turbopack no longer serves the CSS of the previous edit)

  • Canonicalization: Don't drop a utility that sets a --tw-* variable when an unrelated property has the same value (e.g. link mt-4 no longer becomes mt-4 when link sets margin-top: 16px and --tw-translate-x: 16px)

  • Decode single-digit hexadecimal escapes in theme variable and @utility names as the CSS spec does (e.g. @theme { --color-\0: red; } no longer registers --color-0)

  • Don't treat !important inside strings, comments or url() in declaration values as the important flag (e.g. content: "a !important b")

  • Parse a custom property at the end of the input when it has no trailing ; (e.g. --foo: bar as the last declaration)

  • Keep a declaration without a ; at the end of the CSS input (e.g. color: red)