# Tailwind CSS changelog > A utility-first CSS framework for rapid UI development. - Vendor: Tailwind Labs - Category: Frameworks & Libraries - Official site: https://tailwindcss.com - Tracked by: What's New (https://whatsnew.fyi/product/tailwindcss) - Harvested from: GitHub (tailwindlabs/tailwindcss) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### v4.3.3 - Date: 2026-07-16 - Version: v4.3.3 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.3.3 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.3.3 - **fixed** — Support `--watch --poll[=ms]` in `@tailwindcss/cli` when filesystem events are unreliable or unavailable - **fixed** — Match arbitrary hex colors against theme colors case-insensitively during canonicalization (e.g. `bg-[#fff]` and `bg-[#FFF]` → `bg-white`) - **fixed** — Prevent Preflight from overriding Firefox's native `iframe:focus-visible` outline styles - **fixed** — Ensure `theme('colors.foo')` in JS plugins resolves correctly when both `--color-foo` and `--color-foo-bar` exist - **fixed** — Ensure fractional opacity modifiers work with named shadow sizes like `shadow-sm/12.5`, `text-shadow-sm/12.5`, `drop-shadow-sm/12.5`, and `inset-shadow-sm/12.5` - **fixed** — Parse selectors like `[data-foo]div` as two selectors instead of one - **fixed** — Ensure `@tailwindcss/postcss` rebuilds when a preprocessor like Sass changes the input CSS without changing the input file on disk - **fixed** — Ensure CSS nesting is handled even when Lightning CSS isn't run, such as in `@tailwindcss/browser` and Tailwind Play - **fixed** — Prevent achromatic theme colors from shifting hue when mixed in polar color spaces like `oklch` - **fixed** — Ensure `--spacing(0)` is optimized to `0px` instead of `0` so it remains a `` when used in `calc(…)` - **fixed** — Load `@parcel/watcher` only when needed in `@tailwindcss/cli --watch` mode, so one-off builds and `--watch --poll` work when `@parcel/watcher` can't be loaded - **fixed** — Use explicit platform fonts instead of `system-ui` and `ui-sans-serif` so CJK text respects the page's `lang` attribute on Windows - **fixed** — Prevent `@tailwindcss/upgrade` from rewriting ignored files when run from a subdirectory - **fixed** — Ensure earlier `@source` rules pointing to nested files are scanned when later `@source` rules point to files in parent folders - **fixed** — Prevent `@tailwindcss/vite` from triggering full page reloads when scanned files are processed by Vite but haven't been loaded as modules yet ###### Fixed - Support `--watch --poll[=ms]` in `@tailwindcss/cli` when filesystem events are unreliable or unavailable ([#20297](https://github.com/tailwindlabs/tailwindcss/pull/20297)) - Canonicalization: match arbitrary hex colors against theme colors case-insensitively (e.g. `bg-[#fff]` and `bg-[#FFF]` → `bg-white`) ([#20298](https://github.com/tailwindlabs/tailwindcss/pull/20298)) - Prevent Preflight from overriding Firefox's native `iframe:focus-visible` outline styles ([#20292](https://github.com/tailwindlabs/tailwindcss/pull/20292)) - Ensure `theme('colors.foo')` in JS plugins resolves correctly when both `--color-foo` and `--color-foo-bar` exist ([#20299](https://github.com/tailwindlabs/tailwindcss/pull/20299)) - Ensure fractional opacity modifiers work with named shadow sizes like `shadow-sm/12.5`, `text-shadow-sm/12.5`, `drop-shadow-sm/12.5`, and `inset-shadow-sm/12.5` ([#20302](https://github.com/tailwindlabs/tailwindcss/pull/20302)) - Parse selectors like `[data-foo]div` as two selectors instead of one ([#20303](https://github.com/tailwindlabs/tailwindcss/pull/20303)) - Ensure `@tailwindcss/postcss` rebuilds when a preprocessor like Sass changes the input CSS without changing the input file on disk ([#20310](https://github.com/tailwindlabs/tailwindcss/pull/20310)) - Ensure CSS nesting is handled even when Lightning CSS isn't run, such as in `@tailwindcss/browser` and Tailwind Play ([#20124](https://github.com/tailwindlabs/tailwindcss/pull/20124)) - Prevent achromatic theme colors from shifting hue when mixed in polar color spaces like `oklch` ([#20314](https://github.com/tailwindlabs/tailwindcss/pull/20314)) - Ensure `--spacing(0)` is optimized to `0px` instead of `0` so it remains a `` when used in `calc(…)` ([#20319](https://github.com/tailwindlabs/tailwindcss/pull/20319)) - Load `@parcel/watcher` only when needed in `@tailwindcss/cli --watch` mode, so one-off builds and `--watch --poll` work when `@parcel/watcher` can't be loaded ([#20325](https://github.com/tailwindlabs/tailwindcss/pull/20325)) - Use explicit platform fonts instead of `system-ui` and `ui-sans-serif` so CJK text respects the page's `lang` attribute on Windows ([#20318](https://github.com/tailwindlabs/tailwindcss/pull/20318)) - Prevent `@tailwindcss/upgrade` from rewriting ignored files when run from a subdirectory ([#20329](https://github.com/tailwindlabs/tailwindcss/pull/20329)) - Ensure earlier `@source` rules pointing to nested files are scanned when later `@source` rules point to files in parent folders ([#20335](https://github.com/tailwindlabs/tailwindcss/pull/20335)) - Prevent `@tailwindcss/vite` from triggering full page reloads when scanned files are processed by Vite but haven't been loaded as modules yet ([#20336](https://github.com/tailwindlabs/tailwindcss/pull/20336)) ### v4.3.2 - Date: 2026-06-29 - Version: v4.3.2 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.3.2 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.3.2 - **fixed** — Support bare spacing values for auto-rows-* and auto-cols-* utilities (e.g. auto-rows-12 and auto-cols-16) - **fixed** — Prevent @tailwindcss/cli in --watch mode from crashing on Windows when @source points to a directory that doesn't exist - **fixed** — Prevent @tailwindcss/vite from crashing in Deno v2.8.x when context.parentURL is not a valid URL - **fixed** — Ensure @tailwindcss/cli in --watch mode rebuilds when the input CSS file changes in an ignored directory - **fixed** — Allow @variant rules used in addBase(…) to use custom variants defined later - **fixed** — Prevent @tailwindcss/vite from crashing during HMR when scanned files or directories are deleted - **fixed** — Generate font-size instead of color declarations for text-[--spacing(…)] - **fixed** — Prevent @source patterns from scanning unrelated sibling files and folders - **fixed** — Extract class candidates adjacent to Template Toolkit delimiters like %]…[% in .tt, .tt2, and .tx files - **fixed** — Extract class candidates from conditional Maud syntax like p.text-black[condition] - **fixed** — Prevent @position-try rules from triggering unknown at-rule warnings when optimizing CSS - **fixed** — Support class suggestions for named opacity modifiers from --opacity theme values - **fixed** — Prevent type errors in @tailwindcss/postcss when used with newer PostCSS patch releases ###### Fixed - Support bare spacing values for `auto-rows-*` and `auto-cols-*` utilities (e.g. `auto-rows-12` and `auto-cols-16`) ([#20229](https://github.com/tailwindlabs/tailwindcss/pull/20229)) - Prevent `@tailwindcss/cli` in `--watch` mode from crashing on Windows when `@source` points to a directory that doesn't exist ([#20242](https://github.com/tailwindlabs/tailwindcss/pull/20242)) - Prevent `@tailwindcss/vite` from crashing in Deno v2.8.x when `context.parentURL` is not a valid URL ([#20245](https://github.com/tailwindlabs/tailwindcss/pull/20245)) - Ensure `@tailwindcss/cli` in `--watch` mode rebuilds when the input CSS file changes in an ignored directory ([#20246](https://github.com/tailwindlabs/tailwindcss/pull/20246)) - Allow `@variant` rules used in `addBase(…)` to use custom variants defined later ([#20247](https://github.com/tailwindlabs/tailwindcss/pull/20247)) - Prevent `@tailwindcss/vite` from crashing during HMR when scanned files or directories are deleted ([#20259](https://github.com/tailwindlabs/tailwindcss/pull/20259)) - Generate `font-size` instead of `color` declarations for `text-[--spacing(…)]` ([#20260](https://github.com/tailwindlabs/tailwindcss/pull/20260)) - Prevent `@source` patterns from scanning unrelated sibling files and folders ([#20263](https://github.com/tailwindlabs/tailwindcss/pull/20263)) - Extract class candidates adjacent to Template Toolkit delimiters like `%]…[%` in `.tt`, `.tt2`, and `.tx` files ([#20269](https://github.com/tailwindlabs/tailwindcss/pull/20269)) - Extract class candidates from conditional Maud syntax like `p.text-black[condition]` ([#20269](https://github.com/tailwindlabs/tailwindcss/pull/20269)) - Prevent `@position-try` rules from triggering unknown at-rule warnings when optimizing CSS ([#20277](https://github.com/tailwindlabs/tailwindcss/pull/20277)) - Support class suggestions for named opacity modifiers from `--opacity` theme values ([#20287](https://github.com/tailwindlabs/tailwindcss/pull/20287)) - Prevent type errors in `@tailwindcss/postcss` when used with newer PostCSS patch releases ([#20289](https://github.com/tailwindlabs/tailwindcss/pull/20289)) ### v4.3.1 - Date: 2026-06-12 - Version: v4.3.1 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.3.1 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.3.1 - **added** — Add `--silent` option to suppress output in `@tailwindcss/cli` - **fixed** — Remove deprecation warnings by using `Module#registerHooks` instead of `Module#register` on Node 26+ - **fixed** — Don't crash when plugin utilities throw for unsupported values during canonicalization - **fixed** — Allow `@apply` to be used with CSS mixins - **fixed** — Ensure `not-*` correctly negates `@container` queries, including `style(…)` queries - **fixed** — Ensure `drop-shadow-*` color utilities work with custom shadow values containing `calc(…)` - **fixed** — Fix 'Sourcemap is likely to be incorrect' warnings when using `@tailwindcss/vite` - **fixed** — Ensure `@tailwindcss/webpack` can be installed in Rspack projects without requiring `webpack` as a peer dependency - **fixed** — Don't suggest invalid `calc(…)` expressions during canonicalization - **fixed** — Avoid suggesting large spacing-scale values for arbitrary lengths during canonicalization - **fixed** — Ensure `@tailwindcss/cli` in `--watch` mode recovers when a tracked dependency is deleted and restored - **fixed** — Ensure standalone `@tailwindcss/cli` binaries are ignored when scanning for class candidates - **fixed** — Ensure class candidates are extracted from Twig `addClass(…)` and `removeClass(…)` calls - **fixed** — Don't crash in the Ruby or Vue preprocessors when scanning files containing invalid UTF-8 bytes - **fixed** — Allow `@variant` to be used inside `addBase` - **fixed** — Ensure `@source` globs with symlinks are preserved - **fixed** — Ensure later `@source` rules can re-include files excluded by earlier `@source not` rules - **fixed** — Don't migrate empty class rules to invalid `@utility` rules during upgrade - **fixed** — Ensure transitions between `inset-shadow-none` and other inset shadows work correctly - **fixed** — Ensure explicitly referenced `@source` directories are scanned even when ignored by git - **fixed** — Ensure `@source` globs ending in `**/*` preserve dynamic path segments to avoid scanning too many files - **fixed** — Don't fold `calc(…)` divisions when the result would require high precision during canonicalization - **fixed** — Serve ESM type declarations to ESM importers of `@tailwindcss/postcss` - **changed** — Generate `0` instead of `calc(var(--spacing) * 0)` for spacing utilities like `m-0` and `left-0` - **changed** — Generate `var(--spacing)` instead of `calc(var(--spacing) * 1)` for spacing utilities like `m-1` and `left-1` ###### Added - Add `--silent` option to suppress output in `@tailwindcss/cli` ([#20100](https://github.com/tailwindlabs/tailwindcss/pull/20100)) ###### Fixed - Remove deprecation warnings by using `Module#registerHooks` instead of `Module#register` on Node 26+ ([#20028](https://github.com/tailwindlabs/tailwindcss/pull/20028)) - Canonicalization: don't crash when plugin utilities throw for unsupported values ([#20052](https://github.com/tailwindlabs/tailwindcss/pull/20052)) - Allow `@apply` to be used with CSS mixins ([#19427](https://github.com/tailwindlabs/tailwindcss/pull/19427)) - Ensure `not-*` correctly negates `@container` queries, including `style(…)` queries ([#20059](https://github.com/tailwindlabs/tailwindcss/pull/20059)) - Ensure `drop-shadow-*` color utilities work with custom shadow values containing `calc(…)` ([#20080](https://github.com/tailwindlabs/tailwindcss/pull/20080)) - Fix 'Sourcemap is likely to be incorrect' warnings when using `@tailwindcss/vite` ([#20103](https://github.com/tailwindlabs/tailwindcss/pull/20103)) - Ensure `@tailwindcss/webpack` can be installed in Rspack projects without requiring `webpack` as a peer dependency ([#20027](https://github.com/tailwindlabs/tailwindcss/pull/20027)) - Canonicalization: don't suggest invalid `calc(…)` expressions (e.g. `px-[calc(1rem+0px)]` → `px-[calc(1rem+0)]`) ([#20127](https://github.com/tailwindlabs/tailwindcss/pull/20127)) - Canonicalization: avoid suggesting large spacing-scale values for arbitrary lengths (e.g. `left-[99999px]` → `left-[99999px]`, not `left-24999.75`) ([#20130](https://github.com/tailwindlabs/tailwindcss/pull/20130)) - Ensure `@tailwindcss/cli` in `--watch` mode recovers when a tracked dependency is deleted and restored ([#20137](https://github.com/tailwindlabs/tailwindcss/pull/20137)) - Ensure standalone `@tailwindcss/cli` binaries are ignored when scanning for class candidates ([#20139](https://github.com/tailwindlabs/tailwindcss/pull/20139)) - Ensure class candidates are extracted from Twig `addClass(…)` and `removeClass(…)` calls ([#20198](https://github.com/tailwindlabs/tailwindcss/pull/20198)) - Don't crash in the Ruby or Vue preprocessors when scanning files containing invalid UTF-8 bytes ([#19588](https://github.com/tailwindlabs/tailwindcss/pull/19588)) - Allow `@variant` to be used inside `addBase` ([#19480](https://github.com/tailwindlabs/tailwindcss/pull/19480)) - Ensure `@source` globs with symlinks are preserved ([#20203](https://github.com/tailwindlabs/tailwindcss/pull/20203)) - Ensure later `@source` rules can re-include files excluded by earlier `@source not` rules ([#20203](https://github.com/tailwindlabs/tailwindcss/pull/20203)) - Upgrade: don't migrate empty class rules to invalid `@utility` rules ([#20205](https://github.com/tailwindlabs/tailwindcss/pull/20205)) - Ensure transitions between `inset-shadow-none` and other inset shadows work correctly ([#20208](https://github.com/tailwindlabs/tailwindcss/pull/20208)) - Ensure explicitly referenced `@source` directories are scanned even when ignored by git ([#20214](https://github.com/tailwindlabs/tailwindcss/pull/20214)) - Ensure `@source` globs ending in `**/*` preserve dynamic path segments to avoid scanning too many files ([#20217](https://github.com/tailwindlabs/tailwindcss/pull/20217)) - Canonicalization: don't fold `calc(…)` divisions when the result would require high precision (e.g. `w-[calc(100%/3.5)]` → `w-[calc(100%/3.5)]`, not `w-[28.571428571428573%]`) ([#20221](https://github.com/tailwindlabs/tailwindcss/pull/20221)) - Serve ESM type declarations to ESM importers of `@tailwindcss/postcss` ([#20228](https://github.com/tailwindlabs/tailwindcss/pull/20228)) ###### Changed - Generate `0` instead of `calc(var(--spacing) * 0)` for spacing utilities like `m-0` and `left-0` ([#20196](https://github.com/tailwindlabs/tailwindcss/pull/20196)) - Generate `var(--spacing)` instead of `calc(var(--spacing) * 1)` for spacing utilities _[Truncated at 4000 characters — full notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.3.1]_ ### v4.3.0 - Date: 2026-05-08 - Version: v4.3.0 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.3.0 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.3.0 - **added** — Add `@container-size` utility - **added** — Add `scrollbar-{auto,thin,none}` utilities for `scrollbar-width`, and `scrollbar-thumb-*` / `scrollbar-track-*` color utilities for `scrollbar-color` - **added** — Add `scrollbar-gutter-*` utilities - **added** — Add `zoom-*` utilities - **added** — Add `tab-*` utilities - **added** — Allow using `@variant` with stacked variants (e.g. `@variant hover:focus { … }`) - **added** — Allow using `@variant` with compound variants (e.g. `@variant hover, focus { … }`) - **added** — Support `--default(…)` in `--value(…)` and `--modifier(…)` for functional `@utility` definitions - **fixed** — Ensure `@plugin` resolves package JavaScript entries instead of browser CSS entries when using `@tailwindcss/vite` - **fixed** — Fix relative `@import` and `@plugin` paths resolving from the wrong directory when using `@tailwindcss/vite` - **fixed** — Ensure CSS files containing `@variant` are processed by `@tailwindcss/vite` - **fixed** — Resolve imports relative to `base` when `result.opts.from` is not provided when using `@tailwindcss/postcss` - **fixed** — Canonicalization: preserve significant `_` whitespace in arbitrary values - **fixed** — Canonicalization: add parentheses when removing whitespace from arbitrary values would hurt readability - **fixed** — Canonicalization: preserve the original unit in arbitrary values instead of normalizing to base units - **fixed** — Canonicalization: migrate arbitrary `:has()` variants from `[&:has(…)]` to `has-[…]` - **fixed** — Upgrade: don't migrate inline `style` attributes - **fixed** — Allow multiple `@utility` definitions with the same name but different value types - **fixed** — Export missing `PluginWithConfig` type from `tailwindcss/plugin` to fix errors when inferring plugin config types - **fixed** — Ensure `start` and `end` legacy utilities without values do not generate CSS - **fixed** — Ensure `--value(…)` is required in functional `@utility` definitions - **fixed** — Canonicalization: preserve required whitespace around operators in negated arbitrary values ###### Added - Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) - Add `scrollbar-{auto,thin,none}` utilities for `scrollbar-width`, and `scrollbar-thumb-*` / `scrollbar-track-*` color utilities for `scrollbar-color` ([#19981](https://github.com/tailwindlabs/tailwindcss/pull/19981), [#20019](https://github.com/tailwindlabs/tailwindcss/pull/20019)) - Add `scrollbar-gutter-*` utilities ([#20018](https://github.com/tailwindlabs/tailwindcss/pull/20018)) - Add `zoom-*` utilities ([#20020](https://github.com/tailwindlabs/tailwindcss/pull/20020)) - Add `tab-*` utilities ([#20022](https://github.com/tailwindlabs/tailwindcss/pull/20022)) - Allow using `@variant` with stacked variants (e.g. `@variant hover:focus { … }`) ([#19996](https://github.com/tailwindlabs/tailwindcss/pull/19996)) - Allow using `@variant` with compound variants (e.g. `@variant hover, focus { … }`) ([#19996](https://github.com/tailwindlabs/tailwindcss/pull/19996)) - Support `--default(…)` in `--value(…)` and `--modifier(…)` for functional `@utility` definitions ([#19989](https://github.com/tailwindlabs/tailwindcss/pull/19989)) ###### Fixed - Ensure `@plugin` resolves package JavaScript entries instead of browser CSS entries when using `@tailwindcss/vite` ([#19949](https://github.com/tailwindlabs/tailwindcss/pull/19949)) - Fix relative `@import` and `@plugin` paths resolving from the wrong directory when using `@tailwindcss/vite` ([#19965](https://github.com/tailwindlabs/tailwindcss/pull/19965)) - Ensure CSS files containing `@variant` are processed by `@tailwindcss/vite` ([#19966](https://github.com/tailwindlabs/tailwindcss/pull/19966)) - Resolve imports relative to `base` when `result.opts.from` is not provided when using `@tailwindcss/postcss` ([#19980](https://github.com/tailwindlabs/tailwindcss/pull/19980)) - Canonicalization: preserve significant `_` whitespace in arbitrary values ([#19986](https://github.com/tailwindlabs/tailwindcss/pull/19986)) - Canonicalization: add parentheses when removing whitespace from arbitrary values would hurt readability (e.g. `w-[calc(100%---spacing(60))]` → `w-[calc(100%-(--spacing(60)))]`) ([#19986](https://github.com/tailwindlabs/tailwindcss/pull/19986)) - Canonicalization: preserve the original unit in arbitrary values instead of normalizing to base units (e.g. `-mt-[20in]` → `mt-[-20in]`, not `mt-[-1920px]`) ([#19988](https://github.com/tailwindlabs/tailwindcss/pull/19988)) - Canonicalization: migrate arbitrary `:has()` variants from `[&:has(…)]` to `has-[…]` ([#19991](https://github.com/tailwindlabs/tailwindcss/pull/19991)) - Upgrade: don’t migrate inline `style` attributes (e.g. `style="flex-grow: 1"` → `style="flex-grow: 1"`, not `style="grow: 1"`) ([#19918](https://github.com/tailwindlabs/tailwindcss/pull/19918)) - Allow multiple `@utility` definitions with the same name but different value types ([#19777](https://github.com/tailwindlabs/tailwindcss/pull/19777)) - Export missing `PluginWithConfig` type from `tailwindcss/plugin` to fix errors when inferring plugin config types ([#19707](https://github.com/tailwindlabs/tailwindcss/pull/19707)) - Ensure `start` and `end` legacy utilities without values do not generate CSS ([#20003](https://github.com/tailwindlabs/tailwindcss/pull/20003)) - Ensure `--value(…)` is required in functional `@utility` definitions ([#20005](https://github.com/tailwindlabs/tailwindcss/pull/20005)) - Canonicalization: preserve required whitespace around operators in negated arbitrary values (e.g. `-left-[(var(--a)+var(--b))]`) ([#20011](https://github.com/tailwindlabs/tailwindcss/pull/20011)) ### v4.2.4 - Date: 2026-04-21 - Version: v4.2.4 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.2.4 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.2.4 - **fixed** — Ensure imports in @import and @plugin still resolve correctly when using Vite aliases in @tailwindcss/vite ###### Fixed - Ensure imports in `@import` and `@plugin` still resolve correctly when using Vite aliases in `@tailwindcss/vite` ([#19947](https://github.com/tailwindlabs/tailwindcss/pull/19947)) ### v4.2.3 - Date: 2026-04-20 - Version: v4.2.3 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.2.3 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.2.3 - **fixed** — Improve canonicalizations for tracking-* utilities by preferring non-negative utilities - **fixed** — Fix crash due to invalid characters in candidate exceeding valid unicode code point range - **fixed** — Ensure query params in imports are considered unique resources when using @tailwindcss/webpack - **fixed** — Collapse arbitrary values into shorthand utilities such as px-[1.2rem] py-[1.2rem] into p-[1.2rem] - **fixed** — Collapse border-{t,b}-* into border-y-*, border-{l,r}-* into border-x-*, and border-{t,r,b,l}-* into border-* - **fixed** — Collapse scroll-m{t,b}-* into scroll-my-*, scroll-m{l,r}-* into scroll-mx-*, and scroll-m{t,r,b,l}-* into scroll-m-* - **fixed** — Collapse scroll-p{t,b}-* into scroll-py-*, scroll-p{l,r}-* into scroll-px-*, and scroll-p{t,r,b,l}-* into scroll-p-* - **fixed** — Collapse overflow-{x,y}-* into overflow-* - **fixed** — Collapse overscroll-{x,y}-* into overscroll-* - **fixed** — Read from --placeholder-color instead of --background-color for placeholder-* utilities - **fixed** — Ensure files are not emptied out when killing the upgrade process while it is running - **fixed** — Use config.content when migrating from Tailwind CSS v3 to Tailwind CSS v4 - **fixed** — Never migrate files that are ignored by git - **fixed** — Add .env and .env.* to default ignored content files - **fixed** — Migrate overflow-ellipsis into text-ellipsis - **fixed** — Migrate start-full, start-auto, start-px, and start- into inset-s-full, inset-s-auto, inset-s-px, and inset-s- as well as negative versions - **fixed** — Migrate end-full, end-auto, end-px, and end- into inset-e-full, inset-e-auto, inset-e-px, and inset-e- as well as negative versions - **fixed** — Move the - sign inside the arbitrary value -left-[9rem] into left-[-9rem] - **fixed** — Move the - sign outside the arbitrary value ml-[calc(-1*var(--width))] into -ml-(--width) - **fixed** — Improve performance when scanning JSONL / NDJSON files - **fixed** — Support NODE_PATH environment variable in standalone CLI ###### Fixed - Canonicalization: improve canonicalizations for `tracking-*` utilities by preferring non-negative utilities (e.g. `-tracking-tighter` → `tracking-wider`) ([#19827](https://github.com/tailwindlabs/tailwindcss/pull/19827)) - Fix crash due to invalid characters in candidate (exceeding valid unicode code point range) ([#19829](https://github.com/tailwindlabs/tailwindcss/pull/19829)) - Ensure query params in imports are considered unique resources when using `@tailwindcss/webpack` ([#19723](https://github.com/tailwindlabs/tailwindcss/pull/19723)) - Canonicalization: collapse arbitrary values into shorthand utilities (e.g. `px-[1.2rem] py-[1.2rem]` → `p-[1.2rem]`) ([#19837](https://github.com/tailwindlabs/tailwindcss/pull/19837)) - Canonicalization: collapse `border-{t,b}-*` into `border-y-*`, `border-{l,r}-*` into `border-x-*`, and `border-{t,r,b,l}-*` into `border-*` ([#19842](https://github.com/tailwindlabs/tailwindcss/pull/19842)) - Canonicalization: collapse `scroll-m{t,b}-*` into `scroll-my-*`, `scroll-m{l,r}-*` into `scroll-mx-*`, and `scroll-m{t,r,b,l}-*` into `scroll-m-*` ([#19842](https://github.com/tailwindlabs/tailwindcss/pull/19842)) - Canonicalization: collapse `scroll-p{t,b}-*` into `scroll-py-*`, `scroll-p{l,r}-*` into `scroll-px-*`, and `scroll-p{t,r,b,l}-*` into `scroll-p-*` ([#19842](https://github.com/tailwindlabs/tailwindcss/pull/19842)) - Canonicalization: collapse `overflow-{x,y}-*` into `overflow-*` ([#19842](https://github.com/tailwindlabs/tailwindcss/pull/19842)) - Canonicalization: collapse `overscroll-{x,y}-*` into `overscroll-*` ([#19842](https://github.com/tailwindlabs/tailwindcss/pull/19842)) - Read from `--placeholder-color` instead of `--background-color` for `placeholder-*` utilities ([#19843](https://github.com/tailwindlabs/tailwindcss/pull/19843)) - Upgrade: ensure files are not emptied out when killing the upgrade process while it's running ([#19846](https://github.com/tailwindlabs/tailwindcss/pull/19846)) - Upgrade: use `config.content` when migrating from Tailwind CSS v3 to Tailwind CSS v4 ([#19846](https://github.com/tailwindlabs/tailwindcss/pull/19846)) - Upgrade: never migrate files that are ignored by git ([#19846](https://github.com/tailwindlabs/tailwindcss/pull/19846)) - Add `.env` and `.env.*` to default ignored content files ([#19846](https://github.com/tailwindlabs/tailwindcss/pull/19846)) - Canonicalization: migrate `overflow-ellipsis` into `text-ellipsis` ([#19849](https://github.com/tailwindlabs/tailwindcss/pull/19849)) - Canonicalization: migrate `start-full` → `inset-s-full`, `start-auto` → `inset-s-auto`, `start-px` → `inset-s-px`, and `start-` → `inset-s-` as well as negative versions ([#19849](https://github.com/tailwindlabs/tailwindcss/pull/19849)) - Canonicalization: migrate `end-full` → `inset-e-full`, `end-auto` → `inset-e-auto`, `end-px` → `inset-e-px`, and `end-` → `inset-e-` as well as negative versions ([#19849](https://github.com/tailwindlabs/tailwindcss/pull/19849)) - Canonicalization: move the `-` sign inside the arbitrary value `-left-[9rem]` → `left-[-9rem]` ([#19858](https://github.com/tailwindlabs/tailwindcss/pull/19858)) - Canonicalization: move the `-` sign outside the arbitrary value `ml-[calc(-1*var(--width))]` → `-ml-(--width)` ([#19858](https://github.com/tailwindlabs/tailwindcss/pull/19858)) - Improve performance when scanning JSONL / NDJSON files ([#19862](https://github.com/tailwindlabs/tailwindcss/pull/19862)) - Support `NODE_PATH` environment variable in standalone CLI ([#19617](https://github.com/tailwindlabs/tailwindcss/pull/19617)) ### v4.2.2 - Date: 2026-03-18 - Version: v4.2.2 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.2.2 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.2.2 - **added** — Support Vite 8 in @tailwindcss/vite - **fixed** — Don't crash when candidates contain prototype properties like row-constructor - **fixed** — Canonicalize calc(var(--spacing)*…) expressions into --spacing(…) - **fixed** — Fix crash in canonicalization step when handling utilities containing @property at-rules - **fixed** — Skip full reload for server only modules scanned by client CSS when using @tailwindcss/vite - **fixed** — Improve canonicalization for bare values exceeding default spacing scale suggestions - **fixed** — Fix canonicalization resulting in empty list ###### Added - Support Vite 8 in `@tailwindcss/vite` ([#19790](https://github.com/tailwindlabs/tailwindcss/pull/19790)) ###### Fixed - Don't crash when candidates contain prototype properties like `row-constructor` ([#19725](https://github.com/tailwindlabs/tailwindcss/pull/19725)) - Canonicalize `calc(var(--spacing)*…)` expressions into `--spacing(…)` ([#19769](https://github.com/tailwindlabs/tailwindcss/pull/19769)) - Fix crash in canonicalization step when handling utilities containing `@property` at-rules (e.g. `shadow-sm border`) ([#19727](https://github.com/tailwindlabs/tailwindcss/pull/19727)) - Skip full reload for server only modules scanned by client CSS when using `@tailwindcss/vite` ([#19745](https://github.com/tailwindlabs/tailwindcss/pull/19745)) - Improve canonicalization for bare values exceeding default spacing scale suggestions (e.g. `w-1234 h-1234` → `size-1234`) ([#19809](https://github.com/tailwindlabs/tailwindcss/pull/19809)) - Fix canonicalization resulting in empty list (e.g. `w-5 h-5 size-5` → `''` instead of `size-5`) ([#19812](https://github.com/tailwindlabs/tailwindcss/pull/19812)) ### v4.2.1 - Date: 2026-02-23 - Version: v4.2.1 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.2.1 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.2.1 - **fixed** — Allow trailing dash in functional utility names for backwards compatibility - **fixed** — Properly detect classes containing . characters within curly braces in MDX files ###### Fixed - Allow trailing dash in functional utility names for backwards compatibility ([#19696](https://github.com/tailwindlabs/tailwindcss/pull/19696)) - Properly detect classes containing `.` characters within curly braces in MDX files ([#19711](https://github.com/tailwindlabs/tailwindcss/pull/19711)) ### v4.2.0 - Date: 2026-02-18 - Version: v4.2.0 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.2.0 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.2.0 - **added** — Add mauve, olive, mist, and taupe color palettes to the default theme - **added** — Add @tailwindcss/webpack package to run Tailwind CSS as a webpack plugin - **added** — Add pbs-* and pbe-* utilities for padding-block-start and padding-block-end - **added** — Add mbs-* and mbe-* utilities for margin-block-start and margin-block-end - **added** — Add scroll-pbs-* and scroll-pbe-* utilities for scroll-padding-block-start and scroll-padding-block-end - **added** — Add scroll-mbs-* and scroll-mbe-* utilities for scroll-margin-block-start and scroll-margin-block-end - **added** — Add border-bs-* and border-be-* utilities for border-block-start and border-block-end - **added** — Add inline-*, min-inline-*, max-inline-* utilities for inline-size, min-inline-size, and max-inline-size - **added** — Add block-*, min-block-*, max-block-* utilities for block-size, min-block-size, and max-block-size - **added** — Add inset-s-*, inset-e-*, inset-bs-*, inset-be-* utilities for inset-inline-start, inset-inline-end, inset-block-start, and inset-block-end - **added** — Add font-features-* utility for font-feature-settings - **fixed** — Prevent double @supports wrapper for color-mix values - **fixed** — Allow whitespace around @source inline() argument - **fixed** — Emit comment when source maps are saved to files when using @tailwindcss/cli - **fixed** — Detect utilities containing capital letters followed by numbers - **fixed** — Fix class extraction for Rails' strict locals - **fixed** — Align @utility name validation with Oxide scanner rules - **fixed** — Fix infinite loop when using @variant inside @custom-variant - **fixed** — Allow multiples of .25 in aspect-* fractions (e.g. aspect-8.5/11) - **fixed** — Ensure changes to external files listed via @source trigger a full page reload when using @tailwindcss/vite - **fixed** — Improve performance of Oxide scanner in bigger projects by reducing file system walks - **fixed** — Ensure import aliases in Astro v5 work without crashing when using @tailwindcss/vite - **fixed** — Allow escape characters in @utility names to improve support with formatters such as Biome - **fixed** — Fix incorrect canonicalization results when canonicalizing multiple times - **fixed** — Add .jj to default ignored content directories - **deprecated** — Deprecate start-* and end-* utilities in favor of inset-s-* and inset-e-* utilities ###### Added - Add mauve, olive, mist, and taupe color palettes to the default theme ([#19627](https://github.com/tailwindlabs/tailwindcss/pull/19627)) - Add `@tailwindcss/webpack` package to run Tailwind CSS as a webpack plugin ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) - Add `pbs-*` and `pbe-*` utilities for `padding-block-start` and `padding-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `mbs-*` and `mbe-*` utilities for `margin-block-start` and `margin-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `scroll-pbs-*` and `scroll-pbe-*` utilities for `scroll-padding-block-start` and `scroll-padding-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `scroll-mbs-*` and `scroll-mbe-*` utilities for `scroll-margin-block-start` and `scroll-margin-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `border-bs-*` and `border-be-*` utilities for `border-block-start` and `border-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `inline-*`, `min-inline-*`, `max-inline-*` utilities for `inline-size`, `min-inline-size`, and `max-inline-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) - Add `block-*`, `min-block-*`, `max-block-*` utilities for `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) - Add `inset-s-*`, `inset-e-*`, `inset-bs-*`, `inset-be-*` utilities for `inset-inline-start`, `inset-inline-end`, `inset-block-start`, and `inset-block-end` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) - Add `font-features-*` utility for `font-feature-settings` ([#19623](https://github.com/tailwindlabs/tailwindcss/pull/19623)) ###### Fixed - Prevent double `@supports` wrapper for `color-mix` values ([#19450](https://github.com/tailwindlabs/tailwindcss/pull/19450)) - Allow whitespace around `@source inline()` argument ([#19461](https://github.com/tailwindlabs/tailwindcss/pull/19461)) - Emit comment when source maps are saved to files when using `@tailwindcss/cli` ([#19447](https://github.com/tailwindlabs/tailwindcss/pull/19447)) - Detect utilities containing capital letters followed by numbers ([#19465](https://github.com/tailwindlabs/tailwindcss/pull/19465)) - Fix class extraction for Rails' strict locals ([#19525](https://github.com/tailwindlabs/tailwindcss/pull/19525)) - Align `@utility` name validation with Oxide scanner rules ([#19524](https://github.com/tailwindlabs/tailwindcss/pull/19524)) - Fix infinite loop when using `@variant` inside `@custom-variant` ([#19633](https://github.com/tailwindlabs/tailwindcss/pull/19633)) - Allow multiples of `.25` in `aspect-*` fractions (e.g. `aspect-8.5/11`) ([#19688](https://github.com/tailwindlabs/tailwindcss/pull/19688)) - Ensure changes to external files listed via `@source` trigger a full page reload when using `@tailwindcss/vite` ([#19670](https://github.com/tailwindlabs/tailwindcss/pull/19670)) - Improve performance of Oxide scanner in bigger projects by reducing file system walks ([#19632](https://github.com/tailwindlabs/tailwindcss/pull/19632)) - Ensure import aliases in Astro v5 work without crashing when using `@tailwindcss/vite` ([#19677](https://github.com/tailwindlabs/tailwindcss/issues/19677)) - Allow escape characters in `@utility` names to improve support with formatters such as Biome ([#19626](https://github.com/tailwindlabs/tailwindcss/pull/19626)) - Fix incorrect canonicalization results when canonicalizing multiple times ([#19675](https://github.com/tailwindlabs/tailwindcss/pull/19675)) - Add `.jj` to default ignored content directories ([#19687](https://github.com/tailwindlabs/tailwindcss/pull/19687)) ###### Deprecated - Deprecate `start-*` and `end-*` utilities in favor of `inset-s-*` and `inset-e-*` utilities ([#19613](https://github.com/tail _[Truncated at 4000 characters — full notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.2.0]_ ### v4.1.18 - Date: 2025-12-11 - Version: v4.1.18 - Original notes: https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.1.18 - Permalink: https://whatsnew.fyi/product/tailwindcss/releases/v4.1.18 - **fixed** — Ensure validation of source() happens relative to the file it is in - **fixed** — Include filename and line numbers in CSS parse errors - **fixed** — Skip comments in Ruby files when checking for class names - **fixed** — Skip over arbitrary property utilities with a top-level ! in the value - **fixed** — Support environment API in @tailwindcss/vite - **fixed** — Preserve case of theme keys from JS configs and plugins - **fixed** — Write source maps correctly on the CLI when using --watch - **fixed** — Handle special defaults like ringColor.DEFAULT in JS configs - **fixed** — Improve backwards compatibility for content theme key from JS configs - **fixed** — Handle future and experimental config keys - **fixed** — Try to canonicalize any arbitrary utility to a bare value - **fixed** — Validate candidates similarly to Oxide - **fixed** — Canonicalization: combine text-* and leading-* classes - **fixed** — Correctly handle duplicate CLI arguments - **fixed** — Don't emit color-mix fallback rules inside @keyframes - **fixed** — CLI: Don't hang when output is /dev/stdout ###### Fixed - Ensure validation of `source(…)` happens relative to the file it is in ([#19274](https://github.com/tailwindlabs/tailwindcss/pull/19274)) - Include filename and line numbers in CSS parse errors ([#19282](https://github.com/tailwindlabs/tailwindcss/pull/19282)) - Skip comments in Ruby files when checking for class names ([#19243](https://github.com/tailwindlabs/tailwindcss/pull/19243)) - Skip over arbitrary property utilities with a top-level `!` in the value ([#19243](https://github.com/tailwindlabs/tailwindcss/pull/19243)) - Support environment API in `@tailwindcss/vite` ([#18970](https://github.com/tailwindlabs/tailwindcss/pull/18970)) - Preserve case of theme keys from JS configs and plugins ([#19337](https://github.com/tailwindlabs/tailwindcss/pull/19337)) - Write source maps correctly on the CLI when using `--watch` ([#19373](https://github.com/tailwindlabs/tailwindcss/pull/19373)) - Handle special defaults (like `ringColor.DEFAULT`) in JS configs ([#19348](https://github.com/tailwindlabs/tailwindcss/pull/19348)) - Improve backwards compatibility for `content` theme key from JS configs ([#19381](https://github.com/tailwindlabs/tailwindcss/pull/19381)) - Upgrade: Handle `future` and `experimental` config keys ([#19344](https://github.com/tailwindlabs/tailwindcss/pull/19344)) - Try to canonicalize any arbitrary utility to a bare value ([#19379](https://github.com/tailwindlabs/tailwindcss/pull/19379)) - Validate candidates similarly to Oxide ([#19397](https://github.com/tailwindlabs/tailwindcss/pull/19397)) - Canonicalization: combine `text-*` and `leading-*` classes ([#19396](https://github.com/tailwindlabs/tailwindcss/pull/19396)) - Correctly handle duplicate CLI arguments ([#19416](https://github.com/tailwindlabs/tailwindcss/pull/19416)) - Don’t emit color-mix fallback rules inside `@keyframes` ([#19419](https://github.com/tailwindlabs/tailwindcss/pull/19419)) - CLI: Don't hang when output is `/dev/stdout` ([#19421](https://github.com/tailwindlabs/tailwindcss/pull/19421))