TailwindV4Plugin is pinned at tailwindcss@4.3.0 / @tailwindcss/postcss@4.3.0, held there by the note on Constants.VERSION in packages/reflex-base/src/reflex_base/plugins/tailwind_v4.py:
Held at 4.3.0: 4.3.1+ reworked source-file scanning (tailwindlabs/tailwindcss#20214, #20217, #20203) and walks the git-ignored .web tree, which collapses the docs prod build at scale.
I checked whether 4.3.2 or 4.3.3 lifted the hold while refreshing dependencies in #7019, and they don't:
- 4.3.1 — #20214 "Ensure explicitly referenced
@source directories are scanned even when ignored by git". This is the change that causes our problem, and it is deliberate upstream behavior, not a bug they intend to revert.
- 4.3.2 — #20246 (CLI
--watch rebuild in an ignored dir), #20263 ("Prevent @source patterns from scanning unrelated sibling files and folders"). Adjacent, but does not restore the pre-4.3.1 gitignore behavior.
- 4.3.3 — #20335 (
@source ordering with nested vs. parent folders), #20336 (Vite full-reload avoidance). Also unrelated to the gitignore walk.
So the pin cannot move on a version bump alone — the fix has to be on our side, in what we hand Tailwind as sources. tailwindcss and @tailwindcss/postcss are now filtered out of the outdated-dependency check with a pointer here, so they will stop showing up as perpetually-stale rows until this is resolved.
Why our config trips it
TailwindV4Plugin writes tailwind.config.js inside .web and pulls it in from the root stylesheet with @config "../tailwind.config.js". The default content globs (Constants.CONTENT) are .web-relative:
./app/**/*.{js,ts,jsx,tsx}
./utils/**/*.{js,ts,jsx,tsx}
Because .web is git-ignored, pre-4.3.1 Tailwind skipped it; from 4.3.1 an explicitly referenced directory is scanned regardless, so the scan now also reaches build output under .web (build/, node_modules/, .react-router/) at docs scale.
What needs doing
Notes
@tailwindcss/typography (0.5.20) and the docs app's tailwindcss-animated / tailwindcss-scroll-mask are unaffected and stay in the outdated check — the ignore patterns are anchored on the table's package column specifically so they are not swallowed too.
TailwindV4Pluginis pinned attailwindcss@4.3.0/@tailwindcss/postcss@4.3.0, held there by the note onConstants.VERSIONinpackages/reflex-base/src/reflex_base/plugins/tailwind_v4.py:I checked whether 4.3.2 or 4.3.3 lifted the hold while refreshing dependencies in #7019, and they don't:
@sourcedirectories are scanned even when ignored by git". This is the change that causes our problem, and it is deliberate upstream behavior, not a bug they intend to revert.--watchrebuild in an ignored dir), #20263 ("Prevent@sourcepatterns from scanning unrelated sibling files and folders"). Adjacent, but does not restore the pre-4.3.1 gitignore behavior.@sourceordering with nested vs. parent folders), #20336 (Vite full-reload avoidance). Also unrelated to the gitignore walk.So the pin cannot move on a version bump alone — the fix has to be on our side, in what we hand Tailwind as sources.
tailwindcssand@tailwindcss/postcssare now filtered out of the outdated-dependency check with a pointer here, so they will stop showing up as perpetually-stale rows until this is resolved.Why our config trips it
TailwindV4Pluginwritestailwind.config.jsinside.weband pulls it in from the root stylesheet with@config "../tailwind.config.js". The default content globs (Constants.CONTENT) are.web-relative:Because
.webis git-ignored, pre-4.3.1 Tailwind skipped it; from 4.3.1 an explicitly referenced directory is scanned regardless, so the scan now also reaches build output under.web(build/,node_modules/,.react-router/) at docs scale.What needs doing
docs/appprod build to show the collapse@source notexclusions for.web/build,.web/node_modules, and.web/.react-routerConstants.VERSIONand the@tailwindcss/postcsspin, and drop the note that pins them\| tailwindcssand\| @tailwindcss/postcssfrom the frontend ignore list in.github/workflows/check_outdated_dependencies.ymlNotes
@tailwindcss/typography(0.5.20) and the docs app'stailwindcss-animated/tailwindcss-scroll-maskare unaffected and stay in the outdated check — the ignore patterns are anchored on the table's package column specifically so they are not swallowed too.