element-ui, quasar, vue-material, and vuetify are component libraries for Vue.js, but they differ significantly in Vue version support and scope. element-ui and vue-material are primarily designed for Vue 2 and are considered legacy for new projects. vuetify and quasar offer robust support for Vue 3, with quasar providing a full application framework beyond just UI components. Choosing between them depends heavily on whether you are maintaining a Vue 2 codebase or starting fresh with Vue 3.
element-ui, quasar, vue-material, and vuetify all aim to speed up Vue development by providing pre-built components. However, they are not interchangeable. The most critical difference is Vue version support. Two of these libraries are effectively legacy tools for Vue 2, while the others are active players in the Vue 3 ecosystem. Let's break down the technical realities.
This is the first checkpoint for any architectural decision. Using a Vue 2 library in a Vue 3 project will not work without complex migration layers.
element-ui is built for Vue 2 only.
element-plus, not element-ui.<!-- element-ui (Vue 2) -->
<template>
<el-button type="primary">Click</el-button>
</template>
<script>
export default { name: 'App' }
</script>
vue-material is built for Vue 2 only.
<!-- vue-material (Vue 2) -->
<template>
<md-button>Click</md-button>
</template>
<script>
export default { name: 'App' }
</script>
vuetify supports Vue 3 (via version 3).
<!-- vuetify (Vue 3) -->
<template>
<v-btn color="primary">Click</v-btn>
</template>
<script setup>
// Vue 3 setup script
</script>
quasar supports Vue 3 (via version 2).
<!-- quasar (Vue 3) -->
<template>
<q-btn color="primary" label="Click" />
</template>
<script setup>
// Vue 3 setup script
</script>
The way you write components differs slightly across these libraries, affecting developer experience and migration efforts.
element-ui uses standard Vue 2 props and events.
<!-- element-ui -->
<el-button @click="handleClick">Submit</el-button>
vue-material uses a declarative syntax similar to Angular Material.
<!-- vue-material -->
<md-button @click="handleClick">Submit</md-button>
vuetify uses a dense prop system for styling.
color, outlined).<!-- vuetify -->
<v-btn @click="handleClick" outlined color="primary">Submit</v-btn>
quasar uses a unified prop system across components.
color, flat, round work similarly on buttons, inputs, etc.<!-- quasar -->
<q-btn @click="handleClick" flat color="primary" label="Submit" />
Changing the look and feel of your app is a common requirement. Each library handles this differently.
element-ui uses SCSS variables for theming.
/* element-ui theme */
$--color-primary: #0052D9;
@import "~element-ui/lib/theme-chalk/index.scss";
vue-material uses Sass variables similarly.
/* vue-material theme */
@import "~vue-material/dist/theme/engine";
@include md-register-theme("default", (primary: #0052D9));
vuetify offers a powerful theme system.
// vuetify config
export default createVuetify({
theme: {
themes: {
light: { colors: { primary: '#0052D9' } }
}
}
})
quasar provides extensive theme variables.
// quasar config
export default {
framework: {
config: {
brand: { primary: '#0052D9' }
}
}
}
Some libraries are just components. Others are full frameworks.
element-ui is a component library only.
vue-material is a component library only.
vuetify is a component library with plugins.
quasar is a full application framework.
# quasar CLI
quasar create my-app
quasar dev
quasar build -m pwa
Using a library that is no longer maintained poses security and compatibility risks.
element-ui: Legacy. Security patches are rare. Use element-plus for Vue 3.vue-material: Legacy. Community forks exist but lack official backing.vuetify: Active. Regular updates for Vue 3.quasar: Active. Regular updates and strong community support.| Feature | element-ui | vue-material | vuetify | quasar |
|---|---|---|---|---|
| Vue Version | Vue 2 Only | Vue 2 Only | Vue 2 & 3 | Vue 2 & 3 |
| Scope | UI Kit | UI Kit | UI Kit | Full Framework |
| Theming | SCSS Variables | SCSS Variables | JS + SCSS | CSS Variables |
| Mobile Support | Responsive | Responsive | Responsive | Native Wrappers |
| Status | Legacy | Legacy | Active | Active |
element-ui and vue-material are tools for the past.
vuetify is a polished UI kit for Vue 3.
quasar is a complete solution for Vue 3.
Final Thought: For any new development in 2024 and beyond, prioritize Vue 3 compatibility. This eliminates element-ui and vue-material from consideration unless you are maintaining legacy code. Between vuetify and quasar, choose quasar if you need a full framework, and vuetify if you just need components.
Choose vuetify if you want a comprehensive Material Design component library with strong Vue 3 support. It is suitable for dashboards and admin panels where a polished, opinionated design system is needed without the overhead of a full application framework.
Choose element-ui only if you are maintaining an existing Vue 2 application that already depends on it. Do not use it for new projects because it does not support Vue 3. For Vue 3 projects, evaluate element-plus instead, which is the official successor.
Choose quasar if you need a full-stack framework that handles building, deployment, and UI components together. It is ideal for teams wanting a single tool to manage PWA, SSR, and mobile apps with a consistent Vue 3-compatible component set.
Choose vue-material only for legacy Vue 2 maintenance where Material Design is strictly required and migration is not possible. Avoid it for new development as it lacks official Vue 3 support and active maintenance compared to other options.
To check out the documentation, visit vuetifyjs.com.
Getting started with Vuetify is easy. To create a new project, choose your package manager and run one of the following commands:
Using pnpm
pnpm create vuetify
Using yarn
yarn create vuetify
Using npm
npm create vuetify@latest
Using bun
bun create vuetify
For more information on how to get started, such as using Nuxt or Laravel, check out the official Installation guide.
Vuetify is a MIT licensed project that is developed and maintained by the Core Team. Sponsor Vuetify and receive some awesome perks and support Open Source Software at the same time! 🎉
Funds donated through GitHub Sponsors directly support John Leider and the ongoing development and maintenance of Vuetify. Funds donated via Open Collective are managed with transparent expenses and will be used for compensating work and expenses for Core team members. Your name/logo will receive proper recognition and exposure by donating on either platform.
|
|
|
|
|
|
|
Vuetify is a no design skills required UI Library with beautifully handcrafted Vue Components. No design skills required — everything you need to create amazing applications is at your fingertips. Vuetify has a massive API that supports any use-case. Some highlights include:
Vuetify supports all modern browsers, including Safari 13+ (using polyfills). Components are designed for a minimum width of 320px.
| Name | Description |
|---|---|
| 🕶️ Vuetify Awesome | Awesome stuff built with Vuetify. |
| 🗑️ Vuetify Bin | A pastebin for saving code snippets. |
| 🫧 Vuetify Create | Scaffolding tools for creating new Vuetify projects. |
| 💭 Vuetify Discord | Our massive and inclusive Discord server where you can ask questions, share feedback, and connect with other Vuetify developers. |
| 🧹 Vuetify ESLint | An opinionated [ESLint config](https://github.com/vuetifyjs/eslint-config-vuetify) for styling and an [ESLint plugin](https://github.com/vuetifyjs/eslint-plugin-vuetify) for upgrading Vuetify version. |
| 🐛 Vuetify Issues | A web application for reporting bugs and issues with Vuetify, Documentation, or one of our other packages. |
| 📦 Vuetify Loader | A monorepo of compiler plugins for autoloading Vuetify components and configuring styles. |
| 🧠 Vuetify MCP | A Model Context Protocol server for developing with Vuetify and Agents. |
| 🎮 Vuetify Playground | A Vuetify 3 playground built using vuejs/repl where you can play with our components. |
| ✂️ Vuetify Snips | Pre-built code snippets for Vuetify components that you can use in your projects |
| 🛒 Vuetify Store | The official Vuetify Store where you can download free digital products, purchase pre-made themes, and more. |
For help and support questions, please use our Discord community. This issue list of this repo is exclusively for bug reports and feature requests.
Use our Issue generator to report bugs and request new features.
Please make sure to read the Important Information before opening an issue. Issues not confirming to the guidelines may be closed immediately.
2️⃣ Vuetify 2 Support Vuetify 2 is now End Of Life (EOL) and is no longer supported, even for security issues. Commercial support for this version is available from our partner, HeroDevs.
Detailed changes for each release are documented in the release notes.
Developers interested in contributing should read the Code of Conduct and the Contribution Guide.
Please do not ask general questions in an issue. Issues are only to report bugs, suggest enhancements, or request new features. For general questions and discussions, ask in the community chat.
To help you get you familiar with our contribution process, we have a list of good first issues that contain bugs which have a relatively limited scope. This is a great place to get started. If you have any questions, please join us on the community chat.
We also have a list of help wanted issues that you might want to check.
Vuetify is available under the MIT software license.
Copyright (c) 2016-present Vuetify, LLC
This project exists thanks to all the people who contribute 😍!