element-plus, quasar, vue-material, and vuetify are component libraries designed to accelerate Vue.js development, but they serve different architectural needs. element-plus is the official Vue 3 upgrade of Element UI, focusing on clean, data-heavy enterprise dashboards. quasar is a comprehensive framework that goes beyond components to include build tools, allowing deployment to Web, Mobile (Capacitor/Cordova), and Desktop (Electron) from a single codebase. vuetify is a mature implementation of Google's Material Design, recently updated for Vue 3, ideal for apps requiring strict adherence to Material guidelines. vue-material is a legacy library that has not been officially updated for Vue 3, making it unsuitable for new production projects despite its historical popularity.
When selecting a UI library for a professional Vue 3 application, the decision often comes down to three factors: maintenance status, design philosophy, and architectural scope. While element-plus, quasar, vue-material, and vuetify all provide pre-built components, they solve different problems. Let's break down how they compare in real engineering scenarios.
Before discussing features, we must address compatibility. Vue 3 introduced breaking changes that require libraries to be rewritten, not just updated.
vue-material is effectively deprecated for modern development.
// vue-material: No official Vue 3 support
// Attempting to install in a Vue 3 project will cause peer dependency errors
// npm install vue-material // ❌ Fails or installs incompatible Vue 2 version
element-plus, quasar, and vuetify are all actively maintained for Vue 3.
// element-plus, quasar, vuetify: All support Vue 3
import { createApp } from 'vue';
import ElementPlus from 'element-plus'; // ✅ Official Vue 3 build
import Quasar from 'quasar'; // ✅ Built for Vue 3
import { createVuetify } from 'vuetify';// ✅ Vue 3 compatible
The biggest structural difference lies in what you are actually installing.
element-plus and vuetify are component libraries.
// element-plus / vuetify: Manual setup in main.js
import { createApp } from 'vue';
import App from './App.vue';
import ElementPlus from 'element-plus';
const app = createApp(App);
app.use(ElementPlus); // Just adds components
app.mount('#app');
quasar is a full framework.
// quasar: Managed via Quasar CLI
// You don't manually configure webpack/vite for SSR or Mobile
// The framework handles the heavy lifting
// quasar.conf.js (Conceptual configuration)
export default function (ctx) {
return {
framework: {
components: ['QBtn', 'QLayout'], // Auto-imported
cssAddon: true
},
capaccitor: { /* Mobile config */ },
electron: { /* Desktop config */ }
}
}
Your choice dictates the visual language of your application.
element-plus uses a neutral, clean design.
<!-- element-plus: Clean, data-focused -->
<template>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="Date" />
<el-table-column prop="name" label="Name" />
</el-table>
</template>
vuetify enforces Google Material Design.
<!-- vuetify: Strict Material Design -->
<template>
<v-data-table :items="tableData">
<template v-slot:item.date="{ item }">
<v-chip color="primary">{{ item.date }}</v-chip>
</template>
</v-data-table>
</template>
quasar offers flexible theming (Material, iOS, custom).
<!-- quasar: Platform adaptive -->
<template>
<q-table :rows="tableData" flat bordered>
<template v-slot:body-cell-date="props">
<q-badge color="secondary">{{ props.value }}</q-badge>
</template>
</q-table>
</template>
This is where quasar stands alone.
quasar supports Web, Mobile, and Desktop natively.
// quasar: Single command for multiple targets
quasar build -m capacitor // Builds iOS/Android app
quasar build -m electron // Builds Desktop app
quasar build -m pwa // Builds Progressive Web App
element-plus and vuetify are Web-first.
// element-plus / vuetify: Web only by default
// Requires manual setup for mobile
import { Capacitor } from '@capacitor/core';
// You must configure bridges and plugins yourself
How easy is it to change the look and feel?
vuetify uses a SASS variable system.
// vuetify: SASS variable override
@use 'vuetify/settings' with (
$color-pack: false,
$global-font-size: 14px,
$btn-font-weight: 700
);
element-plus uses CSS Variables (Custom Properties).
/* element-plus: CSS Variable override */
:root {
--el-color-primary: #409eff;
--el-font-size-base: 14px;
}
quasar uses a hybrid approach.
// quasar: Theme configuration in quasar.config.js
theme: {
primary: '#1976D2',
secondary: '#26A69A',
accent: '#9C27B0'
}
Despite their differences, the viable options share core capabilities.
element-plus, quasar, vuetify) prioritize ARIA attributes.<!-- All libraries support standard A11y patterns -->
<template>
<!-- Dialogs automatically trap focus and handle ESC key -->
<el-dialog v-model="visible" title="Info" />
<q-dialog v-model="visible" />
<v-dialog v-model="visible" />
</template>
@types/ packages.// All libraries provide robust TS types
import { ElButton } from 'element-plus';
import { QBtn } from 'quasar';
import { VBtn } from 'vuetify/components';
// Props are fully typed in IDEs
// element-plus
import zhCn from 'element-plus/dist/locale/zh-cn.mjs';
app.use(ElementPlus, { locale: zhCn });
// vuetify
import { createVuetify } from 'vuetify';
import { zh } from 'vuetify/locale';
const vuetify = createVuetify({ locale: { locale: 'zh' } });
| Feature | element-plus | quasar | vuetify | vue-material |
|---|---|---|---|---|
| Vue 3 Support | ✅ Native | ✅ Native | ✅ Native | ❌ No (Legacy) |
| Scope | Component Library | Full Framework | Component Library | Component Library |
| Design Style | Neutral / Clean | Flexible (Material/iOS) | Strict Material | Material |
| Mobile/Desktop | Manual Integration | Built-in (CLI) | Manual Integration | Manual Integration |
| Theming | CSS Variables | SASS + CSS Vars | SASS Maps | SASS |
| Best For | Admin Dashboards | Cross-Platform Apps | Consumer Products | None (Deprecated) |
vue-material is a dead end. Do not use it. The lack of Vue 3 support makes it a liability for any modern project.
element-plus is the pragmatic choice for enterprise internal tools. If you need a data grid, a form, and a layout that looks professional without demanding a specific design language, this is your winner. It gets out of your way.
vuetify is the premium choice for public-facing products where design consistency is key. If you love Material Design and want a library that enforces it strictly with incredible depth, vuetify is unmatched. Be prepared for a larger bundle size and a steeper learning curve for theming.
quasar is the strategic choice for startups and agencies targeting multiple platforms. If you need to ship a website today and an iOS app tomorrow without rewriting code, quasar pays for its learning curve ten times over. It is not just a UI kit; it is an entire development ecosystem.
Final Thought: Your choice depends on your delivery targets. Building only a web dashboard? Pick element-plus or vuetify. Building a product ecosystem across web, mobile, and desktop? quasar is the only logical architectural decision.
Choose element-plus if you are building internal admin panels, data-heavy dashboards, or B2B applications where a clean, neutral aesthetic is preferred over strict design systems. It is the safest bet for teams migrating from Element UI on Vue 2 who need a stable, community-backed Vue 3 solution without the overhead of a full framework.
Choose quasar if your roadmap includes deploying to multiple platforms (Web, iOS, Android, Desktop) from a single codebase. It is the best fit when you need a 'batteries-included' solution that handles theming, icons, and build configurations out of the box, reducing the need to stitch together separate tools for mobile or desktop builds.
Do NOT choose vue-material for new projects. The package has not seen significant maintenance to support Vue 3 officially. Selecting this library introduces high technical debt and security risks. Instead, evaluate vuetify for Material Design needs or element-plus for general purpose components.
Choose vuetify if your product requires strict adherence to Google's Material Design 3 guidelines or if your team values a highly opinionated, feature-rich component set with extensive documentation. It is ideal for customer-facing applications where a polished, consistent look-and-feel is critical and you are committed to the Material Design philosophy.
Element Plus - A Vue.js 3 UI library
Alright, if you're looking to make Element Plus better, keep reading. For developers using Element Plus to build websites, please visit Getting Started.
The first stable release of Element Plus, suitable for production use, was released on February 7, 2022. The API is stable now, and here's a full list on how to upgrade from Element UI to Element Plus.
You can find the breaking change list here: Breaking Change List.
We have made a migration tool for you to migrate your project from Element UI to Element Plus.
You can find the gogocode migration tool here.
We have tested this on Vue Element Admin. You can find the transpiled code here.
You can also try out Element Plus with its built-in component playground.
Special thanks to our generous sponsors:
Platinum Sponsors
|
|
|
Gold Sponsors
|
|
|
|
Element Plus has been translated into multiple languages. You can click here to help us update the translations or apply to become a proofreader.
For now, we are only providing English and Chinese versions due to limited resources, but we are looking forward to translating it into more languages. Please visit the link above and leave a message if you would like to help translate Element Plus into your preferred language.
See how to help translate in Translating Element Plus.
Join our Discord to start communicating with everybody.
Awesommmmmmee. Everything you need is down below. You can also refer to CONTRIBUTING and Code of Conduct where you'll find the same information listed below.
Welcome :star_struck:! We are looking for talented developers to join us and make Element Plus better! If you're interested in joining the development team, please reach out to us -- you're more than welcome to join us! :heart:
We are now looking for experts in Testing, GitHub Actions and PM. If you feel like you can and are willing to help, please don't hesitate to reach out to us. :pray:
This project exists thanks to all the people who contribute.
And thank you to all our backers! 🙏
Element Plus is open source software licensed as MIT.