Last 12 weeks · 52 commits
4 of 6 standards met
Fixes #20510 doesn't hide a `sr-only1pxclip-path: inset(50%)widthheight: 1pxoverflow: hiddenclip-pathclip-pathsr-onlyclip-pathsr-only:where(...)not-sr-onlysr-only md:not-sr-onlypackages/tailwindcss/src/utilities.test.tssr-only.sr-only > caption { clip-path: inset(50%) }packages/tailwindcss/tests/ui.spec.tsclip-pathinset(50%)sr-only md:not-sr-onlymdclip-pathnonedocument.elementFromPoint()inset(50%)inset(50%)--project=firefoxsandbox_extension_issue_file_to_process failed for …/plugin-container.app: 1 (Operation not permitted)browserType.launch` then times out), and no system Firefox is installed. So Firefox itself is the one engine I did not observe; the behaviour above comes from the issue report and the spec. The new test asserts the cascade rule rather than an engine-specific box layout, which is why I'd expect it to hold in Firefox too — it should be confirmed by CI.
Fixes #20426. Summary resolves CSS with a custom Vite resolver. That resolver spread the user's config but then overwrote with a hardcoded list (), so user-configured were silently dropped for CSS even though they were honoured for JS imports. This happened in both resolver branches (legacy pre-Environment-API and Environment API). The fix merges instead of overwrites: so the built-in conditions keep priority while user conditions still apply. Test plan Added regression tests in covering both resolver branches: vite (Environment API) and vite (legacy). A fixture package exposes under a export and under /; with the built CSS must contain the custom-condition rule. 2/2 new tests pass; full : 15/15 pass. Verified with the real Vite 8 resolver using the exact option shapes: old shape resolved (bug reproduced), new shape resolves (fixed). Prettier clean on both changed files; reports 0 errors in the changed file (remaining 39 errors elsewhere in the monorepo are pre-existing environmental issues unrelated to this change). Note: the fixture includes in the test CSS (with an explanatory comment) because the plugin returns early for files without Tailwind features, so the resolver under test would never run otherwise.
Problem When installing in an environment using strict (especially ), users experience and errors related to the WASM fallback runtime packages (, , , ). The issue stems from listing these packages in both and . Because of how workspaces (which this monorepo uses) handle symlinking, the actual are not fully packed into the published tarball for . When end-users install the package using , expects bundled dependencies to already exist inside the downloaded tarball and skips fetching them from the registry. Since they are missing from the tarball, surfaces unmet dependency errors and blocks strict installations. Solution This PR strips the array from . Since these packages are already correctly listed under standard , removing them from forces , , and to correctly fetch and resolve them from the registry during installation, completely eliminating the errors. Implementation details:** 1. Manually removed from . 2. Updated to automatically strip from the package.json during the lifecycle. This ensures that even if automatically injects during , they are stripped immediately before packing/publishing. Verification Locally verified that the in is correctly mutated post-build and no longer includes , while preserving all functional .
What version of Tailwind CSS are you using? Current TailwindCSS: 4.2.1 Current tailwindcss/vite: 4.2.1 What build tool (or framework if it abstracts the build tool) are you using? Vite: 7.3.1 (or any ^7.0.0 release) Solid Start: 2.0.0-alpha.2 What version of Node.js are you using? For example: 25.8.1 npm: 11.11.11 What browser are you using? Firefox Developer Edition: 149.0b8-1 Vivaldi: 7.8.3925.81-1 What operating system are you using? EndeavourOS Linux x86_64 6.19.8-arch1-1 Reproduction URL https://github.com/KipzonderKop101/reproduction-tailwindcss-solid-start Describe your issue** CSS changes made via Tailwind classes are not picked up by HMR. They only apply after a full page refresh. Regular (non-style) hot reload works fine. Downgrading from Vite 7 to Vite 6 resolves the issue. All other behavior is identical between the two versions.
Summary chooses between an incremental and a full rebuild by comparing the mtimes of the entry file and its resolved // graph. It never looks at the input CSS itself, so when that CSS is produced by an upstream tool (e.g. Sass) and passed to the plugin via , it can change while the file's mtime stays the same. The plugin then re-emits its previously cached output and silently drops the change. This stores the input CSS per cache entry and takes the existing full rebuild path when it differs from the previous compile, mirroring the fix the CLI watcher already has for changed input files. Fixes #20307 Test plan Added a regression test in that compiles two different inputs for the same on-disk file (unchanged mtime) and asserts the second compile reflects the new CSS. Confirmed it fails on (the second compile returns the stale first output) and passes with the fix. Ran the package tests (all green) and checked formatting with Prettier.
Repository: tailwindlabs/tailwindcss. Description: A utility-first CSS framework for rapid UI development. Stars: 97732, Forks: 6999. Primary language: TypeScript. Languages: TypeScript (80.3%), Rust (17.8%), CSS (0.6%), HTML (0.6%), Haml (0.4%). License: MIT. Homepage: https://tailwindcss.com/ Topics: css, css-framework, functional-css, postcss, responsive, tailwindcss, utility-classes. Latest release: v4.3.3 (2mo ago). Open PRs: 52, open issues: 36. Last activity: 3d ago. Community health: 62%. Top contributors: adamwathan, RobinMalfait, depfu[bot], thecrypticace, dependabot-preview[bot], reinink, philipp-spiess, bradlc, dependabot-support, MichaelDeBoey and others.