nuxt-ui
Build UIs with @nuxt/ui v4 — 125+ accessible Vue components with Tailwind CSS theming. Use when creating interfaces, customizing themes to match a brand, building forms, or composing layouts like dashboards, docs sites, and chat interfaces.
git clone https://github.com/nuxt/ui
T=$(mktemp -d) && git clone --depth=1 https://github.com/nuxt/ui "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/nuxt-ui" ~/.claude/skills/nuxt-ui-nuxt-ui && rm -rf "$T"
skills/nuxt-ui/SKILL.mdNuxt UI
Vue component library built on Reka UI + Tailwind CSS + Tailwind Variants. Works with Nuxt, Vue (Vite), Laravel (Vite + Inertia), and AdonisJS (Vite + Inertia).
MCP Server
For component API details (props, slots, events, full documentation, examples), use the Nuxt UI MCP server. If not already configured, add it:
Cursor —
.cursor/mcp.json:
{ "mcpServers": { "nuxt-ui": { "type": "http", "url": "https://ui.nuxt.com/mcp" } } }
Claude Code:
claude mcp add --transport http nuxt-ui https://ui.nuxt.com/mcp
Key MCP tools:
— find components by name, description, or category (no params = list all)search_components
— find composables by name or description (no params = list all)search_composables
— search Iconify icons (defaults tosearch_icons
), returnslucide
namesi-{prefix}-{name}
— full component documentation with usage examplesget_component
— props, slots, events (lightweight, no docs content)get_component_metadata
— real-world code examplesget_example
When you need to know what a component accepts or how its API works, use the MCP. This skill teaches you when to use which component and how to build well.
Core rules (always apply)
- Always wrap the app in
— required for toasts, tooltips, and programmatic overlays. Accepts aUApp
prop for i18n.locale - Always use semantic colors —
,text-default
,bg-elevated
, etc. Never use raw Tailwind palette colors likeborder-muted
.text-gray-500 - Read generated theme files for slot names — Nuxt:
, Vue:.nuxt/ui/<component>.ts
. These show every slot, variant, and default class for any component.node_modules/.nuxt-ui/ui/<component>.ts - Override priority (highest wins):
prop /ui
prop → global config → theme defaults.class - Icons use
format —i-{collection}-{name}
is the default collection. Use the MCPlucide
tool to find icons, or browse at icones.js.org.search_icons
How to use this skill
Based on the task, load the relevant reference files before writing any code. Don't load everything — only what's needed.
Reference files
Guidelines — design decisions and conventions:
- design-system — semantic colors, theming, brand customization, variants, the
propui - component-selection — decision matrices: when to use Modal vs Slideover, Select vs SelectMenu, Toast vs Alert, etc.
- conventions — coding patterns, slot naming, items arrays, composables, keyboard shortcuts
- forms — form validation, field layout, error handling, Standard Schema
Layouts — full page structure patterns:
- landing — landing pages, blog, changelog, pricing
- dashboard — admin UI with sidebar and panels
- docs — documentation sites with navigation and TOC
- chat — AI chat with Vercel AI SDK
- editor — rich text editor with toolbars
Recipes — complete patterns for common tasks:
- data-tables — tables with filters, pagination, sorting, selection
- auth — login, signup, forgot password forms
- overlays — modals, slideovers, drawers, command palette
- navigation — headers, sidebars, breadcrumbs, tabs
Quick reference:
- components — categorized component index for finding the right component name
Routing table
| Task | Load these references |
|---|---|
| Build a landing page | design-system, conventions, landing |
| Build a dashboard / admin UI | conventions, component-selection, dashboard |
| Add a settings page | conventions, forms |
| Create a login / signup form | conventions, forms, auth |
| Display data in a table | conventions, component-selection, data-tables |
| Customize theme / brand colors | design-system |
| Add a chat interface | conventions, chat |
| Add a modal, slideover, or drawer | conventions, component-selection, overlays |
| Build site navigation | conventions, component-selection, navigation |
| Build a documentation site | conventions, docs |
| Add a rich text editor | conventions, editor |
| General UI work | conventions, component-selection |
Installation
Nuxt
pnpm add @nuxt/ui tailwindcss
// nuxt.config.ts export default defineNuxtConfig({ modules: ['@nuxt/ui'], css: ['~/assets/css/main.css'] })
/* app/assets/css/main.css */ @import "tailwindcss"; @import "@nuxt/ui";
<!-- app.vue --> <template> <UApp> <NuxtPage /> </UApp> </template>
Vue (Vite)
pnpm add @nuxt/ui tailwindcss
// vite.config.ts import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import ui from '@nuxt/ui/vite' export default defineConfig({ plugins: [ vue(), ui() ] })
// src/main.ts import './assets/css/main.css' import { createApp } from 'vue' import { createRouter, createWebHistory } from 'vue-router' import ui from '@nuxt/ui/vue-plugin' import App from './App.vue' const app = createApp(App) const router = createRouter({ routes: [], history: createWebHistory() }) app.use(router) app.use(ui) app.mount('#app')
/* src/assets/css/main.css */ @import "tailwindcss"; @import "@nuxt/ui";
<!-- src/App.vue --> <template> <UApp> <RouterView /> </UApp> </template>
Add
to your rootclass="isolate"in<div id="app">. For Inertia: useindex.htmlinui({ router: 'inertia' }).vite.config.ts