Tailwind CSS
Learn how to use Tailwind CSS in a Turborepo.
Tailwind CSS is a CSS framework that allows you to rapidly build modern websites without ever leaving your HTML.
Quickstart
If you'd rather use a template, this guide is walking through how to build this Tailwind CSS + Turborepo template.
pnpm dlx create-turbo@latest -e with-tailwindyarn dlx create-turbo@latest -e with-tailwindnpx create-turbo@latest -e with-tailwindbunx create-turbo@latest -e with-tailwindGuide
Create a monorepo
If you don't have an existing project, use create-turbo to create a new monorepo:
pnpm dlx create-turbo@latestyarn dlx create-turbo@latestnpx create-turbo@latestbunx create-turbo@latestAdd Tailwind CSS to your application
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.
Create a shared Tailwind CSS configuration package
First, build an Internal Package with four files:
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"
}
}If your frontends need a PostCSS configuration file, you can create one to share.
export const postcssConfig = {
plugins: {
"@tailwindcss/postcss": {},
},
};Create the UI package
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.
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"
}
}Above, we've only included the code related to setting up Tailwind. The full package.json is here.
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);Tailwind classes used in this package should be prefixed with ui: to avoid
style specificity issues.
Use the UI package in an application
Install the packages you've created into your application.
pnpm add @repo/ui @repo/tailwind-config --save-dev --filter=@repo/ui --filter=webyarn workspace web add @repo/ui @repo/tailwind-config --dev
yarn workspace @repo/ui add @repo/ui @repo/tailwind-config --devnpm install @repo/ui @repo/tailwind-config --workspace=web --workspace=@repo/ui --save-devcd apps/web && bun install @repo/ui @repo/tailwind-config --dev
cd packages/ui && bun install @repo/ui @repo/tailwind-config --devThen, configure the files in your application so the styles from the UI package are reflected in the application.
@import "tailwindcss";
@import "@repo/tailwind-config";import "@repo/ui/styles.css";
import "./globals.css";import { postcssConfig } from "@repo/tailwind-config/postcss";
export default postcssConfig;