
nuxt-ui
β 6,700by nuxt Β· part of nuxt/ui
125+ accessible Vue components with Tailwind CSS theming, built on Reka UI for rapid interface development. Supports Nuxt, Vue (Vite), Laravel (Inertia), and AdonisJS with unified component API across frameworks Includes 200,000+ Iconify icons via i-{collection}-{name} naming, with local collection support and custom icon directories Seven semantic colors (primary, secondary, success, info, warning, error, neutral) configurable at runtime; override components via ui prop, class prop, or...
This is the playbook your agent receives when the skill activates β you don't need to read it to use the skill, but it's here to audit before installing.
name: nuxt-ui description: 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.
Nuxt 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/mcpKey MCP tools:
search_componentsβ find components by name, description, or category (no params = list all)search_composablesβ find composables by name or description (no params = list all)search_iconsβ search Iconify icons (defaults tolucide), returnsi-{prefix}-{name}namesget_componentβ full component documentation with usage examplesget_component_metadataβ props, slots, events (lightweight, no docs content)get_exampleβ real-world code examples
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
UAppβ required for toasts, tooltips, and programmatic overlays. Accepts alocaleprop for i18n. - Always use semantic colors β
text-default,bg-elevated,border-muted, etc. Never use raw Tailwind palette colors liketext-gray-500. - Read generated theme files for slot names β Nuxt:
.nuxt/ui/<component>.ts, Vue:node_modules/.nuxt-ui/ui/<component>.ts. These show every slot, variant, and default class for any component. - Override priority (highest wins):
uiprop /classprop β global config β theme defaults. - Icons use
i-{collection}-{name}format βlucideis the default collection. Use the MCPsearch_iconstool to find icons, or browse at icones.js.org.
npx skills add https://github.com/nuxt/ui --skill nuxt-uiRun this in your project β your agent picks the skill up automatically.
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
uiprop - 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 |
| Render markdown | component-selection, components, 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
class="isolate"to your root<div id="app">inindex.html. For Inertia: useui({ router: 'inertia' })invite.config.ts.
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.