i️ Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
Release Notes
tailwindlabs/tailwindcss (tailwindcss)
Compare Source
Added
- Add
--silent option to suppress output in @tailwindcss/cli (#20100)
Fixed
- Remove deprecation warnings by using
Module#registerHooks instead of Module#register on Node 26+ (#20028)
- Canonicalization: don't crash when plugin utilities throw for unsupported values (#20052)
- Allow
@apply to be used with CSS mixins (#19427)
- Ensure
not-* correctly negates @container queries, including style(...) queries (#20059)
- Ensure
drop-shadow-* color utilities work with custom shadow values containing calc(...) (#20080)
- Fix 'Sourcemap is likely to be incorrect' warnings when using
@tailwindcss/vite (#20103)
- Ensure
@tailwindcss/webpack can be installed in Rspack projects without requiring webpack as a peer dependency (#20027)
- Canonicalization: don't suggest invalid
calc(...) expressions (e.g. px-[calc(1rem+0px)] → px-[calc(1rem+0)]) (#20127)
- Canonicalization: avoid suggesting large spacing-scale values for arbitrary lengths (e.g.
left-[99999px] → left-[99999px], not left-24999.75) (#20130)
- Ensure
@tailwindcss/cli in --watch mode recovers when a tracked dependency is deleted and restored (#20137)
- Ensure standalone
@tailwindcss/cli binaries are ignored when scanning for class candidates (#20139)
- Ensure class candidates are extracted from Twig
addClass(...) and removeClass(...) calls (#20198)
- Don't crash in the Ruby or Vue preprocessors when scanning files containing invalid UTF-8 bytes (#19588)
- Allow
@variant to be used inside addBase (#19480)
- Ensure
@source globs with symlinks are preserved (#20203)
- Ensure later
@source rules can re-include files excluded by earlier @source not rules (#20203)
- Upgrade: don't migrate empty class rules to invalid
@utility rules (#20205)
- Ensure transitions between
inset-shadow-none and other inset shadows work correctly (#20208)
- Ensure explicitly referenced
@source directories are scanned even when ignored by git (#20214)
- Ensure
@source globs ending in **/* preserve dynamic path segments to avoid scanning too many files (#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)
- Serve ESM type declarations to ESM importers of
@tailwindcss/postcss (#20228)
Changed
- Generate
0 instead of calc(var(--spacing) * 0) for spacing utilities like m-0 and left-0 (#20196)
- Generate
var(--spacing) instead of calc(var(--spacing) * 1) for spacing utilities like m-1 and left-1 (#20196)
Compare Source
Added
- Add
@container-size utility (#18901)
- Add
scrollbar-{auto,thin,none} utilities for scrollbar-width, and scrollbar-thumb-* / scrollbar-track-* color utilities for scrollbar-color (#19981, #20019)
- Add
scrollbar-gutter-* utilities (#20018)
- Add
zoom-* utilities (#20020)
- Add
tab-* utilities (#20022)
- Allow using
@variant with stacked variants (e.g. @variant hover:focus { ... }) (#19996)
- Allow using
@variant with compound variants (e.g. @variant hover, focus { ... }) (#19996)
- Support
--default(...) in --value(...) and --modifier(...) for functional @utility definitions (#19989)
Fixed
- Ensure
@plugin resolves package JavaScript entries instead of browser CSS entries when using @tailwindcss/vite (#19949)
- Fix relative
@import and @plugin paths resolving from the wrong directory when using @tailwindcss/vite (#19965)
- Ensure CSS files containing
@variant are processed by @tailwindcss/vite (#19966)
- Resolve imports relative to
base when result.opts.from is not provided when using @tailwindcss/postcss (#19980)
- Canonicalization: preserve significant
_ whitespace in arbitrary values (#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)
- Canonicalization: preserve the original unit in arbitrary values instead of normalizing to base units (e.g.
-mt-[20in] → mt-[-20in], not mt-[-1920px]) (#19988)
- Canonicalization: migrate arbitrary
:has() variants from [&:has(...)] to has-[...] (#19991)
- Upgrade: don’t migrate inline
style attributes (e.g. style="flex-grow: 1" → style="flex-grow: 1", not style="grow: 1") (#19918)
- Allow multiple
@utility definitions with the same name but different value types (#19777)
- Export missing
PluginWithConfig type from tailwindcss/plugin to fix errors when inferring plugin config types (#19707)
- Ensure
start and end legacy utilities without values do not generate CSS (#20003)
- Ensure
--value(...) is required in functional @utility definitions (#20005)
- Canonicalization: preserve required whitespace around operators in negated arbitrary values (e.g.
-left-[(var(--a)+var(--b))]) (#20011)
Compare Source
Fixed
- Ensure imports in
@import and @plugin still resolve correctly when using Vite aliases in @tailwindcss/vite (#19947)
Compare Source
Fixed
- Canonicalization: improve canonicalizations for
tracking-* utilities by preferring non-negative utilities (e.g. -tracking-tighter → tracking-wider) (#19827)
- Fix crash due to invalid characters in candidate (exceeding valid unicode code point range) (#19829)
- Ensure query params in imports are considered unique resources when using
@tailwindcss/webpack (#19723)
- Canonicalization: collapse arbitrary values into shorthand utilities (e.g.
px-[1.2rem] py-[1.2rem] → p-[1.2rem]) (#19837)
- Canonicalization: collapse
border-{t,b}-* into border-y-*, border-{l,r}-* into border-x-*, and border-{t,r,b,l}-* into border-* (#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)
- 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)
- Canonicalization: collapse
overflow-{x,y}-* into overflow-* (#19842)
- Canonicalization: collapse
overscroll-{x,y}-* into overscroll-* (#19842)
- Read from
--placeholder-color instead of --background-color for placeholder-* utilities (#19843)
- Upgrade: ensure files are not emptied out when killing the upgrade process while it's running (#19846)
- Upgrade: use
config.content when migrating from Tailwind CSS v3 to Tailwind CSS v4 (#19846)
- Upgrade: never migrate files that are ignored by git (#19846)
- Add
.env and .env.* to default ignored content files (#19846)
- Canonicalization: migrate
overflow-ellipsis into text-ellipsis (#19849)
- Canonicalization: migrate
start-full → inset-s-full, start-auto → inset-s-auto, start-px → inset-s-px, and start-<number> → inset-s-<number> as well as negative versions (#19849)
- Canonicalization: migrate
end-full → inset-e-full, end-auto → inset-e-auto, end-px → inset-e-px, and end-<number> → inset-e-<number> as well as negative versions (#19849)
- Canonicalization: move the
- sign inside the arbitrary value -left-[9rem] → left-[-9rem] (#19858)
- Canonicalization: move the
- sign outside the arbitrary value ml-[calc(-1*var(--width))] → -ml-(--width) (#19858)
- Improve performance when scanning JSONL / NDJSON files (#19862)
- Support
NODE_PATH environment variable in standalone CLI (#19617)
Compare Source
Fixed
- Don't crash when candidates contain prototype properties like
row-constructor (#19725)
- Canonicalize
calc(var(--spacing)*...) expressions into --spacing(...) (#19769)
- Fix crash in canonicalization step when handling utilities containing
@property at-rules (e.g. shadow-sm border) (#19727)
- Skip full reload for server only modules scanned by client CSS when using
@tailwindcss/vite (#19745)
- Add support for Vite 8 in
@tailwindcss/vite (#19790)
- Improve canonicalization for bare values exceeding default spacing scale suggestions (e.g.
w-1234 h-1234 → size-1234) (#19809)
- Fix canonicalization resulting in empty list (e.g.
w-5 h-5 size-5 → '' instead of size-5) (#19812)
Compare Source
Fixed
- Allow trailing dash in functional utility names for backwards compatibility (#19696)
- Properly detect classes containing
. characters within curly braces in MDX files (#19711)
Compare Source
Added
- Add mauve, olive, mist, and taupe color palettes to the default theme (#19627)
- Add
@tailwindcss/webpack package to run Tailwind CSS as a webpack plugin (#19610)
- Add
pbs-* and pbe-* utilities for padding-block-start and padding-block-end (#19601)
- Add
mbs-* and mbe-* utilities for margin-block-start and margin-block-end (#19601)
- Add
scroll-pbs-* and scroll-pbe-* utilities for scroll-padding-block-start and scroll-padding-block-end (#19601)
- Add
scroll-mbs-* and scroll-mbe-* utilities for scroll-margin-block-start and scroll-margin-block-end (#19601)
- Add
border-bs-* and border-be-* utilities for border-block-start and border-block-end (#19601)
- Add
inline-*, min-inline-*, max-inline-* utilities for inline-size, min-inline-size, and max-inline-size (#19612)
- Add
block-*, min-block-*, max-block-* utilities for block-size, min-block-size, and max-block-size (#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)
- Add
font-features-* utility for font-feature-settings (#19623)
Fixed
- Prevent double
@supports wrapper for color-mix values (#19450)
- Allow whitespace around
@source inline() argument (#19461)
- Emit comment when source maps are saved to files when using
@tailwindcss/cli (#19447)
- Detect utilities containing capital letters followed by numbers (#19465)
- Fix class extraction for Rails' strict locals (#19525)
- Align
@utility name validation with Oxide scanner rules (#19524)
- Fix infinite loop when using
@variant inside @custom-variant (#19633)
- Allow multiples of
.25 in aspect-* fractions (e.g. aspect-8.5/11) (#19688)
- Ensure changes to external files listed via
@source trigger a full page reload when using @tailwindcss/vite (#19670)
- Improve performance of Oxide scanner in bigger projects by reducing file system walks (#19632)
- Ensure import aliases in Astro v5 work without crashing when using
@tailwindcss/vite (#19677)
- Allow escape characters in
@utility names to improve support with formatters such as Biome (#19626)
- Fix incorrect canonicalization results when canonicalizing multiple times (#19675)
- Add
.jj to default ignored content directories (#19687)
Deprecated
- Deprecate
start-* and end-* utilities in favor of inset-s-* and inset-e-* utilities (#19613)
Compare Source
Fixed
- Ensure validation of
source(...) happens relative to the file it is in (#19274)
- Include filename and line numbers in CSS parse errors (#19282)
- Skip comments in Ruby files when checking for class names (#19243)
- Skip over arbitrary property utilities with a top-level
! in the value (#19243)
- Support environment API in
@tailwindcss/vite (#18970)
- Preserve case of theme keys from JS configs and plugins (#19337)
- Write source maps correctly on the CLI when using
--watch (#19373)
- Handle special defaults (like
ringColor.DEFAULT) in JS configs (#19348)
- Improve backwards compatibility for
content theme key from JS configs (#19381)
- Upgrade: Handle
future and experimental config keys (#19344)
- Try to canonicalize any arbitrary utility to a bare value (#19379)
- Validate candidates similarly to Oxide (#19397)
- Canonicalization: combine
text-* and leading-* classes (#19396)
- Correctly handle duplicate CLI arguments (#19416)
- Don’t emit color-mix fallback rules inside
@keyframes (#19419)
- CLI: Don't hang when output is
/dev/stdout (#19421)
Compare Source
Fixed
- Substitute
@variant inside legacy JS APIs (#19263)
- Prevent occasional crash on Windows when loaded into a worker thread (#19242)
Compare Source
Fixed
- Discard candidates with an empty data type (#19172)
- Fix canonicalization of arbitrary variants with attribute selectors (#19176)
- Fix invalid colors due to nested
& (#19184)
- Improve canonicalization for
& > :pseudo and & :pseudo arbitrary variants (#19178)
Compare Source
Fixed
- Fix Safari devtools rendering issue due to
color-mix fallback (#19069)
- Suppress Lightning CSS warnings about
:deep, :slotted, and :global (#19094)
- Fix resolving theme keys when starting with the name of another theme key in JS configs and plugins (#19097)
- Allow named groups in combination with
not-*, has-*, and in-* (#19100)
- Prevent important utilities from affecting other utilities (#19110)
- Don’t index into strings with the
theme(...) function (#19111)
- Fix parsing issue when
\t is used in at-rules (#19130)
- Upgrade: Canonicalize utilities containing
0 values (#19095)
- Upgrade: Migrate deprecated
break-words to wrap-break-word (#19157)
Changed
Compare Source
Fixed
- Handle
' syntax in ClojureScript when extracting classes (#18888)
- Handle
@variant inside @custom-variant (#18885)
- Merge suggestions when using
@utility (#18900)
- Ensure that file system watchers created when using the CLI are always cleaned up (#18905)
- Do not generate
grid-column utilities when configuring grid-column-start or grid-column-end (#18907)
- Do not generate
grid-row utilities when configuring grid-row-start or grid-row-end (#18907)
- Prevent duplicate CSS when overwriting a static utility with a theme key (#18056)
- Show Lightning CSS warnings (if any) when optimizing/minifying (#18918)
- Use
default export condition for @tailwindcss/vite (#18948)
- Re-throw errors from PostCSS nodes (#18373)
- Detect classes in markdown inline directives (#18967)
- Ensure files with only
@theme produce no output when built (#18979)
- Support Maud templates when extracting classes (#18988)
- Upgrade: Do not migrate
variant = 'outline' during upgrades (#18922)
- Upgrade: Show version mismatch (if any) when running upgrade tool (#19028)
- Upgrade: Ensure first class inside
className is migrated (#19031)
- Upgrade: Migrate classes inside
*ClassName and *Class attributes (#19031)
Compare Source
Changed
- Drop warning from browser build (#18731)
- Drop exact duplicate declarations when emitting CSS (#18809)
Fixed
- Don't transition
visibility when using transition (#18795)
- Discard matched variants with unknown named values (#18799)
- Discard matched variants with non-string values (#18799)
- Show suggestions for known
matchVariant values (#18798)
- Replace deprecated
clip with clip-path in sr-only (#18769)
- Hide internal fields from completions in
matchUtilities (#18820)
- Ignore
.vercel folders by default (can be overridden by @source ... rules) (#18855)
- Consider variants starting with
@- to be invalid (e.g. @-2xl:flex) (#18869)
- Do not allow custom variants to start or end with a
- or _ (#18867, #18872)
- Upgrade: Migrate
aria theme keys to @custom-variant (#18815)
- Upgrade: Migrate
data theme keys to @custom-variant (#18816)
- Upgrade: Migrate
supports theme keys to @custom-variant (#18817)
Compare Source
Fixed
- Don't consider the global important state in
@apply (#18404)
- Add missing suggestions for
flex-<number> utilities (#18642)
- Fix trailing
) from interfering with extraction in Clojure keywords (#18345)
- Detect classes inside Elixir charlist, word list, and string sigils (#18432)
- Track source locations through
@plugin and @config (#18345)
- Allow boolean values of
process.env.DEBUG in @tailwindcss/node (#18485)
- Ignore consecutive semicolons in the CSS parser (#18532)
- Center the dropdown icon added to an input with a paired datalist by default (#18511)
- Extract candidates in Slang templates (#18565)
- Improve error messages when encountering invalid functional utility names (#18568)
- Discard CSS AST objects with
false or undefined properties (#18571)
- Allow users to disable URL rebasing in
@tailwindcss/postcss via transformAssetUrls: false (#18321)
- Fix false-positive migrations in
addEventListener and JavaScript variable names (#18718)
- Fix Standalone CLI showing default Bun help when run via symlink on Windows (#18723)
- Read from
--border-color-* theme keys in divide-* utilities for backwards compatibility (#18704)
- Don't scan
.hdr and .exr files for classes by default (#18734)
Compare Source
Fixed
- Add heuristic to skip candidate migrations inside
emit(...) (#18330)
- Extract candidates with variants in Clojure/ClojureScript keywords (#18338)
- Document
--watch=always in the CLI's usage (#18337)
- Add support for Vite 7 to
@tailwindcss/vite (#18384)
Compare Source
Fixed
- Fix incorrectly generated CSS when using percentages in arbitrary values with calc (e.g.
w-[calc(100%-var(--offset))]) (#18289)
Compare Source
Fixed
- Correctly parse custom properties with strings containing semicolons (#18251)
- Upgrade: Migrate arbitrary modifiers without percentage signs to bare values (e.g.
/[0.16] → /16) (#18184)
- Upgrade: Migrate CSS variable shorthands where fallback value contains function call (#18184)
- Upgrade: Migrate negative arbitrary values to negative bare values (e.g.
mb-[-32rem] → -mb-128) (#18212)
- Upgrade: Do not migrate
blur in wire:model.blur (#18216)
- Don't add spaces around CSS dashed idents when formatting math expressions (#18220)
Compare Source
Added
- Improve error messages when
@apply fails (#18059)
Fixed
- Upgrade: Do not migrate declarations that look like candidates in
<style> blocks (#18057, 18068)
- Upgrade: Don't error when looking for
tailwindcss in pnpm monorepos (#18065)
- Upgrade: Don't error when updating dependencies in pnpm monorepos (#18065)
- Upgrade: Migrate deprecated
order-none to order-0 (#18126)
- Support Leptos
class: attributes when extracting classes (#18093)
- Fix "Cannot read properties of undefined" crash on malformed arbitrary value (#18133)
- Upgrade: Migrate
-mt-[0px] to mt-[0px] instead of the other way around (#18154)
- Fix Haml pre-processing crash when there is no
\n at the end of the file (#18155)
- Ignore
.pnpm-store folders by default (can be overridden by @source ... rules) (#18163)
- Fix PostCSS crash when calling
toJSON() (#18083)
Compare Source
Added
- Upgrade: Migrate bare values to named values (#18000)
- Upgrade: Added cache to improve template migration performance (#18025)
Fixed
- Allow
_ before numbers during candidate extraction (#17961)
- Prevent duplicate suggestions when using
@theme and @utility together (#17675)
- Ensure that media queries within
::before and ::after pseudo selectors create valid CSS rules in production builds (#17979)
- Ensure that the standalone CLI does not leave temporary files behind (#17981)
- Ensure
-rotate-* utilities properly negate arbitrary values (#18014)
- Ignore custom variants using
:merge(...) selectors in legacy JS plugins (#18020)
- Ensure classes containing
. are properly extracted from Clojure files (#18038)
- Upgrade: Fix error when using
@import ... source(...) (#17963)
- Upgrade: Change casing of utilities with named values to kebab-case to match updated theme variables (#18017)
- Upgrade: Don't migrate strings that match utility names in Vue attribute bindings other than
class (#18025)
Compare Source
Added
- Upgrade: Automatically convert arbitrary values to named values when possible (e.g.
h-[1lh] to h-lh) (#17831, #17854)
- Upgrade: Update dependencies in parallel for improved performance (#17898)
- Add detailed logging about
@source directives, discovered files and scanned files when using DEBUG=* (#17906, #17952)
- Add support for generating source maps in development (#17775)
Fixed
- Ensure negative arbitrary
scale values generate negative values (#17831)
- Fix HAML extraction with embedded Ruby (#17846)
- Don't scan files for utilities when using
@reference (#17836)
- Fix incorrectly replacing
_ with in arbitrary modifier shorthand bg-red-500/(--my_opacity) (#17889)
- Don't scan
.log files for classes by default (#17906)
- Ensure that custom utilities applying other custom utilities don't swallow nested
@apply rules (#17925)
- Download platform specific package if
optionalDependencies are skipped (#17929)
Compare Source
Added
- Support using
@tailwindcss/upgrade to upgrade between versions of v4.* (#17717)
- Add
h-lh / min-h-lh / max-h-lh utilities (#17790)
- Transition
display, visibility, content-visibility, overlay, and pointer-events when using transition to simplify @starting-style usage (#17812)
Fixed
- Don't scan
.geojson or .db files for classes by default (#17700, #17711)
- Hide default shadow suggestions when missing default shadow theme keys (#17743)
- Replace
_ with . in theme suggestions for @utility if surrounded by digits (#17733)
- Skip
color-mix(...) when opacity is 100% (#17815)
- PostCSS: Ensure that errors in imported stylesheets are recoverable (#17754)
- Upgrade: Bump all Tailwind CSS related dependencies during upgrade (#17763)
- Upgrade: Don't add
- to variants starting with @ (#17814)
- Upgrade: Don't format stylesheets that didn't change when upgrading (#17824)
Changed
- Ignore
.hg, .svn, .venv, venv, .yarn, .next, .turbo, .parcel-cache, __pycache__, and .svelte-kit folders by default (can be overridden by @source ... rules) (#17892)
@source rules that point inside .hg, .svn, .venv, venv, .yarn, .next, .turbo, .parcel-cache, __pycache__, and .svelte-kit folders no longer consider your .gitignore rules (#17892)
Compare Source
Added
- Add experimental
@tailwindcss/oxide-wasm32-wasi target for running Tailwind in browser environments like StackBlitz (#17558)
Fixed
- Ensure
color-mix(...) polyfills do not cause used CSS variables to be removed (#17555)
- Ensure
color-mix(...) polyfills create fallbacks for theme variables that reference other theme variables (#17562)
- Fix brace expansion in declining ranges like
{10..0..5} and {0..10..-5} (#17591)
- Work around a Chrome rendering bug when using the
skew-* utilities (#17627)
- Ensure container query variant names can contain hyphens (#17628)
- Ensure
shadow-inherit, inset-shadow-inherit, drop-shadow-inherit, and text-shadow-inherit inherit the shadow color (#17647)
- Ensure compatibility with array tuples used in
fontSize JS theme keys (#17630)
- Ensure folders with binary file extensions in their names are scanned for utilities (#17595)
- Upgrade: Convert
fontSize array tuple syntax to CSS theme variables (#17630)
Compare Source
Fixed
- Show warning when using unsupported bare value data type in
--value(...) (#17464)
- PostCSS: Ensure changes to the input CSS file don't generate stale output when using Turbopack (#17554)
- Ensure classes are detected in Ruby's
%w syntax in Slim templates (#17557)
Compare Source
Fixed
- Don't rely on the presence of
@layer base to polyfill @property (#17506)
- Support setting multiple inset shadows as arbitrary values (#17523)
- Fix
drop-shadow-* utilities that are defined with multiple shadows (#17515)
- PostCSS: Fix race condition when two changes are queued concurrently (#17514)
- PostCSS: Ensure files containing
@tailwind utilities are processed (#17514)
- Ensure the
color-mix(...) polyfill creates fallbacks even when using colors that cannot be statically analyzed (#17513)
- Fix slow incremental builds with
@tailwindcss/vite and @tailwindcss/postscss (especially on Windows) (#17511)
- Vite: Fix missing CSS file in Qwik setups (#17533)
Compare Source
Fixed
- Handle
' syntax in ClojureScript when extracting classes (#18888)
- Handle
@variant inside @custom-variant (#18885)
- Merge suggestions when using
@utility (#18900)
- Ensure that file system watchers created when using the CLI are always cleaned up (#18905)
- Do not generate
grid-column utilities when configuring grid-column-start or grid-column-end (#18907)
- Do not generate
grid-row utilities when configuring grid-row-start or grid-row-end (#18907)
- Prevent duplicate CSS when overwriting a static utility with a theme key (#18056)
- Show Lightning CSS warnings (if any) when optimizing/minifying (#18918)
- Use
default export condition for @tailwindcss/vite (#18948)
- Re-throw errors from PostCSS nodes (#18373)
- Detect classes in markdown inline directives (#18967)
- Ensure files with only
@theme produce no output when built (#18979)
- Support Maud templates when extracting classes (#18988)
- Upgrade: Do not migrate
variant = 'outline' during upgrades (#18922)
- Upgrade: Show version mismatch (if any) when running upgrade tool (#19028)
- Upgrade: Ensure first class inside
className is migrated (#19031)
- Upgrade: Migrate classes inside
*ClassName and *Class attributes (#19031)
Compare Source
Added
- Add
details-content variant (#15319)
- Add
inverted-colors variant (#11693)
- Add
noscript variant (#11929, #17431)
- Add
items-baseline-last and self-baseline-last utilities (#13888, #17476)
- Add
pointer-none, pointer-coarse, and pointer-fine variants (#16946)
- Add
any-pointer-none, any-pointer-coarse, and any-pointer-fine variants (#16941)
- Add safe alignment utilities (#14607)
- Add
user-valid and user-invalid variants (#12370)
- Add
wrap-anywhere, wrap-break-word, and wrap-normal utilities (#12128)
- Add
@source inline(...) and @source not inline(...) (#17147)
- Add
@source not "..." (#17255)
- Add
text-shadow-* utilities (#17389)
- Add
mask-* utilities (#17134)
- Add
bg-{position,size}-* utilities for arbitrary values (#17432)
- Add
shadow-*/<alpha>, inset-shadow-*/<alpha>, drop-shadow-*/<alpha>, and text-shadow-*/<alpha> utilities to control shadow opacity (#17398, #17434)
- Add
drop-shadow-<color> utilities (#17434)
- Improve compatibility with older versions of Safari and Firefox (#17435)
Fixed
- Follow symlinks when resolving
@source directives (#17391)
- Don't scan ignored files for classes when changing an ignored file triggers a rebuild using
@tailwindcss/cli (#17255)
- Support negated
content rules in legacy JavaScript configuration (#17255)
- Interpret syntax like
@("@​")md:... as @md:... in Razor files (#17427)
- Disallow top-level braces, top-level semicolons, and unbalanced parentheses and brackets in arbitrary values (#17361)
- Ensure the
--theme(...) function still resolves to the CSS variables when using legacy JS plugins (#17458)
- Detect used theme variables in CSS module files (#17433, #17467)
Changed
- Ignore
node_modules by default (can be overridden by @source ... rules) (#17255)
@source rules that include file extensions or point inside node_modules/ folders no longer consider your .gitignore rules (#17255)
- Deprecate
bg-{left,right}-{top,bottom} in favor of bg-{top,bottom}-{left,right} utilities (#17378)
✂ Note
PR body was truncated to here.
Configuration
📅 Schedule: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.
Uh oh!
There was an error while loading. Please reload this page.
This PR contains the following updates:
^2.2.16→^4.0.0Release Notes
tailwindlabs/tailwindcss (tailwindcss)
v4.3.1Compare Source
Added
--silentoption to suppress output in@tailwindcss/cli(#20100)Fixed
Module#registerHooksinstead ofModule#registeron Node 26+ (#20028)@applyto be used with CSS mixins (#19427)not-*correctly negates@containerqueries, includingstyle(...)queries (#20059)drop-shadow-*color utilities work with custom shadow values containingcalc(...)(#20080)@tailwindcss/vite(#20103)@tailwindcss/webpackcan be installed in Rspack projects without requiringwebpackas a peer dependency (#20027)calc(...)expressions (e.g.px-[calc(1rem+0px)]→px-[calc(1rem+0)]) (#20127)left-[99999px]→left-[99999px], notleft-24999.75) (#20130)@tailwindcss/cliin--watchmode recovers when a tracked dependency is deleted and restored (#20137)@tailwindcss/clibinaries are ignored when scanning for class candidates (#20139)addClass(...)andremoveClass(...)calls (#20198)@variantto be used insideaddBase(#19480)@sourceglobs with symlinks are preserved (#20203)@sourcerules can re-include files excluded by earlier@source notrules (#20203)@utilityrules (#20205)inset-shadow-noneand other inset shadows work correctly (#20208)@sourcedirectories are scanned even when ignored by git (#20214)@sourceglobs ending in**/*preserve dynamic path segments to avoid scanning too many files (#20217)calc(...)divisions when the result would require high precision (e.g.w-[calc(100%/3.5)]→w-[calc(100%/3.5)], notw-[28.571428571428573%]) (#20221)@tailwindcss/postcss(#20228)Changed
0instead ofcalc(var(--spacing) * 0)for spacing utilities likem-0andleft-0(#20196)var(--spacing)instead ofcalc(var(--spacing) * 1)for spacing utilities likem-1andleft-1(#20196)v4.3.0Compare Source
Added
@container-sizeutility (#18901)scrollbar-{auto,thin,none}utilities forscrollbar-width, andscrollbar-thumb-*/scrollbar-track-*color utilities forscrollbar-color(#19981, #20019)scrollbar-gutter-*utilities (#20018)zoom-*utilities (#20020)tab-*utilities (#20022)@variantwith stacked variants (e.g.@variant hover:focus { ... }) (#19996)@variantwith compound variants (e.g.@variant hover, focus { ... }) (#19996)--default(...)in--value(...)and--modifier(...)for functional@utilitydefinitions (#19989)Fixed
@pluginresolves package JavaScript entries instead of browser CSS entries when using@tailwindcss/vite(#19949)@importand@pluginpaths resolving from the wrong directory when using@tailwindcss/vite(#19965)@variantare processed by@tailwindcss/vite(#19966)basewhenresult.opts.fromis not provided when using@tailwindcss/postcss(#19980)_whitespace in arbitrary values (#19986)w-[calc(100%---spacing(60))]→w-[calc(100%-(--spacing(60)))]) (#19986)-mt-[20in]→mt-[-20in], notmt-[-1920px]) (#19988):has()variants from[&:has(...)]tohas-[...](#19991)styleattributes (e.g.style="flex-grow: 1"→style="flex-grow: 1", notstyle="grow: 1") (#19918)@utilitydefinitions with the same name but different value types (#19777)PluginWithConfigtype fromtailwindcss/pluginto fix errors when inferring plugin config types (#19707)startandendlegacy utilities without values do not generate CSS (#20003)--value(...)is required in functional@utilitydefinitions (#20005)-left-[(var(--a)+var(--b))]) (#20011)v4.2.4Compare Source
Fixed
@importand@pluginstill resolve correctly when using Vite aliases in@tailwindcss/vite(#19947)v4.2.3Compare Source
Fixed
tracking-*utilities by preferring non-negative utilities (e.g.-tracking-tighter→tracking-wider) (#19827)@tailwindcss/webpack(#19723)px-[1.2rem] py-[1.2rem]→p-[1.2rem]) (#19837)border-{t,b}-*intoborder-y-*,border-{l,r}-*intoborder-x-*, andborder-{t,r,b,l}-*intoborder-*(#19842)scroll-m{t,b}-*intoscroll-my-*,scroll-m{l,r}-*intoscroll-mx-*, andscroll-m{t,r,b,l}-*intoscroll-m-*(#19842)scroll-p{t,b}-*intoscroll-py-*,scroll-p{l,r}-*intoscroll-px-*, andscroll-p{t,r,b,l}-*intoscroll-p-*(#19842)overflow-{x,y}-*intooverflow-*(#19842)overscroll-{x,y}-*intooverscroll-*(#19842)--placeholder-colorinstead of--background-colorforplaceholder-*utilities (#19843)config.contentwhen migrating from Tailwind CSS v3 to Tailwind CSS v4 (#19846).envand.env.*to default ignored content files (#19846)overflow-ellipsisintotext-ellipsis(#19849)start-full→inset-s-full,start-auto→inset-s-auto,start-px→inset-s-px, andstart-<number>→inset-s-<number>as well as negative versions (#19849)end-full→inset-e-full,end-auto→inset-e-auto,end-px→inset-e-px, andend-<number>→inset-e-<number>as well as negative versions (#19849)-sign inside the arbitrary value-left-[9rem]→left-[-9rem](#19858)-sign outside the arbitrary valueml-[calc(-1*var(--width))]→-ml-(--width)(#19858)NODE_PATHenvironment variable in standalone CLI (#19617)v4.2.2Compare Source
Fixed
row-constructor(#19725)calc(var(--spacing)*...)expressions into--spacing(...)(#19769)@propertyat-rules (e.g.shadow-sm border) (#19727)@tailwindcss/vite(#19745)@tailwindcss/vite(#19790)w-1234 h-1234→size-1234) (#19809)w-5 h-5 size-5→''instead ofsize-5) (#19812)v4.2.1Compare Source
Fixed
.characters within curly braces in MDX files (#19711)v4.2.0Compare Source
Added
@tailwindcss/webpackpackage to run Tailwind CSS as a webpack plugin (#19610)pbs-*andpbe-*utilities forpadding-block-startandpadding-block-end(#19601)mbs-*andmbe-*utilities formargin-block-startandmargin-block-end(#19601)scroll-pbs-*andscroll-pbe-*utilities forscroll-padding-block-startandscroll-padding-block-end(#19601)scroll-mbs-*andscroll-mbe-*utilities forscroll-margin-block-startandscroll-margin-block-end(#19601)border-bs-*andborder-be-*utilities forborder-block-startandborder-block-end(#19601)inline-*,min-inline-*,max-inline-*utilities forinline-size,min-inline-size, andmax-inline-size(#19612)block-*,min-block-*,max-block-*utilities forblock-size,min-block-size, andmax-block-size(#19612)inset-s-*,inset-e-*,inset-bs-*,inset-be-*utilities forinset-inline-start,inset-inline-end,inset-block-start, andinset-block-end(#19613)font-features-*utility forfont-feature-settings(#19623)Fixed
@supportswrapper forcolor-mixvalues (#19450)@source inline()argument (#19461)@tailwindcss/cli(#19447)@utilityname validation with Oxide scanner rules (#19524)@variantinside@custom-variant(#19633).25inaspect-*fractions (e.g.aspect-8.5/11) (#19688)@sourcetrigger a full page reload when using@tailwindcss/vite(#19670)@tailwindcss/vite(#19677)@utilitynames to improve support with formatters such as Biome (#19626).jjto default ignored content directories (#19687)Deprecated
start-*andend-*utilities in favor ofinset-s-*andinset-e-*utilities (#19613)v4.1.18Compare Source
Fixed
source(...)happens relative to the file it is in (#19274)!in the value (#19243)@tailwindcss/vite(#18970)--watch(#19373)ringColor.DEFAULT) in JS configs (#19348)contenttheme key from JS configs (#19381)futureandexperimentalconfig keys (#19344)text-*andleading-*classes (#19396)@keyframes(#19419)/dev/stdout(#19421)v4.1.17Compare Source
Fixed
@variantinside legacy JS APIs (#19263)v4.1.16Compare Source
Fixed
&(#19184)& > :pseudoand& :pseudoarbitrary variants (#19178)v4.1.15Compare Source
Fixed
color-mixfallback (#19069):deep,:slotted, and:global(#19094)not-*,has-*, andin-*(#19100)theme(...)function (#19111)\tis used in at-rules (#19130)0values (#19095)break-wordstowrap-break-word(#19157)Changed
postinstallscript from oxide ([#19149])(#19149)v4.1.14Compare Source
Fixed
'syntax in ClojureScript when extracting classes (#18888)@variantinside@custom-variant(#18885)@utility(#18900)grid-columnutilities when configuringgrid-column-startorgrid-column-end(#18907)grid-rowutilities when configuringgrid-row-startorgrid-row-end(#18907)defaultexport condition for@tailwindcss/vite(#18948)@themeproduce no output when built (#18979)variant = 'outline'during upgrades (#18922)classNameis migrated (#19031)*ClassNameand*Classattributes (#19031)v4.1.13Compare Source
Changed
Fixed
visibilitywhen usingtransition(#18795)matchVariantvalues (#18798)clipwithclip-pathinsr-only(#18769)matchUtilities(#18820).vercelfolders by default (can be overridden by@source ...rules) (#18855)@-to be invalid (e.g.@-2xl:flex) (#18869)-or_(#18867, #18872)ariatheme keys to@custom-variant(#18815)datatheme keys to@custom-variant(#18816)supportstheme keys to@custom-variant(#18817)v4.1.12Compare Source
Fixed
@apply(#18404)flex-<number>utilities (#18642))from interfering with extraction in Clojure keywords (#18345)@pluginand@config(#18345)process.env.DEBUGin@tailwindcss/node(#18485)falseorundefinedproperties (#18571)@tailwindcss/postcssviatransformAssetUrls: false(#18321)addEventListenerand JavaScript variable names (#18718)--border-color-*theme keys individe-*utilities for backwards compatibility (#18704).hdrand.exrfiles for classes by default (#18734)v4.1.11Compare Source
Fixed
emit(...)(#18330)--watch=alwaysin the CLI's usage (#18337)@tailwindcss/vite(#18384)v4.1.10Compare Source
Fixed
w-[calc(100%-var(--offset))]) (#18289)v4.1.9Compare Source
Fixed
/[0.16]→/16) (#18184)mb-[-32rem]→-mb-128) (#18212)blurinwire:model.blur(#18216)v4.1.8Compare Source
Added
@applyfails (#18059)Fixed
<style>blocks (#18057, 18068)tailwindcssin pnpm monorepos (#18065)order-nonetoorder-0(#18126)class:attributes when extracting classes (#18093)-mt-[0px]tomt-[0px]instead of the other way around (#18154)\nat the end of the file (#18155).pnpm-storefolders by default (can be overridden by@source ...rules) (#18163)toJSON()(#18083)v4.1.7Compare Source
Added
Fixed
_before numbers during candidate extraction (#17961)@themeand@utilitytogether (#17675)::beforeand::afterpseudo selectors create valid CSS rules in production builds (#17979)-rotate-*utilities properly negate arbitrary values (#18014):merge(...)selectors in legacy JS plugins (#18020).are properly extracted from Clojure files (#18038)@import ... source(...)(#17963)class(#18025)v4.1.6Compare Source
Added
h-[1lh]toh-lh) (#17831, #17854)@sourcedirectives, discovered files and scanned files when usingDEBUG=*(#17906, #17952)Fixed
scalevalues generate negative values (#17831)@reference(#17836)_with in arbitrary modifier shorthandbg-red-500/(--my_opacity)(#17889).logfiles for classes by default (#17906)@applyrules (#17925)optionalDependenciesare skipped (#17929)v4.1.5Compare Source
Added
@tailwindcss/upgradeto upgrade between versions of v4.* (#17717)h-lh/min-h-lh/max-h-lhutilities (#17790)display,visibility,content-visibility,overlay, andpointer-eventswhen usingtransitionto simplify@starting-styleusage (#17812)Fixed
.geojsonor.dbfiles for classes by default (#17700, #17711)_with.in theme suggestions for@utilityif surrounded by digits (#17733)color-mix(...)when opacity is100%(#17815)-to variants starting with@(#17814)Changed
.hg,.svn,.venv,venv,.yarn,.next,.turbo,.parcel-cache,__pycache__, and.svelte-kitfolders by default (can be overridden by@source ...rules) (#17892)@sourcerules that point inside.hg,.svn,.venv,venv,.yarn,.next,.turbo,.parcel-cache,__pycache__, and.svelte-kitfolders no longer consider your.gitignorerules (#17892)v4.1.4Compare Source
Added
@tailwindcss/oxide-wasm32-wasitarget for running Tailwind in browser environments like StackBlitz (#17558)Fixed
color-mix(...)polyfills do not cause used CSS variables to be removed (#17555)color-mix(...)polyfills create fallbacks for theme variables that reference other theme variables (#17562){10..0..5}and{0..10..-5}(#17591)skew-*utilities (#17627)shadow-inherit,inset-shadow-inherit,drop-shadow-inherit, andtext-shadow-inheritinherit the shadow color (#17647)fontSizeJS theme keys (#17630)fontSizearray tuple syntax to CSS theme variables (#17630)v4.1.3Compare Source
Fixed
--value(...)(#17464)%wsyntax in Slim templates (#17557)v4.1.2Compare Source
Fixed
@layer baseto polyfill@property(#17506)drop-shadow-*utilities that are defined with multiple shadows (#17515)@tailwind utilitiesare processed (#17514)color-mix(...)polyfill creates fallbacks even when using colors that cannot be statically analyzed (#17513)@tailwindcss/viteand@tailwindcss/postscss(especially on Windows) (#17511)v4.1.1Compare Source
Fixed
'syntax in ClojureScript when extracting classes (#18888)@variantinside@custom-variant(#18885)@utility(#18900)grid-columnutilities when configuringgrid-column-startorgrid-column-end(#18907)grid-rowutilities when configuringgrid-row-startorgrid-row-end(#18907)defaultexport condition for@tailwindcss/vite(#18948)@themeproduce no output when built (#18979)variant = 'outline'during upgrades (#18922)classNameis migrated (#19031)*ClassNameand*Classattributes (#19031)v4.1.0Compare Source
Added
details-contentvariant (#15319)inverted-colorsvariant (#11693)noscriptvariant (#11929, #17431)items-baseline-lastandself-baseline-lastutilities (#13888, #17476)pointer-none,pointer-coarse, andpointer-finevariants (#16946)any-pointer-none,any-pointer-coarse, andany-pointer-finevariants (#16941)user-validanduser-invalidvariants (#12370)wrap-anywhere,wrap-break-word, andwrap-normalutilities (#12128)@source inline(...)and@source not inline(...)(#17147)@source not "..."(#17255)text-shadow-*utilities (#17389)mask-*utilities (#17134)bg-{position,size}-*utilities for arbitrary values (#17432)shadow-*/<alpha>,inset-shadow-*/<alpha>,drop-shadow-*/<alpha>, andtext-shadow-*/<alpha>utilities to control shadow opacity (#17398, #17434)drop-shadow-<color>utilities (#17434)Fixed
@sourcedirectives (#17391)@tailwindcss/cli(#17255)contentrules in legacy JavaScript configuration (#17255)@("@​")md:...as@md:...in Razor files (#17427)--theme(...)function still resolves to the CSS variables when using legacy JS plugins (#17458)Changed
node_modulesby default (can be overridden by@source ...rules) (#17255)@sourcerules that include file extensions or point insidenode_modules/folders no longer consider your.gitignorerules (#17255)bg-{left,right}-{top,bottom}in favor ofbg-{top,bottom}-{left,right}utilities (#17378)Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.