[Guide] Setting up Tauri + React + Tailwind CSS v4 + shadcn/ui
(edited: March 14, 2026)
This guide uses TypeScript with either pnpm or npm.
1. Package Installation
Tailwind CSS v4
pnpm:
Bash
pnpm add -D tailwindcss@latest @tailwindcss/vite@latest
npm:
Bash
npm install -D tailwindcss@latest @tailwindcss/vite@latest
shadcn/ui Core Dependencies
pnpm:
Bash
pnpm add class-variance-authority clsx tailwind-merge lucide-react
npm:
Bash
npm install class-variance-authority clsx tailwind-merge lucide-react
Node.js Type Definitions
pnpm:
Bash
pnpm add -D @types/node
npm:
Bash
npm install -D @types/node
2. File Creation
src/index.css
CSS
@import "tailwindcss";
:root {
--background: oklch(1 0 0);
--foreground: oklch(0.1450 0 0);
/* ... Other CSS variables */
}
.dark {
--background: oklch(0.1450 0 0);
--foreground: oklch(0.9850 0 0);
/* ... Dark mode variables */
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
/* ... Theme variable mapping */
}
src/lib/utils.ts
TYPESCRIPT
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
components.json
JSON
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": false,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/index.css",
"baseColor": "slate",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
}
}
3. Updating Configuration Files
vite.config.ts
TYPESCRIPT
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import tailwindcss from "@tailwindcss/vite";
import path from "path";
const host = process.env.TAURI_DEV_HOST;
export default defineConfig(async () => ({
plugins: [react(), tailwindcss()],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
// ... Remaining Tauri configurations
}));
tsconfig.json
JSON
{
"compilerOptions": {
// ... Existing settings
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
}
src/main.tsx
TYPESCRIPT
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import "./index.css"; // or "./globals.css"
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
<React.StrictMode>
<App />
</React.StrictMode>,
);
src/App.tsx
TYPESCRIPT
function App() {
return (
<div className="flex items-center justify-center min-h-screen">
<h1 className="text-4xl font-bold">Hello, Tauri + React</h1>
</div>
);
}
export default App;
4. How to Add shadcn/ui Components
Bash
npx shadcn@latest add button
npx shadcn@latest add card
# Add more components as needed...
The components will be automatically generated in the src/components/ui/ directory.
5. Key Features
- Tailwind CSS v4: Utilizes the latest v4.1.18, integrated via Vite plugin.
- Path Alias: Uses
@/*as a shorthand for thesrc/*path. - Theme System: CSS variable-based, with built-in support for Light/Dark modes.
- shadcn/ui: Component library ready for immediate use.