element-ui is the original component library built for Vue 2, offering a comprehensive set of UI elements for desktop applications. element-plus is the official successor rewritten from the ground up for Vue 3, featuring improved performance, TypeScript support, and modern CSS variable-based theming. While they share a similar design language, they target different Vue versions and offer distinct developer experiences.
Both element-plus and element-ui provide a rich set of UI components for building admin dashboards and enterprise applications, but they target different versions of the Vue framework. element-ui was the standard for Vue 2, while element-plus is the modern rewrite for Vue 3. This distinction affects everything from installation to theming and TypeScript support.
element-ui is tied to Vue 2, which reached End of Life (EOL) on December 31, 2023.
// element-ui: Requires Vue 2 instance
import Vue from 'vue';
import ElementUI from 'element-ui';
Vue.use(ElementUI);
element-plus is built for Vue 3 and actively maintained.
// element-plus: Requires Vue 3 app instance
import { createApp } from 'vue';
import ElementPlus from 'element-plus';
const app = createApp(App);
app.use(ElementPlus);
element-ui uses a simpler global registration pattern typical of Vue 2.
// element-ui: Vue 2 global use
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
element-plus follows the Vue 3 plugin pattern.
// element-plus: Vue 3 plugin use
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
app.use(ElementPlus);
element-ui relies on community-maintained type definitions.
@types/element-ui separately.// element-ui: Community types
// npm install --save-dev @types/element-ui
import { Button } from 'element-ui';
// Types provided by DefinitelyTyped, not the library itself
element-plus ships with built-in TypeScript definitions.
// element-plus: Built-in types
import { ElButton } from 'element-plus';
// Types are included in the package automatically
element-ui uses SCSS variables for customization.
// element-ui: SCSS override
$--color-primary: #409EFF;
@import "~element-ui/packages/theme-chalk/src/index";
element-plus uses CSS Custom Properties (Variables).
/* element-plus: CSS Variable override */
html {
--el-color-primary: #409EFF;
}
/* Toggle dark mode by adding class="dark" to html */
element-ui follows Vue 2 v-model conventions.
value prop and input event.visible for dialogs.<!-- element-ui: Vue 2 v-model -->
<el-input v-model="searchText" />
<el-dialog :visible.sync="dialogVisible" />
element-plus aligns with Vue 3 v-model standards.
modelValue prop and update:modelValue event.v-model directly instead of visible.sync.<!-- element-plus: Vue 3 v-model -->
<el-input v-model="searchText" />
<el-dialog v-model="dialogVisible" />
Despite the technical differences, both libraries share the same visual identity.
<!-- Both use similar component tags -->
<el-button type="primary">Primary</el-button>
<!-- Both support complex data tables -->
<el-table :data="tableData">
<el-table-column prop="name" label="Name" />
</el-table>
// element-ui: Vue 2 locale
import lang from 'element-ui/lib/locale/lang/en';
Vue.use(ElementUI, { locale: lang });
// element-plus: Vue 3 locale
import En from 'element-plus/dist/locale/en.mjs';
app.use(ElementPlus, { locale: En });
| Feature | element-ui | element-plus |
|---|---|---|
| Vue Version | β Vue 2 (EOL) | β Vue 3 (Active) |
| TypeScript | π¦ Community types (@types) | π‘οΈ Built-in types |
| Theming | π¨ SCSS Variables (Compile time) | π¨ CSS Variables (Runtime) |
| Dark Mode | π§ Manual implementation | π Built-in support |
| v-model | π value + input | π modelValue + update |
| Maintenance | π Legacy / Security Risk | π’ Active Development |
element-ui is a legacy tool ποΈ β only suitable for keeping old Vue 2 apps running. It should not be used for anything new due to Vue 2 reaching End of Life. If you are stuck on this, plan a migration immediately.
element-plus is the modern standard π β built for Vue 3 with better TypeScript, runtime theming, and consistent APIs. It is the required choice for any new development in the Element ecosystem.
Final Thought: The choice is not really about features β it is about framework compatibility. If you are on Vue 3, element-plus is the only option. If you are on Vue 2, you are already on a deprecated stack and should prioritize upgrading to Vue 3 and element-plus.
Choose element-plus for any new project running on Vue 3. It offers active maintenance, built-in TypeScript types, and modern CSS variable theming that supports dark mode out of the box. It is the only viable option for long-term projects since Vue 2 has reached End of Life.
Choose element-ui only if you are maintaining an existing Vue 2 application that cannot be migrated yet. Do not start new projects with this package because Vue 2 is no longer supported. Using it for new development introduces significant technical debt and security risks.
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.