CLI coming soon — releasing June 2026
npx @vidorra/eidetic CLI is not yet published. For now, copy components directly from any docs page — you own the code.Getting Started
Welcome to Eidetic, a modern AI-ready SaaS design system. Get up and running in minutes with our comprehensive component library.
169+ Components
Comprehensive library including AI-ready, form, layout, and data display components.
4 Theme Presets
Choose from curated color themes or customize with CSS variables.
AI-Ready
Purpose-built components for AI interfaces, chat, and streaming content.
Installation
Add Eidetic components to your project. You own the code — copy what you need, customize freely.
1. Initialize your project
Run the init command to set up your project with Eidetic's design tokens, utilities, and configuration:
npx @vidorra/eidetic initThis will create your eidetic.json config, add the cn() utility, and set up your CSS tokens.
2. Add components
Add the components you need. Each component is copied into your project — you own the code:
npx @vidorra/eidetic add button card badge inputDependencies are resolved automatically. If a component needs another Eidetic component, it will be added too.
3. Install dependencies
The CLI will tell you which packages to install. For example:
npm install @radix-ui/react-slot class-variance-authority clsx tailwind-merge lucide-reactOr add components manually
Prefer to copy-paste? Browse any component page, copy the source, and drop it into your project. You'll need:
- The component files from
src/components/ui/ - The
cn()utility fromsrc/lib/utils.ts - CSS tokens from
src/styles/globals.css
Setup with Next.js
Configure Eidetic in your Next.js 14+ application.
1. Import global styles
Add the Eidetic styles to your root layout or global CSS file:
import '@/styles/globals.css'
export default function RootLayout({ children,}: { children: React.ReactNode}) { return ( <html lang="en"> <body>{children}</body> </html> )}2. Configure Tailwind CSS v4
Eidetic uses Tailwind CSS v4 with the new CSS-based configuration. Your postcss.config.mjs should include:
export default { plugins: { '@tailwindcss/postcss': {}, },}All design tokens are defined in globals.css using the @theme block — no tailwind.config.ts needed.
3. Add the Theme Provider (optional)
For theme switching and preset support, wrap your app with the ThemeProvider:
import { ThemeProvider } from '@/contexts/ThemeContext'
export default function RootLayout({ children,}: { children: React.ReactNode}) { return ( <html lang="en"> <body> <ThemeProvider> {children} </ThemeProvider> </body> </html> )}Your First Component
After adding components, use them like any React component.
npx @vidorra/eidetic add button cardimport { Button } from '@/components/ui/button'import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'
export default function HomePage() { return ( <Card className="max-w-md mx-auto mt-8"> <CardHeader> <CardTitle>Welcome to Eidetic</CardTitle> </CardHeader> <CardContent> <p className="text-slate-600 mb-4"> Your design system is ready to use! </p> <Button>Get Started</Button> </CardContent> </Card> )}Preview:
Welcome to Eidetic
Your design system is ready to use!
Theme Customization
Customize colors, spacing, and more using CSS variables or theme presets.
Eidetic supports runtime theming through CSS custom properties. Choose from built-in presets or create your own:
Default
Aurora
Mocha Earth
Midnight
Configure themes in Settings → Variables.
Dark Mode
Eidetic includes full dark mode support out of the box.
- Class-based: Uses Tailwind's class strategy with .dark on <html>
- System preference: Automatically detects prefers-color-scheme
- Persistent: User preference saved to localStorage
- No flash: Script in <head> prevents flash of wrong theme
// Toggle dark mode programmaticallydocument.documentElement.classList.toggle('dark')
// Or use the ThemeContextimport { useTheme } from '@/contexts/ThemeContext'
function ThemeToggle() { const { isDark, toggleDarkMode } = useTheme() return ( <button onClick={toggleDarkMode}> {isDark ? 'Light Mode' : 'Dark Mode'} </button> )}TypeScript Support
Eidetic is built with TypeScript and includes full type definitions.
All components export their prop types for full TypeScript integration:
import { Button, type ButtonProps } from '@/components/ui/button'import { Card, type CardProps } from '@/components/ui/card'
// Full type safety and autocompleteconst MyButton: React.FC<ButtonProps> = (props) => { return <Button variant="primary" size="lg" {...props} />}Key Features
- AI Components: 34+ components designed for AI interfaces, chat, and streaming content
- Accessibility: WCAG 2.1 AA compliant with full ARIA support and keyboard navigation
- Responsive: Mobile-first design that works on all screen sizes
- Customizable: CSS variables for runtime theming without rebuilding
- Modern Stack: Built for Next.js 14+, React 18+, and Tailwind CSS v4
- Dark Mode: Complete dark mode support with system preference detection