Instalación
Agrega Konfront UI a un proyecto de Next.js con el CLI de shadcn. Instalas solo lo que usas y el código queda en tu repositorio.
@konfront es la base. Cada cliente tiene @konfront-<cliente>: los mismos componentes, pero con su estilo, su librería de iconos y sus tokens ya aplicados. Instala desde un solo namespace por proyecto.Requisitos
- Next.js 15 o posterior con App Router y
React 19, y Tailwind CSS v4. - Un proyecto con shadcn inicializado:
npx shadcn@latest init.
Pasos
- 1
Registra los namespaces
En
components.json, agrega la base y el namespace del cliente para el que trabajas.components.json{ "$schema": "https://ui.shadcn.com/schema.json", "style": "base-nova", "tailwind": { "css": "app/globals.css", "cssVariables": true }, "aliases": { "components": "@/components", "ui": "@/components/ui", "lib": "@/lib", "hooks": "@/hooks", "utils": "@/lib/utils" }, "registries": { "@konfront": "https://ui.konfront.mx/r/{name}.json", "@konfront-andina-salud": "https://ui.konfront.mx/r/andina-salud/{name}.json" } } - 2
Instala el tema primero
setupescribe los tokens del tema en tu CSS global y reemplaza los de shadcn. Instálalo solo, antes de cualquier componente: si llega como dependencia de otro, el CLI no sobrescribe las variables que ya existen.npx shadcn@latest add @konfront/setup # o, para un cliente: npx shadcn@latest add @konfront-andina-salud/setup - 3
Instala componentes
Cada componente se instala por nombre. El CLI resuelve sus dependencias y copia el código a tu proyecto, ya con el estilo y los iconos del namespace.
npx shadcn@latest add @konfront/button @konfront/card @konfront/badge @konfront/input - 4
Carga la fuente del tema
Konfront usa Inter Tight en 400, 500 y 700 (no es lo mismo que Inter). Si el tema del cliente define otra fuente, cárgala igual y apúntala a
--font-body. Los iconos con significado fijo están en Iconografía.app/layout.tsximport { Inter_Tight } from "next/font/google" const interTight = Inter_Tight({ subsets: ["latin"], weight: ["400", "500", "700"], variable: "--font-inter-tight", }) export default function RootLayout({ children }: { children: React.ReactNode }) { return ( <html lang="es-MX"> <body className={interTight.variable} style={{ ["--font-body" as string]: "var(--font-inter-tight)" }} > {children} </body> </html> ) }
Siguientes pasos
- Conoce qué puede cambiar un cliente y qué no en Temas por cliente.
- Prepara a tu agente de IA con Para IA.
- Explora el catálogo en Componentes.