NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #915 most downloaded on npm
Last release 9 days ago
25 Sep 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 46 of 46 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
1355 releases · first in 2022
One column per quarter.
Support --watch --poll[=ms] in @tailwindcss/cli when filesystem events are unreliable or unavailable
--watch --poll[=ms] in @tailwindcss/cli when filesystem events are unreliable or unavailable (#20297)bg-[#fff] and bg-[#FFF] → bg-white) (#20298)iframe:focus-visible outline styles (#20292)theme('colors.foo') in JS plugins resolves correctly when both --color-foo and --color-foo-bar exist (#20299)shadow-sm/12.5, text-shadow-sm/12.5, drop-shadow-sm/12.5, and inset-shadow-sm/12.5 (#20302)[data-foo]div as two selectors instead of one (#20303)@tailwindcss/postcss rebuilds when a preprocessor like Sass changes the input CSS without changing the input file on disk (#20310)@tailwindcss/browser and Tailwind Play (#20124)oklch (#20314)--spacing(0) is optimized to 0px instead of 0 so it remains a <length> when used in calc(…) (#20319)@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)system-ui and ui-sans-serif so CJK text respects the page's lang attribute on Windows (#20318)@tailwindcss/upgrade from rewriting ignored files when run from a subdirectory (#20329)@source rules pointing to nested files are scanned when later @source rules point to files in parent folders (#20335)@tailwindcss/vite from triggering full page reloads when scanned files are processed by Vite but haven't been loaded as modules yet (#20336)Support bare spacing values for auto-rows-* and auto-cols-* utilities (e.g. auto-rows-12 and auto-cols-16 )
auto-rows-* and auto-cols-* utilities (e.g. auto-rows-12 and auto-cols-16) (#20229)@tailwindcss/cli in --watch mode from crashing on Windows when @source points to a directory that doesn't exist (#20242)@tailwindcss/vite from crashing in Deno v2.8.x when context.parentURL is not a valid URL (#20245)@tailwindcss/cli in --watch mode rebuilds when the input CSS file changes in an ignored directory (#20246)@variant rules used in addBase(…) to use custom variants defined later (#20247)@tailwindcss/vite from crashing during HMR when scanned files or directories are deleted (#20259)font-size instead of color declarations for text-[--spacing(…)] (#20260)@source patterns from scanning unrelated sibling files and folders (#20263)%]…[% in .tt, .tt2, and .tx files (#20269)p.text-black[condition] (#20269)@position-try rules from triggering unknown at-rule warnings when optimizing CSS (#20277)--opacity theme values (#20287)@tailwindcss/postcss when used with newer PostCSS patch releases (#20289)Remove deprecation warnings by using Module#registerHooks instead of Module#register on Node 26+
--silent option to suppress output in @tailwindcss/cli (#20100)Module#registerHooks instead of Module#register on Node 26+ (#20028)@apply to be used with CSS mixins (#19427)not-* correctly negates @container queries, including style(…) queries (#20059)drop-shadow-* color utilities work with custom shadow values containing calc(…) (#20080)@tailwindcss/vite (#20103)@tailwindcss/webpack can be installed in Rspack projects without requiring webpack as a peer dependency (#20027)calc(…) expressions (e.g. px-[calc(1rem+0px)] → px-[calc(1rem+0)]) (#20127)left-[99999px] → left-[99999px], not left-24999.75) (#20130)@tailwindcss/cli in --watch mode recovers when a tracked dependency is deleted and restored (#20137)@tailwindcss/cli binaries are ignored when scanning for class candidates (#20139)addClass(…) and removeClass(…) calls (#20198)@variant to be used inside addBase (#19480)@source globs with symlinks are preserved (#20203)@source rules can re-include files excluded by earlier @source not rules (#20203)@utility rules (#20205)inset-shadow-none and other inset shadows work correctly (#20208)@source directories are scanned even when ignored by git (#20214)@source globs 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)], not w-[28.571428571428573%]) (#20221)@tailwindcss/postcss (#20228)Add scrollbar-{auto,thin,none} utilities for scrollbar-width , and scrollbar-thumb-* / scrollbar-track-* color utilities for scrollbar-color ( #19981
@container-size utility (#18901)scrollbar-{auto,thin,none} utilities for scrollbar-width, and scrollbar-thumb-* / scrollbar-track-* color utilities for scrollbar-color (#19981, #20019)scrollbar-gutter-* utilities (#20018)zoom-* utilities (#20020)tab-* utilities (#20022)@variant with stacked variants (e.g. @variant hover:focus { … }) (#19996)@variant with compound variants (e.g. @variant hover, focus { … }) (#19996)--default(…) in --value(…) and --modifier(…) for functional @utility definitions (#19989)@plugin resolves package JavaScript entries instead of browser CSS entries when using @tailwindcss/vite (#19949)@import and @plugin paths resolving from the wrong directory when using @tailwindcss/vite (#19965)@variant are processed by @tailwindcss/vite (#19966)base when result.opts.from is 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], not mt-[-1920px]) (#19988):has() variants from [&:has(…)] to has-[…] (#19991)style attributes (e.g. style="flex-grow: 1" → style="flex-grow: 1", not style="grow: 1") (#19918)@utility definitions with the same name but different value types (#19777)PluginWithConfig type from tailwindcss/plugin to fix errors when inferring plugin config types (#19707)start and end legacy utilities without values do not generate CSS (#20003)--value(…) is required in functional @utility definitions (#20005)-left-[(var(--a)+var(--b))]) (#20011)Ensure imports in @import and @plugin still resolve correctly when using Vite aliases in @tailwindcss/vite
@import and @plugin still resolve correctly when using Vite aliases in @tailwindcss/vite (#19947)Canonicalization: improve canonicalizations for tracking-* utilities by preferring non-negative utilities (e.g. -tracking-tighter → tracking-wider )
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}-* into border-y-*, border-{l,r}-* into border-x-*, and border-{t,r,b,l}-* into border-* (#19842)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)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)overflow-{x,y}-* into overflow-* (#19842)overscroll-{x,y}-* into overscroll-* (#19842)--placeholder-color instead of --background-color for placeholder-* utilities (#19843)config.content when migrating from Tailwind CSS v3 to Tailwind CSS v4 (#19846).env and .env.* to default ignored content files (#19846)overflow-ellipsis into text-ellipsis (#19849)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)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)- sign inside the arbitrary value -left-[9rem] → left-[-9rem] (#19858)- sign outside the arbitrary value ml-[calc(-1*var(--width))] → -ml-(--width) (#19858)NODE_PATH environment variable in standalone CLI (#19617)Support Vite 8 in @tailwindcss/vite
@tailwindcss/vite (#19790)row-constructor (#19725)calc(var(--spacing)*…) expressions into --spacing(…) (#19769)@property at-rules (e.g. shadow-sm border) (#19727)@tailwindcss/vite (#19745)w-1234 h-1234 → size-1234) (#19809)w-5 h-5 size-5 → '' instead of size-5) (#19812)row-constructor (#19725)calc(var(--spacing)*…) expressions into --spacing(…) (#19769)@property at-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 of size-5) (#19812)@import '@/path/to/file'; when using @tailwindcss/vite (#19803)Allow trailing dash in functional utility names for backwards compatibility
Deprecate start-* and end-* utilities in favor of inset-s-* and inset-e-* utilities
@tailwindcss/webpack package to run Tailwind CSS as a webpack plugin (#19610)pbs-* and pbe-* utilities for padding-block-start and padding-block-end (#19601)mbs-* and mbe-* utilities for margin-block-start and margin-block-end (#19601)scroll-pbs-* and scroll-pbe-* utilities for scroll-padding-block-start and scroll-padding-block-end (#19601)scroll-mbs-* and scroll-mbe-* utilities for scroll-margin-block-start and scroll-margin-block-end (#19601)border-bs-* and border-be-* utilities for border-block-start and border-block-end (#19601)inline-*, min-inline-*, max-inline-* utilities for inline-size, min-inline-size, and max-inline-size (#19612)block-*, min-block-*, max-block-* utilities for block-size, min-block-size, and max-block-size (#19612)inset-s-*, inset-e-*, inset-bs-*, inset-be-* utilities for inset-inline-start, inset-inline-end, inset-block-start, and inset-block-end (#19613)font-features-* utility for font-feature-settings (#19623)@supports wrapper for color-mix values (#19450)@source inline() argument (#19461)@tailwindcss/cli (#19447)@utility name validation with Oxide scanner rules (#19524)@variant inside @custom-variant (#19633).25 in aspect-* fractions (e.g. aspect-8.5/11) (#19688)@source trigger a full page reload when using @tailwindcss/vite (#19670)@tailwindcss/vite (#19677)@utility names to improve support with formatters such as Biome (#19626).jj to default ignored content directories (#19687)start-* and end-* utilities in favor of inset-s-* and inset-e-* utilities (#19613)Ensure validation of source(…) happens relative to the file it is in
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)content theme key from JS configs (#19381)future and experimental config keys (#19344)text-* and leading-* classes (#19396)@keyframes (#19419)/dev/stdout (#19421)Substitute @variant inside legacy JS APIs
Discard candidates with an empty data type
Upgrade: Migrate deprecated break-words to wrap-break-word
color-mix fallback (#19069):deep, :slotted, and :global (#19094)not-*, has-*, and in-* (#19100)theme(…) function (#19111)\t is used in at-rules (#19130)0 values (#19095)break-words to wrap-break-word (#19157)postinstall script from oxide (#19149)Handle ' syntax in ClojureScript when extracting classes
' syntax in ClojureScript when extracting classes (#18888)@variant inside @custom-variant (#18885)@utility (#18900)grid-column utilities when configuring grid-column-start or grid-column-end (#18907)grid-row utilities when configuring grid-row-start or grid-row-end (#18907)default export condition for @tailwindcss/vite (#18948)@theme produce no output when built (#18979)variant = 'outline' during upgrades (#18922)className is migrated (#19031)*ClassName and *Class attributes (#19031)Replace deprecated clip with clip-path in sr-only
visibility when using transition (#18795)matchVariant values (#18798)clip with clip-path in sr-only (#18769)matchUtilities (#18820).vercel folders by default (can be overridden by @source … rules) (#18855)@- to be invalid (e.g. @-2xl:flex) (#18869)- or _ (#18867, #18872)aria theme keys to @custom-variant (#18815)data theme keys to @custom-variant (#18816)supports theme keys to @custom-variant (#18817)Don't consider the global important state in @apply
@apply (#18404)flex-<number> utilities (#18642)) from interfering with extraction in Clojure keywords (#18345)@plugin and @config (#18345)process.env.DEBUG in @tailwindcss/node (#18485)false or undefined properties (#18571)@tailwindcss/postcss via transformAssetUrls: false (#18321)addEventListener and JavaScript variable names (#18718)--border-color-* theme keys in divide-* utilities for backwards compatibility (#18704).hdr and .exr files for classes by default (#18734)Add heuristic to skip candidate migrations inside emit(…)
Fix incorrectly generated CSS when using percentages in arbitrary values with calc (e.g. w-[calc(100%-var(--offset))])
w-[calc(100%-var(--offset))]) (#18289)Correctly parse custom properties with strings containing semicolons
/[0.16] → /16) (#18184)mb-[-32rem] → -mb-128) (#18212)blur in wire:model.blur (#18216)Upgrade: Migrate deprecated order-none to order-0
@apply fails (#18059)<style> blocks (#18057, 18068)tailwindcss in pnpm monorepos (#18065)order-none to order-0 (#18126)class: attributes when extracting classes (#18093)-mt-[0px] to mt-[0px] instead of the other way around (#18154)\n at the end of the file (#18155).pnpm-store folders by default (can be overridden by @source … rules) (#18163)toJSON() (#18083)Upgrade: Migrate bare values to named values
_ before numbers during candidate extraction (#17961)@theme and @utility together (#17675)::before and ::after pseudo 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)Upgrade: Automatically convert arbitrary values to named values when possible (e.g. h-[1lh] to h-lh) (#17831, #17854)
h-[1lh] to h-lh) (#17831, #17854)@source directives, discovered files and scanned files when using DEBUG=* (#17906, #17952)scale values generate negative values (#17831)@reference (#17836)_ with in arbitrary modifier shorthand bg-red-500/(--my_opacity) (#17889).log files for classes by default (#17906)@apply rules (#17925)optionalDependencies are skipped (#17929)Support using @tailwindcss/upgrade to upgrade between versions of v4.*
@tailwindcss/upgrade to upgrade between versions of v4.* (#17717)h-lh / min-h-lh / max-h-lh utilities (#17790)display, visibility, content-visibility, overlay, and pointer-events when using transition to simplify @starting-style usage (#17812).geojson or .db files for classes by default (#17700, #17711)_ with . in theme suggestions for @utility if surrounded by digits (#17733)color-mix(…) when opacity is 100% (#17815)- to variants starting with @ (#17814)@tailwindcss/upgrade to upgrade between versions of v4.* (#17717)h-lh / min-h-lh / max-h-lh utilities (#17790)display, visibility, content-visibility, overlay, and pointer-events when using transition to simplify @starting-style usage (#17812).geojson or .db files for classes by default (#17700, #17711)_ with . in theme suggestions for @utility if surrounded by digits (#17733)color-mix(…) when opacity is 100% (#17815)- to variants starting with @ (#17814).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)Add experimental @tailwindcss/oxide-wasm32-wasi target for running Tailwind in browser environments like StackBlitz
@tailwindcss/oxide-wasm32-wasi target for running Tailwind in browser environments like StackBlitz (#17558)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, and text-shadow-inherit inherit the shadow color (#17647)fontSize JS theme keys (#17630)fontSize array tuple syntax to CSS theme variables (#17630)Show warning when using unsupported bare value data type in --value(…)
Don't rely on the presence of @layer base to polyfill @property
@layer base to polyfill @property (#17506)drop-shadow-* utilities that are defined with multiple shadows (#17515)@tailwind utilities are processed (#17514)color-mix(…) polyfill creates fallbacks even when using colors that cannot be statically analyzed (#17513)@tailwindcss/vite and @tailwindcss/postscss (especially on Windows) (#17511)Disable padding in @source inline(…) brace expansion
Deprecate bg-{left,right}-{top,bottom} in favor of bg-{top,bottom}-{left,right} utilities
details-content variant (#15319)inverted-colors variant (#11693)noscript variant (#11929, #17431)items-baseline-last and self-baseline-last utilities (#13888, #17476)pointer-none, pointer-coarse, and pointer-fine variants (#16946)any-pointer-none, any-pointer-coarse, and any-pointer-fine variants (#16941)user-valid and user-invalid variants (#12370)wrap-anywhere, wrap-break-word, and wrap-normal utilities (#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>, and text-shadow-*/<alpha> utilities to control shadow opacity (#17398, #17434)drop-shadow-<color> utilities (#17434)@source directives (#17391)@tailwindcss/cli (#17255)content rules 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)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)bg-{left,right}-{top,bottom} in favor of bg-{top,bottom}-{left,right} utilities (#17378)object-{left,right}-{top,bottom} in favor of object-{top,bottom}-{left,right} utilities (#17437)Fix an issue causing the CLI to hang when processing Ruby files
Add support for literal values in --value('…') and --modifier('…')
--value('…') and --modifier('…') (#17304)( in Pug (#17320)@keyframes for theme animations are emitted if they are referenced following a comma (#17352)Slim templates embedded in Ruby files (#17336)--spacing(--value(integer, number)) is used (#17308)::-webkit-details-marker pseudo to marker variant (#17362)Fix incorrect angle in -bg-conic-* utilities
-bg-conic-* utilities (#17174)border-[12px_4px] being interpreted as a border-color instead of a border-width (#17248)<template lang="…"> in Vue files (#17252)--value(…) or --modifier(…) calls don't delete subsequent declarations (#17273)( in Slim (#17278)PluginUtils from tailwindcss/plugin for compatibility with v3 (#17299)line-height: initial from Preflight (#15212)--theme(…) function now returns CSS variables from your theme variables unless used inside positions where CSS variables are invalid (e.g. inside @media queries) (#17036)Do not extract candidates with JS string interpolation ${
Ensure .node and .wasm files are not scanned for utilities
.node and .wasm files are not scanned for utilities (#17123)Vite: Fix url(…) rebasing in transitively imported CSS files
url(…) rebasing in transitively imported CSS files (#16965)url(…)s in imported CSS files (#16965)} and { are properly extracted (#17001)razor/cshtml pre-processing (#17027)Ensure classes containing -- are extracted correctly
-- are extracted correctly (#16972)[ are extracted in Slim templating language (#16985)Add col- and row- utilities for grid-column and grid-row
col-<number> and row-<number> utilities for grid-column and grid-row (#15183)not-* does not remove :is(…) from variants (#16825)@keyframes are correctly emitted when using a prefix (#16850)@utility declarations when @apply is used in nested rules (#16940)outline-hidden behaves like outline-none outside of forced colors mode (#16943)!important on CSS variables again (#16873).svg file with # or ? in the filename (#16957)Make JS APIs available to plugins and configs in the Standalone CLI
.css (#16780)@reference "…" would sometimes omit keyframe animations (#16774)z-*! utilities are properly marked as !important (#16795)@reference "…" instead of duplicate CSS variable declarations (#16774)Allow @import with theme(…) options for stylesheets that contain more than just @theme rules
@import with theme(…) options for stylesheets that contain more than just @theme rules (#16514)!important to CSS variable declarations when using the important modifier (#16668).gitignore file when using automatic source detection(#16631)translate-z-px utilities once in compiled CSS (#16718)Export tailwindcss/lib/util/flattenColorPalette.js for backward compatibility
tailwindcss/lib/util/flattenColorPalette.js for backward compatibility (#16411)_ in suggested theme keys (#16433)--default-outline-width can be used to change the outline-width value of the outline utility (#16469)tailwindcss/plugin for backward compatibility (#16505)@tailwindcss/oxide Windows builds (#16602)tailwindcss in @tailwindcss/* packages (#16623)darkMode JS config setting with block syntax converts to use @slot (#16507)tailwindcss and @tailwindcss/postcss are installed when upgrading (#16620)Revert change to no longer include theme variables that aren't used in compiled CSS
Add @theme static option for always including theme variables in compiled CSS
Fix a crash when setting JS theme values to null
null (#16210)containers JS theme key is added to the --container-* namespace (#16169)@keyframes are generated even if an --animation-* variable spans multiple lines (#16237)?commonjs-proxy flag (#16238)order-first and order-last for Firefox (#16266)NODE_PATH is respected when resolving JavaScript and CSS files (#16274)@variant inside a referenced stylesheet could cause a stack overflow (#16300)Fix incorrect removal of @import url();
@import url(); (#16144)Only generate positive grid-cols-* and grid-rows-* utilities
grid-cols-* and grid-rows-* utilities (#16020)@reference or @variant (#16057)<style> blocks in HTML files (#16069)@keyframes in @theme reference (#16120)@variant when at the top-level of a stylesheet (#16129)Include :open pseudo-class in existing open variant
:open pseudo-class in existing open variant (#15349)min-w/h-none utilities (#15845)none modifier have a line-height set e.g. text-sm/none (#15921)--spacing variable (#15857)@tailwindcss/browser does not pollute the global namespace (#15978)tailwind-merge is not scanned when using the Vite plugin (#16005)/ directory (#15988)leading-[1] to leading-none (#16004)Holy shit it's actually done — we just tagged Tailwind CSS v4.0.
Holy shit it's actually done — we just tagged Tailwind CSS v4.0.
Tailwind CSS v4.0 is an all-new version of the framework optimized for performance and flexibility, with a reimagined configuration and customization experience, and taking full advantage of the latest advancements the web platform has to offer.
@property, and color-mix().color-scheme, field-sizing, complex shadows, inert, and more.Start using Tailwind CSS v4.0 today by installing it in a new project, or playing with it directly in the browser on Tailwind Play.
For existing projects, we've published a comprehensive upgrade guide and built an automated upgrade tool to get you on the latest version as quickly and painlessly as possible.
For a deep-dive into everything that's new, check out the announcement post.
Add support for using @variant to use variants in your CSS
@variant to use variants in your CSS (#15663)outline-color when transitioning colors (#15690)main and browser fields for @tailwindcss/browser (#15594)* in theme namespace syntax (e.g.: --color-\*: initial;) (#15603)@theme options when resolving values in custom functional utilities (#15623)data-checked-[selected=1]:*) (#15629)-outline-offset-* utilities are suggested in IntelliSense (#15646)stdout when --output is set to - or omitted with @tailwindcss/cli (#15656)not-* from being used with variants that have multiple sibling rules (#15689)--spacing(…) to prevent ambiguity (#15596)Remove --container-prose in favor of a deprecated --max-width-prose theme variable so that *-prose is only available for max-width utilities and only…
@tailwindcss/browser package to run Tailwind CSS in the browser (#15558)@reference "…" API as a replacement for the previous @import "…" reference option (#15565)--spacing(…), --alpha(…), and --theme(…) CSS functions (#15572)place-content-between, place-content-around, and place-content-evenly utilities (#15440)bg-round and bg-space utilities to bg-repeat-round to bg-repeat-space (#15462)inset-shadow-* suggestions in IntelliSense (#15471)] (#15503)@apply rules are processed in the correct order (#15542)@utility (#15573)@keyframes contributed by JavaScript plugins when using @reference imports (#15581)shadow in filter: 'drop-shadow(…)') (#15566)theme(spacing.2) to --spacing(2) (#15579)theme(…) to --theme(…) (#15579)Ensure Symbol.dispose and Symbol.asyncDispose are polyfilled
Symbol.dispose and Symbol.asyncDispose are polyfilled (#15404)Export tailwindcss/lib/util/flattenColorPalette for backward compatibility
tailwindcss/lib/util/flattenColorPalette for backward compatibility (#15318)@tailwindcss/postcss on Windows (#15321)shadow-none suggestion in IntelliSense (#15342)-webkit-background-clip: text) (#15389)Ensure @import "…" reference never generates utilities
@import "…" reference never generates utilities (#15307)Parallelize parsing of individual source files
@import "…" reference option for importing Tailwind CSS configuration details into another CSS entry point without duplicating CSS (#15228)@tailwindcss/postcss by translating between internal data structures and PostCSS nodes directly without additional parsing or stringification (#15297)@tailwindcss/vite (#15275)@tailwindcss/vite (#15274)@tailwindcss/vite in Vite 6 projects (#15274)@tailwindcss/vite (#15279)@tailwindcss/postcss (#15273)@tailwindcss/postcss extension (#15273)@container suggestion in IntelliSense (#15288)Don't scan source files for utilities unless @tailwind utilities is present in the CSS in @tailwindcss/postcss and @tailwindcss/vite
@tailwind utilities is present in the CSS in @tailwindcss/postcss and @tailwindcss/vite (#15226)@tailwindcss/postcss and @tailwindcss/vite (#15226)overflow-clip utility (#15244)backdrop-blur to backdrop-blur-sm and backdrop-blur-sm to backdrop-blur-xs (#15242)Ensure any necessary vendor prefixes are generated for iOS Safari, Firefox, and Chrome
.group and .peer are prefixed when using the prefix(…) option (#15174)--spacing-* variables take precedence over --container-* variables (#15180)translate-* utilities work with arbitrary values that use calc(…) (#15215)calc(…) (#15215).group and .peer classes (#15208)layer(…) in @import is not first in the list of functions/conditions (#15109)Use configured --letter-spacing values for custom font size utilities
--letter-spacing values for custom font size utilities (#15099)space-x/y-* and divide-x/y-* with variants can undo space-x/y-reverse and divide-x/y-reverse (#15094)break-keep utility (#15108)h1) when scanning files (#15110)layer(…) as the first param to @import (#15102)About eight months ago we open-sourced our progress on Tailwind CSS v4.0. Hundreds of hours of fixing bugs, soul-crushing backward compatibility work,
<a href="https://tailwindcss.com/blog/tailwindcss-v4-beta"><img alt="Tailwind CSS v4.0 Beta" src="https://assets.tailwindcss.com/blog/tailwindcss-v4-beta/card.jpg" width="768"></a>
About eight months ago we open-sourced our progress on Tailwind CSS v4.0. Hundreds of hours of fixing bugs, soul-crushing backward compatibility work, and troubleshooting Windows CI failures later, I'm excited to finally tag the first public beta release.
As I talked about when we published the first alpha, Tailwind CSS v4.0 is an all-new engine built for performance, and designed for the modern web.
@starting-style, popovers, and more.There's so much more to say, but everything you need to get started is in the new beta documentation we published today:
Get started with Tailwind CSS v4.0 Beta 1 →
Start building and help us bullet-proof this thing for the stable release early in the new year.
opacity theme values when migrating to CSS (#15067)opacity theme values configured as decimal numbers via JS config files work with color utilities (#15067)decoration-clone, decoration-slice, overflow-ellipsis, flex-grow-*, and flex-shrink-* (#15069)color in the form reset snippet (#15064)Add consistent base styles for buttons and form controls
group-[]:flex to in-[.group]:flex (#15054)ring to ring-3 (#15063)in-* requires a descendant selector (#15054)group-[]:flex to in-[.group]:flex (#15054)ring to ring-3 (#15063)in-* that use the child combinator instead of the descendant combinator (#15054)Reintroduce max-w-screen-* utilities that read from the --breakpoint namespace as deprecated utilities
max-w-screen-* utilities that read from the --breakpoint namespace as deprecated utilities (#15013)var(…) by using parentheses instead of square brackets (e.g. bg-(--my-color)) (#15020)in-* variant (#15025)@tailwindcss/forms, @tailwindcss/typography, and @tailwindcss/aspect-ratio with the standalone CLI (#15028)addUtilities() and addComponents() to work with child combinators and other complex selectors (#15029)<alpha-value> in JS configs and plugins (#15033)transition-discrete and transition-normal utilities for transition-behavior (#15051)[&>*] to the * variant (#15022)[&_*] to the ** variant (#15022)<alpha-value> in JS configs (#15033)flex is suggested (#15014)cjs-only and esm-only plugins (#15041)calc(…) on just values for negative -rotate-* utilities, not on the rotateX/Y/Z(…) functions themselves (#15044)@config (#15001)@import "https://fonts.google.com") (#15040)url(…) (e.g.: @import url("https://fonts.google.com")) (#15040)resolveJsId when resolving tailwindcss/package.json (#15041)--opacity-* theme values (#14278)Support opacity values in increments of 0.25 by default
0.25 by default (#14980)container component as a utility (#14993, #14999)container component configuration to CSS (#14999)<style> blocks always run the expected Svelte processors when using the Vite extension (#14981)blur, rounded, or shadow (#14979)@config is injected in nearest common ancestor stylesheet (#14989)layer(…) to imports above Tailwind directives (#14982)Don't reset horizontal padding on date/time pseudo-elements
Your coding agent can read these notes before it upgrades. Set up the MCP server →