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 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.
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.
A Vue.js 2.0 UI Toolkit for Web.
Element will stay with Vue 2.x
For Vue 3.0, we recommend using Element Plus(Element Plus is a community develop project)
For MiniProgram development, we recommend using MorJS
npm install element-ui -S
import Vue from 'vue'
import Element from 'element-ui'
Vue.use(Element)
// or
import {
Select,
Button
// ...
} from 'element-ui'
Vue.component(Select.name, Select)
Vue.component(Button.name, Button)
For more information, please refer to Quick Start in our documentation.
Modern browsers and Internet Explorer 10+.
Skip this part if you just want to use Element.
For those who are interested in contributing to Element, please refer to our contributing guide (ไธญๆ | English | Espaรฑol | Franรงais) to see how to run this project.
Detailed changes for each release are documented in the release notes.
We have collected some frequently asked questions. Before reporting an issue, please search if the FAQ has the answer to your problem.
Please make sure to read the contributing guide (ไธญๆ | English | Espaรฑol | Franรงais) before making a pull request.
English documentation is brought to you by SwiftGG Translation Team:
Spanish documentation is made possible by these community developers:
French documentation is made possible by these community developers:
Scan the QR code using Dingtalk App to join in discussion group :