Skip to content

Conversation

@luksch42
Copy link

@luksch42 luksch42 commented Jul 9, 2025

Fix hydration mismatch in production builds when using the Tailwind 4 Integration Guide

Added source("../") to the Tailwind import to explicitly set the base path for class detection.

Problem

  • Dev server runs from project root, production build runs from a different working directory
  • This causes Tailwind to scan different file sets, generating different CSS content
  • Different CSS content = different content hash = hydration mismatch

Solution

@import "tailwindcss" source("../");

The source() directive tells Tailwind to always scan from ../ relative to the CSS file location, regardless of the current working directory during build.

What it points to

  • In the Tailwind integration guide the path is relative to the CSS file location (app/styles/app.cssapp/src/)

References

Without this explicit path, builds from different working directories (CI/CD, Docker, monorepo tools) will produce inconsistent CSS output.

Mentioned in https://discord.com/channels/719702312431386674/1390062434038845521

@github-actions github-actions bot added the documentation Everything documentation related label Jul 9, 2025
@schiller-manuel
Copy link
Contributor

can you please add some more description about that. what should this point to, a link to the tailwind docs etc.

@luksch42 luksch42 changed the title fix(docs): add tailwind 4 base path to start react docs Fix hydration mismatch in production builds when using the Tailwind 4 Integration Guide Jul 9, 2025
@nx-cloud
Copy link

nx-cloud bot commented Jul 17, 2025

View your CI Pipeline Execution ↗ for commit 941ac88

Command Status Duration Result
nx affected --targets=test:eslint,test:unit,tes... ✅ Succeeded <1s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 2s View ↗

☁️ Nx Cloud last updated this comment at 2025-07-17 22:29:40 UTC

@pkg-pr-new
Copy link

pkg-pr-new bot commented Jul 17, 2025

More templates

@tanstack/arktype-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/arktype-adapter@4606

@tanstack/directive-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/directive-functions-plugin@4606

@tanstack/eslint-plugin-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/eslint-plugin-router@4606

@tanstack/history

npm i https://pkg.pr.new/TanStack/router/@tanstack/history@4606

@tanstack/react-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router@4606

@tanstack/react-router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-devtools@4606

@tanstack/react-router-with-query

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-with-query@4606

@tanstack/react-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start@4606

@tanstack/react-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-client@4606

@tanstack/react-start-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-plugin@4606

@tanstack/react-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-server@4606

@tanstack/router-cli

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-cli@4606

@tanstack/router-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-core@4606

@tanstack/router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools@4606

@tanstack/router-devtools-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools-core@4606

@tanstack/router-generator

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-generator@4606

@tanstack/router-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-plugin@4606

@tanstack/router-utils

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-utils@4606

@tanstack/router-vite-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-vite-plugin@4606

@tanstack/server-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/server-functions-plugin@4606

@tanstack/solid-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router@4606

@tanstack/solid-router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router-devtools@4606

@tanstack/solid-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start@4606

@tanstack/solid-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-client@4606

@tanstack/solid-start-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-plugin@4606

@tanstack/solid-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-server@4606

@tanstack/start-client-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-client-core@4606

@tanstack/start-plugin-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-plugin-core@4606

@tanstack/start-server-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-core@4606

@tanstack/start-server-functions-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-client@4606

@tanstack/start-server-functions-fetcher

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-fetcher@4606

@tanstack/start-server-functions-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-server@4606

@tanstack/valibot-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/valibot-adapter@4606

@tanstack/virtual-file-routes

npm i https://pkg.pr.new/TanStack/router/@tanstack/virtual-file-routes@4606

@tanstack/zod-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/zod-adapter@4606

commit: 941ac88

Copy link
Contributor

@schiller-manuel schiller-manuel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you please add some more description about that. what should this point to, a link to the tailwind docs etc.

@nikuscs
Copy link

nikuscs commented Nov 4, 2025

This is also able to be reproduced inside docker builds. Thanks for the tip. More context on the discord thread: https://discord.com/channels/719702312431386674/1431725277758619770

Probably a upstream issue with @tailwindcss or vite plugin

@birkskyum
Copy link
Member

birkskyum commented Nov 19, 2025

@luksch42 we use tailwind 4 with postcss in the examples and e2e projects of this repo. We stayed clear of the new vite plugin as it didn't seem quite ready yet. The problem described here, is it both hit when using tailwindcss 4 with the vite-plugin and postcss, or it it only one of those that's problematic?

serhalp added a commit to netlify/primitives that referenced this pull request Jan 22, 2026
This issue seems to be occurring: TanStack/router#4959.

Applying the teeny fix from this PR TanStack/router#4606 fixes it.
serhalp added a commit to serhalp/tanstack-router that referenced this pull request Jan 22, 2026
Tailwind CSS v4's `@import` directive needs an explicit `source()` path to ensure consistent CSS asset
hashing between client and server builds. Without this, builds can result in the server-rendered page
referencing an nonexistent CSS asset, resulting in a 404 (which may manifest in browser devtools as
a CORS error).

You can see an example here (open devtools to see error):
https://69725dbd6dcf150f9fbaeb37--vermillion-brigadeiros-35570b.netlify.app/
(source: https://github.com/serhalp/demo-tanstack-start-20160121).

This updates all examples, e2e fixtures, and documentation to use:
```
@import 'tailwindcss' source('../');
```

Fixes TanStack#4959.

Supersedes TanStack#4606.

---
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
serhalp added a commit to netlify/primitives that referenced this pull request Jan 23, 2026
* test: upgrade TanStack Start fixture to latest RC

* test: fix tanstack e2e fixture

This issue seems to be occurring: TanStack/router#4959.

Applying the teeny fix from this PR TanStack/router#4606 fixes it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Everything documentation related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants