mcpField
N
nuxt-ui

nuxt-ui

github.com/onmaxDesign & UI7237.1k installsUpdated today
Repository

About nuxt-ui

A Vue component library for Nuxt, Vue, Laravel, and AdonisJS, built on Reka UI, Tailwind CSS, and Tailwind Variants. Its companion skill guides component selection and page construction, while an MCP server provides API details, icons, and examples.

Key features

  1. 01Built on Reka UI and Tailwind CSS
  2. 02Supports Nuxt, Vue, Laravel, AdonisJS
  3. 03Component selection and design guidance
  4. 04Page layouts and task recipes
  5. 05MCP search for components and icons

Use cases

  1. 01Build dashboards or documentation sites
  2. 02Create login forms and data tables
  3. 03Implement navigation, modals, or drawers
  4. 04Look up component props, slots, and examples

MCP support

The Nuxt UI MCP server searches components, composables, and icons, and returns component documentation, metadata, and code examples. The README explains HTTP setup for Cursor or Claude Code.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/onmax/nuxt-skills --skill nuxt-ui

After installing, type/nuxt-uiin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
components.md
references/guidelines/
component-selection.md
conventions.md
design-system.md
forms.md
references/layouts/
chat.md
dashboard.md
docs.md
editor.md
landing.md
references/recipes/
auth.md
data-tables.md
navigation.md
overlays.md

Details

From the project README

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/mcp

Key MCP tools:

  • search-components — find components by name, category, or intent (no params = list all)
  • search-composables — find composables by name or description (no params = list all)
  • search-icons — search Iconify icons (defaults to lucide), returns i-{prefix}-{name} names
  • get-component — full component documentation with usage examples
  • get-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)

  1. Always wrap the app in UApp — required for toasts, tooltips, and programmatic overlays. Accepts a locale prop for i18n.
  2. Always use semantic colors — text-default, bg-elevated, border-muted, etc. Never use raw Tailwind palette colors like text-gray-500.
  3. 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.
  4. Override priority (highest wins): ui prop / class prop → global config → theme defaults.
  5. Icons use i-{collection}-{name} format — lucide is the default collection. Use the MCP search-icons tool to find icons, or browse at icones.js.org.

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 ui prop
  • 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
TaskLoad these references
Build a landing pagedesign-system, conventions, landing
Build a dashboard / admin UIconventions, component-selection, dashboard
Add a settings pageconventions, forms
Create a login / signup formconventions, forms, auth
Display data in a tableconventions, component-selection, data-tables
Customize theme / brand colorsdesign-system
Add a chat interfaceconventions, chat
Add a modal, slideover, or drawerconventions, component-selection, overlays
Build site navigationconventions, component-selection, navigation
Build a documentation siteconventions, docs
Render markdowncomponent-selection, components, docs
Add a rich text editorconventions, editor
General UI workconventions, 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>

Icons (v4.10+) are bundled into the build for SSR/offline use when the collection is installed locally (@iconify-json/lucide). On Vue, use ui({ icon: { clientBundle: { scan: true } } }). Set ui: { theme: { unstyled: true } } (v4.9+) in nuxt.config.ts to strip default theme classes and bring your own design system.

Add class="isolate" to your root <div id="app"> in index.html. For Inertia: use ui({ router: 'inertia' }) in vite.config.ts.

Comments

Markdown supported