Back to Blog

[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 the src/* path.
  • Theme System: CSS variable-based, with built-in support for Light/Dark modes.
  • shadcn/ui: Component library ready for immediate use.

Comments