apps/docs/content/docs/guides/tools/tailwind.mdx
Tailwind CSS is a CSS framework that allows you to rapidly build modern websites without ever leaving your HTML.
If you'd rather use a template, this guide is walking through how to build this Tailwind CSS + Turborepo template.
<PackageManagerTabs> <Tab value="pnpm">pnpm dlx create-turbo@latest -e with-tailwind
yarn dlx create-turbo@latest -e with-tailwind
npx create-turbo@latest -e with-tailwind
bunx create-turbo@latest -e with-tailwind
<Callout type="info">This guide is for Tailwind CSS v4.</Callout>
<Steps> <Step>If you don't have an existing project, use create-turbo to create a new monorepo:
<PackageManagerTabs> <Tab value="pnpm">pnpm dlx create-turbo@latest
yarn dlx create-turbo@latest
npx create-turbo@latest
bunx create-turbo@latest
Follow Tailwind CSS's guides to set up Tailwind CSS for your frontend framework.
Once completed, you can start working on bringing your UI package into the applications.
</Step> <Step>First, build an Internal Package with four files:
<Tabs items={["package.json", "shared-styles.css", "postcss.config.js (Optional)"]}>
<Tab value="package.json">This package.json installs Tailwind CSS so we can create the file shared styles and export for the rest of the repository.
{
"name": "@repo/tailwind-config",
"version": "0.0.0",
"type": "module",
"private": true,
"exports": {
".": "./shared-styles.css",
"./postcss": "./postcss.config.js"
},
"devDependencies": {
"postcss": "^8.5.3",
"tailwindcss": "^4.1.5"
}
}
This shared-styles.css file will be shared to the libraries and applications in the repository. The variables shown will be available anywhere that the file is included.
@import "tailwindcss";
@theme {
--blue-1000: #2a8af6;
--purple-1000: #a853ba;
--red-1000: #e92a67;
}
If your frontends need a PostCSS configuration file, you can create one to share.
export const postcssConfig = {
plugins: {
"@tailwindcss/postcss": {},
},
};
You can now build the components to share to your applications.
For a full example, visit the source code for @repo/ui package in the Tailwind CSS example. The files required for your Tailwind CSS setup are below.
<Tabs items={["package.json", "turbo.json", "styles.css"]}>
<Tab value="package.json">The package.json installs the dependencies for the package, sets up scripts for development and build environments, and marks the exports for the package.
{
"exports": {
"./styles.css": "./dist/index.css",
"./*": "./dist/*.js"
},
"scripts": {
"build:styles": "tailwindcss -i ./src/styles.css -o ./dist/index.css",
"build:components": "tsc",
"dev:styles": "tailwindcss -i ./src/styles.css -o ./dist/index.css --watch",
"dev:components": "tsc --watch"
},
"devDependencies": {
"@repo/tailwind-config": "workspace:*",
"@tailwindcss/cli": "^4.1.5",
"@tailwindcss/postcss": "^4.1.5",
"autoprefixer": "^10.4.20",
"tailwindcss": "^4.1.5"
}
}
Create a build and dev task that runs the scripts for building of components and style sheets in parallel.
{
"extends": ["//"],
"tasks": {
"build": {
"dependsOn": ["build:styles", "build:components"]
},
"build:styles": {
"outputs": ["dist/**"]
},
"build:components": {
"outputs": ["dist/**"]
},
"dev": {
"with": ["dev:styles", "dev:components"]
},
"dev:styles": {
"cache": false,
"persistent": true
},
"dev:components": {
"cache": false,
"persistent": true
}
}
}
This styles.css contains component-level styles for the shared UI library.
/* Component-level styles for the UI package */
@import "tailwindcss" prefix(ui);
Install the packages you've created into your application.
<PackageManagerTabs> <Tab value="pnpm">pnpm add @repo/ui @repo/tailwind-config --save-dev --filter=@repo/ui --filter=web
yarn workspace web add @repo/ui @repo/tailwind-config --dev
yarn workspace @repo/ui add @repo/ui @repo/tailwind-config --dev
npm install @repo/ui @repo/tailwind-config --workspace=web --workspace=@repo/ui --save-dev
cd apps/web && bun install @repo/ui @repo/tailwind-config --dev
cd packages/ui && bun install @repo/ui @repo/tailwind-config --dev
Then, configure the files in your application so the styles from the UI package are reflected in the application.
<Tabs items={["globals.css", "layout.tsx", "postcss.config.js (Optional)"]}>
<Tab value="globals.css">@import "tailwindcss";
@import "@repo/tailwind-config";
import "@repo/ui/styles.css";
import "./globals.css";
import { postcssConfig } from "@repo/tailwind-config/postcss";
export default postcssConfig;