Installation
Framework-specific installation guides for Hareru UI
CLI Quick Setup
Generate CSS imports and auto-append to your stylesheet:
npx @hareru/cli add Button --write
npx @hareru/cli add Button --write --mode tailwindThe CLI auto-detects your CSS entry file and package manager. CSS mode defaults to per-component when --mode is not specified.
Next.js
1. Install packages
npm install @hareru/tokens @hareru/ui2. Configure Next.js
Add the following to next.config.ts:
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
transpilePackages: ["@hareru/ui", "@hareru/tokens"],
};
export default nextConfig;3. Import styles
In your globals.css, pick one of:
A. Standalone (includes tokens, reset, and component styles):
@import "@hareru/ui/styles.css";B. Portable (alongside other frameworks — no global reset):
@import "@hareru/tokens/css";
@import "@hareru/ui/styles/components.css";
@import "@hareru/ui/styles/scope.css"; /* opt-in: .hui-root subtree typography */C. Tailwind v4 coexistence (recommended for Tailwind projects):
@layer theme, base, hui, components, utilities;
@import "tailwindcss";
@import "@hareru/tokens/css";
@import "@hareru/ui/styles/components.layer.css";
@import "@hareru/ui/styles/scope.css"; /* opt-in */D. Per-component (minimal bundle):
@import "@hareru/tokens/css";
@import "@hareru/ui/styles/components/Button.css";
@import "@hareru/ui/styles/components/Card.css";
/* Add @hareru/ui/styles/animations.css when using StreamingText, ReasoningPanel, or ToolCallCard */
styles.cssalready bundles tokens, so@hareru/tokens/cssis not needed when using it.If your host app has no CSS reset, optionally add
@import "@hareru/ui/styles/baseline.css"forbox-sizing: border-boxand form element font inheritance.
4. Add providers
// app/providers.tsx
"use client"
import { ThemeProvider, Toaster } from "@hareru/ui"
export function Providers({ children }: { children: React.ReactNode }) {
return (
<ThemeProvider defaultTheme="system">
{children}
<Toaster />
</ThemeProvider>
)
}// app/layout.tsx
import { Providers } from "./providers"
import "./globals.css"
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<Providers>{children}</Providers>
</body>
</html>
)
}Vite
1. Install packages
npm install @hareru/tokens @hareru/ui2. Import styles
In your entry CSS file, pick one of the patterns above (A–D). For example:
A. Standalone (Hareru-only app):
@import "@hareru/ui/styles.css";C. Tailwind v4 coexistence:
@layer theme, base, hui, components, utilities;
@import "tailwindcss";
@import "@hareru/tokens/css";
@import "@hareru/ui/styles/components.layer.css";3. Add providers
// src/App.tsx
import { ThemeProvider, Toaster } from "@hareru/ui"
function App() {
return (
<ThemeProvider defaultTheme="system">
{/* Your app */}
<Toaster />
</ThemeProvider>
)
}Local Development (Monorepo)
If you're using Hareru UI as a local dependency:
// package.json
{
"@hareru/tokens": "file:../hareru-ui/packages/tokens",
"@hareru/ui": "file:../hareru-ui/packages/ui"
}Run pnpm build inside the hareru-ui directory first to generate the dist output.
For Next.js with Turbopack, add:
import path from "path";
const nextConfig: NextConfig = {
turbopack: {
root: path.join(__dirname, ".."),
},
transpilePackages: ["@hareru/ui", "@hareru/tokens"],
};