Nuxt UI, the Intuitive Component Library for Vue Apps
Building a Vue application from scratch means making dozens of decisions before writing a single line of business logic: which component library to use, how to handle accessibility, whether your design system will scale, and how tightly it should couple to your framework. Nuxt UI answers most of those questions before you even open your editor.
Key Takeaways
- Nuxt UI is a free, open-source Vue component library built on Reka UI, Tailwind CSS, and Tailwind Variants, offering 125+ accessible components out of the box.
- Despite its name, Nuxt UI works in any Vue project through a Vite plugin, not just Nuxt applications.
- Accessibility, TypeScript support, and CSS-first theming are built in, removing common pain points from early-stage development.
- It fits best in Tailwind-based stacks; consider alternatives like Vuetify, shadcn-vue, or Quasar for Material Design, copy-paste workflows, or cross-platform needs.
What Is Nuxt UI?
Nuxt UI is a free, open-source Vue component library built on three core technologies:
- Reka UI — headless accessible primitives that handle keyboard navigation, focus management, and screen reader support out of the box
- Tailwind CSS — utility-first styling with a CSS-first configuration model
- Tailwind Variants — a type-safe API for managing component variants and resolving style conflicts cleanly
The result is 125+ production-ready components that are accessible by default, visually polished, and straightforward to customize.
One important clarification: despite the name, Nuxt UI is not Nuxt-exclusive. It works equally well in any Vue project via a Vite plugin. If you’re building with plain Vue, Vue Router, and Vite, the setup takes only a few lines of configuration.
How Nuxt UI Fits Into the Vue Ecosystem
When evaluating a Vue component library, the real question isn’t “does it have enough components?” — it’s “does it fit how I actually build?”
Here’s where Nuxt UI sits relative to common alternatives:
| Library | Design System | Tailwind-native | Accessibility | Nuxt Integration |
|---|---|---|---|---|
| Nuxt UI | Custom, flexible | ✅ Yes | ✅ Reka UI | ✅ First-class |
| Vuetify | Material Design | ❌ No | ✅ Good | ⚠️ Manual |
| PrimeVue | Customizable | ⚠️ Optional | ✅ Good | ⚠️ Manual |
| shadcn-vue | Custom | ✅ Yes | ✅ Reka UI | ⚠️ Manual |
If your stack already includes Tailwind CSS and you want high-level components — data tables, forms, overlays, navigation — without building them yourself, Nuxt UI is the natural fit.
Getting Started: Installation
For Nuxt projects, add the module to nuxt.config.ts:
export default defineNuxtConfig({
modules: ['@nuxt/ui'],
css: ['~/assets/css/main.css']
})
Then wrap your app with UApp and import the styles in your CSS entry file:
@import "tailwindcss";
@import "@nuxt/ui";
<!-- app.vue -->
<template>
<UApp>
<NuxtPage />
</UApp>
</template>
For standard Vue + Vite projects, configure the Vite plugin:
// 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()]
})
Then register the plugin in main.ts and import the same CSS. Components and composables are auto-imported globally in both setups.
Discover how at OpenReplay.com.
Key Features Worth Knowing
Accessibility without extra work. Because Nuxt UI builds on Reka UI, complex components like modals, tabs, and dropdowns handle ARIA attributes, focus trapping, and keyboard interactions automatically. You still need to test in context, but the foundation is solid.
TypeScript throughout. Every component prop, slot, and event is typed. Theming via app.config.ts is type-safe, and component props, slots, and composables are fully typed throughout the library.
Theming that doesn’t fight you. Nuxt UI v4 uses a CSS-first configuration model. Customizing colors, sizes, and variants happens in CSS or app.config.ts — no JavaScript config files to wrestle with.
125+ components across 13 categories, including specialized groups for dashboards, AI chat interfaces, rich text editing, and Nuxt Content integration — areas where most Tailwind CSS Vue component libraries offer nothing.
When Nuxt UI Is the Right Choice
Nuxt UI makes sense when you want:
- Tailwind-native components that don’t require a separate design token system
- Accessibility handled at the primitive level, not bolted on afterward
- Nuxt 4 UI components with first-class SSR, i18n, and color mode support
- A free, MIT-licensed library with no paywalled components (Nuxt UI Pro was merged into the main library in v4)
It’s less ideal if you need Material Design, prefer copying component source into your repo (consider shadcn-vue instead), or are building cross-platform apps targeting mobile and desktop (consider Quasar).
Conclusion
Nuxt UI removes the scaffolding tax that slows down early-stage Vue development. With accessible components, a coherent design system, and TypeScript built in, you can focus on what your application actually does rather than rebuilding primitives.
Start with the official documentation or clone one of the ready-made templates — Dashboard, SaaS, Landing, or Starter — and have something running in minutes.
FAQs
Yes. Although the name suggests otherwise, Nuxt UI ships with a Vite plugin that works in any standard Vue 3 project. You install the package, register the plugin in vite.config.ts, and import the CSS. Components and composables are auto-imported the same way they are in a Nuxt application.
No. As of version 4, Nuxt UI Pro was merged into the main open-source library under the MIT license. Components previously locked behind a paid tier, including dashboard layouts, advanced data tables, and landing page blocks, are now freely available to all users without any subscription or licensing fee.
Both use Reka UI primitives and Tailwind CSS, so accessibility and styling are similar. The key difference is delivery: shadcn-vue copies component source into your repository for full ownership, while Nuxt UI installs as a dependency with theming through configuration. Choose shadcn-vue for source control, Nuxt UI for faster updates and less maintenance overhead.
Yes to both. Color mode support is first-class, with components automatically adapting to light and dark themes through CSS variables. Internationalization is supported through built-in locale configuration and integration with tools like @nuxtjs/i18n, allowing you to translate component strings such as pagination labels and form messages.
Gain Debugging Superpowers
Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.