element-plus vs element-ui
Vue 2 vs Vue 3 UI Component Libraries
element-pluselement-uiSimilar Packages:

Vue 2 vs Vue 3 UI Component Libraries

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.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
element-plus027,20539.9 MB1,2775 hours agoMIT
element-ui054,2069.25 MB2,9663 years agoMIT

Element Plus vs Element UI: Architecture, Vue Version, and DX Compared

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.

⚠️ Critical Warning: Vue Version & Maintenance Status

element-ui is tied to Vue 2, which reached End of Life (EOL) on December 31, 2023.

  • No new features or security patches are being added.
  • It relies on the Options API and Vue 2 reactivity system.
  • Using it for new projects is strongly discouraged.
// 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.

  • Supports Composition API and Vue 3 reactivity.
  • Receives regular updates, bug fixes, and new components.
  • Required for any modern Vue ecosystem integration.
// element-plus: Requires Vue 3 app instance
import { createApp } from 'vue';
import ElementPlus from 'element-plus';
const app = createApp(App);
app.use(ElementPlus);

πŸ“¦ Installation & Global Registration

element-ui uses a simpler global registration pattern typical of Vue 2.

  • You import the library and the CSS separately.
  • It attaches itself to the global Vue constructor.
// 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.

  • You pass the plugin to the application instance.
  • CSS import path is updated to match the new package structure.
// element-plus: Vue 3 plugin use
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
app.use(ElementPlus);

πŸ›‘οΈ TypeScript Support

element-ui relies on community-maintained type definitions.

  • You must install @types/element-ui separately.
  • Types may lag behind actual component props or contain errors.
  • Less reliable for strict type-checking in large codebases.
// 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.

  • No need to install external type packages.
  • Props, events, and slots are fully typed out of the box.
  • Provides better autocomplete and error catching in IDEs.
// element-plus: Built-in types
import { ElButton } from 'element-plus';
// Types are included in the package automatically

🎨 Theming: SCSS Variables vs CSS Variables

element-ui uses SCSS variables for customization.

  • You need to override variables and recompile styles.
  • Changing themes at runtime is difficult and requires rebuilds.
  • Dark mode requires a separate build process or complex overrides.
// element-ui: SCSS override
$--color-primary: #409EFF;
@import "~element-ui/packages/theme-chalk/src/index";

element-plus uses CSS Custom Properties (Variables).

  • You can change themes dynamically at runtime without recompiling.
  • Built-in support for dark mode via class toggling.
  • Easier integration with design tokens and system preferences.
/* element-plus: CSS Variable override */
html {
  --el-color-primary: #409EFF;
}
/* Toggle dark mode by adding class="dark" to html */

πŸ”„ Component API: v-model Changes

element-ui follows Vue 2 v-model conventions.

  • Input components use value prop and input event.
  • Some components use specific props like visible for dialogs.
  • Inconsistent API across different component types.
<!-- 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.

  • Input components use modelValue prop and update:modelValue event.
  • Dialogs use v-model directly instead of visible.sync.
  • More consistent API across the entire library.
<!-- element-plus: Vue 3 v-model -->
<el-input v-model="searchText" />
<el-dialog v-model="dialogVisible" />

🀝 Similarities: Shared Design Language

Despite the technical differences, both libraries share the same visual identity.

1. 🎨 Component Look & Feel

  • Buttons, tables, and forms look nearly identical.
  • Existing design knowledge transfers between versions.
<!-- Both use similar component tags -->
<el-button type="primary">Primary</el-button>

2. 🧩 Component Ecosystem

  • Both offer comprehensive sets (Tables, Forms, Navigation).
  • Suitable for enterprise admin panels and dashboards.
<!-- Both support complex data tables -->
<el-table :data="tableData">
  <el-table-column prop="name" label="Name" />
</el-table>

3. 🌍 Internationalization

  • Both support multiple languages via locale config.
  • Syntax differs slightly but concept remains the same.
// 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 });

πŸ“Š Summary: Key Differences

Featureelement-uielement-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

πŸ’‘ The Big Picture

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.

How to Choose: element-plus vs element-ui

  • 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.

  • element-ui:

    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.

README for element-plus


Element Plus - A Vue.js 3 UI library

  • πŸ’ͺ Vue 3 Composition API
  • πŸ”₯ Written in TypeScript

Getting Started

Alright, if you're looking to make Element Plus better, keep reading. For developers using Element Plus to build websites, please visit Getting Started.

Breaking Change List

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.

Migration Tool :hammer_and_wrench:

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.

Playground

You can also try out Element Plus with its built-in component playground.

Try it with our built-in playground

Playground

Try it with CodeSandbox

Edit element-plus

Special thanks to our generous sponsors:


Platinum Sponsors

Gold Sponsors


Translations

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.

How to help translate

See how to help translate in Translating Element Plus.

Stay tuned :eyes:

Join our Discord to start communicating with everybody.

This thing is broken, I should help improve it!

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.

I would like to become a part of the development team!

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:

Contributors

This project exists thanks to all the people who contribute.

And thank you to all our backers! πŸ™

Contribution Leaderboard

License

Element Plus is open source software licensed as MIT.