Top Related Projects
An open-source UI component library for building high-quality, accessible design systems and web apps for Vue. Previously Radix Vue
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
The Intuitive Vue UI Library powered by Reka UI & Tailwind CSS.
Next Generation Vue UI Component Library
Quasar Framework - Build high-performance VueJS user interfaces in record time
🐉 Vue Component Framework
Quick Overview
Shadcn-vue is a Vue 3 port of the popular Shadcn UI components. It provides a set of accessible, customizable, and reusable Vue components that are styled using Tailwind CSS. This project aims to bring the flexibility and design of Shadcn UI to the Vue ecosystem.
Pros
- Offers a wide range of pre-built, customizable components for Vue 3 applications
- Utilizes Tailwind CSS for easy styling and customization
- Provides accessible components out of the box
- Seamlessly integrates with Vue 3 and its ecosystem
Cons
- As a port of Shadcn UI, it may lag behind the original React version in terms of updates and new features
- Documentation might not be as comprehensive as the original Shadcn UI
- May require additional setup and configuration compared to native Vue component libraries
- Limited community support compared to more established Vue component libraries
Code Examples
- Using a Button component:
<template>
<Button variant="outline" size="lg">
Click me
</Button>
</template>
<script setup>
import { Button } from '@/components/ui/button'
</script>
- Implementing a Dialog:
<template>
<Dialog>
<DialogTrigger>Open Dialog</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Dialog Title</DialogTitle>
<DialogDescription>This is a dialog description.</DialogDescription>
</DialogHeader>
<p>Dialog content goes here.</p>
</DialogContent>
</Dialog>
</template>
<script setup>
import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog'
</script>
- Using a Select component:
<template>
<Select v-model="selectedValue">
<SelectTrigger class="w-[180px]">
<SelectValue placeholder="Select a fruit" />
</SelectTrigger>
<SelectContent>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="banana">Banana</SelectItem>
<SelectItem value="orange">Orange</SelectItem>
</SelectContent>
</Select>
</template>
<script setup>
import { ref } from 'vue'
import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/select'
const selectedValue = ref('')
</script>
Getting Started
-
Install the package:
npm install shadcn-vue -
Import and use components in your Vue 3 application:
<template> <div> <Button>Click me</Button> </div> </template> <script setup> import { Button } from 'shadcn-vue' </script> -
Make sure to have Tailwind CSS set up in your project for proper styling.
Competitor Comparisons
An open-source UI component library for building high-quality, accessible design systems and web apps for Vue. Previously Radix Vue
Pros of reka-ui
- More customizable and flexible component library
- Designed specifically for Vue 3, leveraging its latest features
- Includes additional components not found in shadcn-vue
Cons of reka-ui
- Less mature and potentially less stable than shadcn-vue
- Smaller community and fewer resources available
- May require more setup and configuration compared to shadcn-vue
Code Comparison
reka-ui:
<template>
<RekaButton variant="primary" size="lg">
Click me
</RekaButton>
</template>
<script setup>
import { RekaButton } from 'reka-ui'
</script>
shadcn-vue:
<template>
<Button variant="default" size="lg">
Click me
</Button>
</template>
<script setup>
import { Button } from '@/components/ui/button'
</script>
The code comparison shows that both libraries offer similar component usage, with slight differences in naming conventions and import paths. reka-ui uses the "Reka" prefix for its components, while shadcn-vue follows a more generic naming approach. Both libraries support customization through props like variant and size.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
Pros of core
- Mature, well-established framework with extensive ecosystem and community support
- Comprehensive documentation and learning resources
- Optimized performance with virtual DOM and reactive system
Cons of core
- Steeper learning curve for beginners compared to shadcn-vue
- More complex setup and configuration for larger projects
- Heavier bundle size due to full framework features
Code Comparison
core:
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')
shadcn-vue:
import { createApp } from 'vue'
import { plugin } from '@unovue/shadcn-vue'
import App from './App.vue'
createApp(App).use(plugin).mount('#app')
The code comparison shows that shadcn-vue requires an additional plugin import and usage, while core provides a more straightforward setup. However, shadcn-vue offers pre-built components and utilities that can accelerate development for certain projects.
Both repositories serve different purposes: core is a full-fledged framework, while shadcn-vue is a component library built on top of Vue. The choice between them depends on project requirements, developer experience, and desired level of customization.
The Intuitive Vue UI Library powered by Reka UI & Tailwind CSS.
Pros of Nuxt UI
- Tightly integrated with Nuxt.js ecosystem, offering seamless compatibility
- Extensive set of pre-built components tailored for Nuxt applications
- Built-in dark mode support and customizable theming options
Cons of Nuxt UI
- Less flexible for non-Nuxt projects compared to Shadcn Vue
- Potentially steeper learning curve for developers not familiar with Nuxt.js
- May have more opinionated design choices, limiting customization options
Code Comparison
Shadcn Vue component usage:
<template>
<Button variant="outline">Click me</Button>
</template>
<script setup>
import { Button } from "@/components/ui/button"
</script>
Nuxt UI component usage:
<template>
<UButton color="primary" variant="outline">Click me</UButton>
</template>
<script setup>
// No import needed, components are auto-imported
</script>
Summary
Shadcn Vue offers more flexibility and can be used in any Vue project, while Nuxt UI provides a more integrated experience specifically for Nuxt.js applications. Shadcn Vue may require more manual setup but allows for greater customization, whereas Nuxt UI offers convenience with auto-imports and built-in features tailored for Nuxt development.
Next Generation Vue UI Component Library
Pros of PrimeVue
- Extensive collection of pre-built components
- Comprehensive documentation and examples
- Active community and regular updates
Cons of PrimeVue
- Larger bundle size due to the extensive component library
- Less customizable styling compared to Shadcn Vue's utility-first approach
Code Comparison
PrimeVue:
<template>
<Button label="Submit" icon="pi pi-check" />
</template>
<script setup>
import Button from 'primevue/button';
</script>
Shadcn Vue:
<template>
<Button>
Submit
<CheckIcon class="ml-2 h-4 w-4" />
</Button>
</template>
<script setup>
import { Button } from '@/components/ui/button'
import { CheckIcon } from '@heroicons/vue/24/solid'
</script>
Summary
PrimeVue offers a rich set of ready-to-use components with extensive documentation, making it ideal for rapid development. However, it may result in larger bundle sizes and less flexibility in styling. Shadcn Vue, on the other hand, provides a more customizable approach with its utility-first styling, but requires more manual setup for complex components. The choice between the two depends on project requirements, development speed priorities, and desired level of customization.
Quasar Framework - Build high-performance VueJS user interfaces in record time
Pros of Quasar
- Comprehensive UI framework with a large set of pre-built components
- Cross-platform development support (web, mobile, desktop)
- Active community and extensive documentation
Cons of Quasar
- Steeper learning curve due to its extensive feature set
- Larger bundle size compared to more lightweight alternatives
- Opinionated structure may limit flexibility in some cases
Code Comparison
Quasar component usage:
<template>
<q-btn color="primary" label="Click me" @click="handleClick" />
</template>
shadcn-vue component usage:
<template>
<Button variant="default" @click="handleClick">Click me</Button>
</template>
Key Differences
- Quasar offers a full-fledged UI framework, while shadcn-vue provides customizable UI components
- Quasar has built-in support for various platforms, whereas shadcn-vue focuses primarily on web development
- Quasar uses its own component system, while shadcn-vue leverages existing Vue ecosystem tools
Use Cases
- Choose Quasar for large-scale, cross-platform projects requiring a comprehensive UI solution
- Opt for shadcn-vue when building web applications that need flexible, customizable UI components with a smaller footprint
Community and Ecosystem
- Quasar has a larger community and more third-party resources
- shadcn-vue is newer but growing, with a focus on modern web development practices
🐉 Vue Component Framework
Pros of Vuetify
- Comprehensive UI component library with a wide range of pre-built components
- Material Design-based, offering a consistent and modern look out of the box
- Extensive documentation and active community support
Cons of Vuetify
- Larger bundle size due to the extensive component library
- Less flexibility in customization compared to shadcn-vue's utility-first approach
- Steeper learning curve for developers new to Material Design principles
Code Comparison
Vuetify component usage:
<template>
<v-btn color="primary" @click="handleClick">
Click me
</v-btn>
</template>
shadcn-vue component usage:
<template>
<Button variant="default" @click="handleClick">
Click me
</Button>
</template>
Both libraries offer easy-to-use components, but Vuetify's approach is more opinionated with built-in styles, while shadcn-vue provides more flexibility for custom styling. Vuetify's extensive component library makes it suitable for rapid development of complex UIs, whereas shadcn-vue's utility-first approach allows for more granular control over design and smaller bundle sizes. The choice between the two depends on project requirements, team preferences, and the desired level of customization.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
shadcn-vue
shadcn-vue is an unofficial community-led Vue port of shadcn/ui.
Note
We are not affiliated with shadcn, but we did get his blessing prior to creating this project
This is a project born out of the need for a similar project for the vue ecosystem.
Accessible and customizable components that you can copy and paste into your apps. Free. Open Source. Use this to build your own component library.

Documentation
Credits
All credits go to these open-source works and resources
-
Shadcn UI for creating this beautiful project.
-
Shadcn Svelte for some inspiration for registry.
-
Reka UI for doing all the hard work to make sure components are accessible.
-
VueUse for providing many useful utilities.
-
ahmedmayara for populating many components
License
Licensed under the MIT license.
Top Related Projects
An open-source UI component library for building high-quality, accessible design systems and web apps for Vue. Previously Radix Vue
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
The Intuitive Vue UI Library powered by Reka UI & Tailwind CSS.
Next Generation Vue UI Component Library
Quasar Framework - Build high-performance VueJS user interfaces in record time
🐉 Vue Component Framework
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot