Next.js Installation & Setup
Set up Vibe UI components in a Next.js 15 App Router application with Tailwind CSS v4.
Next.js App Router
This guide uses the Next.js 15 App Router with standard @/* import path aliases.
1. Create a Next.js Project
Create a new Next.js application using create-next-app:
npx create-next-app@latest my-vibe-app --typescript --tailwind --app --src-dir --import-alias "@/*"
cd my-vibe-app2. Initialize Vibe UI via CLI
Run the vibe-ui-kit CLI initialization command to configure paths and dependencies:
npx vibe-ui-kit@latest initFollow the prompts to select your preferred component directory (@/components/ui) and style setup.
3. Configure Global CSS Variables
Update your src/app/globals.css file with the HSL color tokens for automatic Light & Dark theme switching:
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap");
@import "tailwindcss";
@theme {
--color-background: hsl(var(--background));
--color-foreground: hsl(var(--foreground));
--color-card: hsl(var(--card));
--color-card-foreground: hsl(var(--card-foreground));
--color-popover: hsl(var(--popover));
--color-popover-foreground: hsl(var(--popover-foreground));
--color-primary: hsl(var(--primary));
--color-primary-foreground: hsl(var(--primary-foreground));
--color-secondary: hsl(var(--secondary));
--color-secondary-foreground: hsl(var(--secondary-foreground));
--color-muted: hsl(var(--muted));
--color-muted-foreground: hsl(var(--muted-foreground));
--color-accent: hsl(var(--accent));
--color-accent-foreground: hsl(var(--accent-foreground));
--color-destructive: hsl(var(--destructive));
--color-destructive-foreground: hsl(var(--destructive-foreground));
--color-border: hsl(var(--border));
--color-input: hsl(var(--input));
--color-ring: hsl(var(--ring));
--radius: 0.5rem;
}
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 240 10% 3.9%;
--card: 0 0% 100%;
--card-foreground: 240 10% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 240 10% 3.9%;
--primary: 240 5.9% 10%;
--primary-foreground: 0 0% 98%;
--secondary: 240 4.8% 95.9%;
--secondary-foreground: 240 5.9% 10%;
--muted: 240 4.8% 95.9%;
--muted-foreground: 240 3.8% 46.1%;
--accent: 240 4.8% 95.9%;
--accent-foreground: 240 5.9% 10%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 240 5.9% 90%;
--input: 240 5.9% 90%;
--ring: 240 5.9% 10%;
}
.dark {
--background: 240 10% 3.9%;
--foreground: 0 0% 98%;
--card: 240 10% 3.9%;
--card-foreground: 0 0% 98%;
--popover: 240 10% 3.9%;
--popover-foreground: 0 0% 98%;
--primary: 0 0% 98%;
--primary-foreground: 240 5.9% 10%;
--secondary: 240 3.7% 15.9%;
--secondary-foreground: 0 0% 98%;
--muted: 240 3.7% 15.9%;
--muted-foreground: 240 5% 64.9%;
--accent: 240 3.7% 15.9%;
--accent-foreground: 0 0% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 0% 98%;
--border: 240 3.7% 15.9%;
--input: 240 3.7% 15.9%;
--ring: 240 4.9% 83.9%;
}
}
@layer base {
* {
border-color: hsl(var(--border));
}
body {
background-color: hsl(var(--background));
color: hsl(var(--foreground));
font-family: "Inter", sans-serif;
}
}4. Add Components & Use in Your Application
Now you can add any component directly into your project using the CLI:
npx vibe-ui-kit@latest add button cardImport and use the component inside your Next.js page (src/app/page.tsx):
import { Button } from "@/components/ui/button"
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card"
export default function Home() {
return (
<main className="flex min-h-screen items-center justify-center p-6 bg-background">
<Card className="w-[350px]">
<CardHeader>
<CardTitle>Welcome to Vibe UI</CardTitle>
<CardDescription>Next.js 15 + Tailwind CSS v4 setup</CardDescription>
</CardHeader>
<CardContent className="flex justify-center pt-2">
<Button variant="glow">Explore Components</Button>
</CardContent>
</Card>
</main>
)
}Contributors
JS
Jenish Sabhadiya