Tailwind CSS
$
npx @buildinternet/releases get tailwind-cssMon
Wed
Fri
OctNovDecJanFebMarAprMayJunJulAugSepOct
LessMore
Releases6Avg2/moVersionsv4.2.3 to v4.3.3
Last Checked
21h ago
npx @buildinternet/releases get tailwind-cssAll notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
@tailwindcss/turbopack package to run Tailwind CSS with Next.js (20367)@source files whose real paths aren't otherwise scanned (#20356)@scope wrap the generated utilities instead of nesting inside them (#20369)@scope at-rules (#20369)@scope, wrap them in :where(:scope) (#20369)var(--tw-blur,) → var(--tw-blur, )) (#20373)max-[64rem] → max-lg) (#20380)@tailwindcss/vite from crashing on every edit under Vite's experimental bundledDev mode (#20379)@tailwindcss/oxide falls back to WASM on platforms without native bindings (#20383)%w<flex>, %w|flex|), including in Slim and Haml templates (#20387)--default(…) values in custom functional utilities (e.g. --default(box alphabetic) no longer becomes boxalphabetic) (#20392)node_modules and .git) when the project uses a safelist-style .gitignore (e.g. /* followed by !/… negations) (#20397)theme('…') namespace lookups in JavaScript plugins and config files return the full namespace object instead of the value of its DEFAULT key (#20399)scanner.globs), instead of walking their full contents on every rebuild (#20408)@tailwindcss/vite no longer forces a full page reload for external files (e.g.: .php files) (#20414)unset (#20417)rounded-sm/[5], shadow-sm/foo, stroke-2/50) (#20419)and, or, and not keywords in supports-[…] variants (e.g. selector(a: not (.foo)) → selector(a:not(.foo))) (#20420)::ng-deep and :host-context() when optimizing CSS (#20434)bg-red-500/50/ and group-hover/foo//bar:flex) (#20466)min-*, max-*, and container query variants with decimal values numerically (e.g. min-[40.25rem] before min-[40.5rem]) (#20512)\*/ are closed correctly instead of swallowing the CSS that follows (e.g. /* C:\temp\*/) (#20508)group-* and peer-* variants (#20513)loadModule and loadStylesheet callbacks alive after compilation (#20531)& when moving a pseudo-element into * or ** (e.g. [&_::before]:flex → **:[&::before]:flex) (#20550)Set.prototype.intersection polyfill in canonicalizeCandidates(…) on Node.js < 22, which returned the first set instead of the intersection (#20562)theme(…) alphas with more than 2 decimals being migrated to a modifier that changes the opacity by a factor of 100 (e.g. theme(colors.red.500/.12345) → text-red-500/[12.345%], not text-red-500/[12.345]) (#20563)theme(…) alphas as an arbitrary percentage when a custom --opacity-* theme value would change the opacity (e.g. theme(colors.red.500/50%) → text-red-500/[50%] with --opacity-50: 10%) (#20563)--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)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)--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)0 instead of calc(var(--spacing) * 0) for spacing utilities like m-0 and left-0 (#20196)var(--spacing) instead of calc(var(--spacing) * 1) for spacing utilities like m-1 and left-1 (#20196)@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)@import and @plugin still resolve correctly when using Vite aliases in @tailwindcss/vite (#19947)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)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). characters within curly braces in MDX files (#19711)@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)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)sibling-*() functions when used inside calc(…) (#19335)@variant inside legacy JS APIs (#19263)& (#19184)& > :pseudo and & :pseudo arbitrary variants (#19178)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])(https://github.com/tailwindlabs/tailwindcss/pull/19149)' 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)supports-[…] queries in arbitrary values (#13605)require.cache error when loaded through a TypeScript file in Node 22.18+ (#18665)import.meta.resolve(…) in configs for new enough Node.js versions (#18938)postcss-load-config for better ESM and TypeScript PostCSS config support with the CLI (#18938)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)@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)