ant-design-vue, element-ui, tdesign-vue, and vuetify are comprehensive Vue component libraries designed to accelerate the development of enterprise-grade user interfaces. Each provides a rich set of pre-built, styled components following distinct design systems — Ant Design, Element, TDesign, and Material Design respectively — along with utilities for theming, internationalization, and accessibility. These libraries enable teams to build consistent, responsive, and accessible applications with minimal custom CSS or JavaScript.
When building enterprise Vue applications, choosing the right component library is a foundational architectural decision. It affects everything from design consistency and developer velocity to long-term maintainability and accessibility compliance. Let’s compare ant-design-vue, element-ui, tdesign-vue, and vuetify through real engineering lenses — not just features, but how they behave in actual code.
First, a critical reality check: element-ui is deprecated. Its official npm page states: “Element UI has stopped maintenance. We recommend using Element Plus for Vue 3.” This isn’t a minor detail — it means no bug fixes, security patches, or compatibility updates. If you’re starting a new project, do not use element-ui. Instead, consider element-plus (not covered here) or one of the actively maintained alternatives below.
The other three — ant-design-vue, tdesign-vue, and vuetify — are actively developed and support Vue 3.
Each library ships with a strong visual identity rooted in its underlying design system:
ant-design-vue follows Ant Design, which favors spacious layouts, rounded corners, and a clean, data-dense aesthetic. Common in Chinese enterprise software and Alibaba ecosystem products.tdesign-vue uses TDesign, a newer, neutral design system from Tencent that balances professionalism with approachability. Offers both light and dark themes out of the box.vuetify implements Material Design rigorously, with elevation, motion, and typography aligned to Google’s specs. Feels familiar to users of Android or Gmail.Your choice here often depends on brand alignment or existing design tokens. You can customize all of them, but fighting the default aesthetic adds cost.
All four libraries expose components via standard Vue APIs, but their usage patterns differ slightly in practice.
<!-- ant-design-vue -->
<template>
<a-button type="primary">Submit</a-button>
</template>
<script setup>
import { Button } from 'ant-design-vue';
</script>
<!-- element-ui (deprecated) -->
<template>
<el-button type="primary">Submit</el-button>
</template>
<script>
import { Button } from 'element-ui';
export default { components: { ElButton: Button } };
</script>
<!-- tdesign-vue -->
<template>
<t-button theme="primary">Submit</t-button>
</template>
<script setup>
import { Button } from 'tdesign-vue';
</script>
<!-- vuetify -->
<template>
<v-btn color="primary">Submit</v-btn>
</template>
<script setup>
import { VBtn } from 'vuetify/components';
</script>
Note the naming conventions: a-*, el-*, t-*, and v-*. This matters for global registration and template readability in large teams.
Enterprise apps often require multi-language support. Here’s how each handles it:
// ant-design-vue
import enUS from 'ant-design-vue/es/locale/en_US';
import { ConfigProvider } from 'ant-design-vue';
<ConfigProvider :locale="enUS">
<App />
</ConfigProvider>
// element-ui (deprecated)
import locale from 'element-ui/lib/locale';
import lang from 'element-ui/lib/locale/lang/en';
locale.use(lang);
// tdesign-vue
import { ConfigProvider } from 'tdesign-vue';
import enConfig from 'tdesign-vue/es/locale/en_US';
<ConfigProvider :global-config="enConfig">
<App />
</ConfigProvider>
// vuetify
import { createVuetify } from 'vuetify';
import { en } from 'vuetify/locale';
const vuetify = createVuetify({
locale: { locale: 'en', messages: { en } }
});
All support runtime language switching, but vuetify and ant-design-vue have more mature i18n ecosystems.
Theming strategies vary significantly:
ant-design-vue uses Less variables. You override them before compilation:
@import '~ant-design-vue/dist/antd.less';
@primary-color: #1890ff;
tdesign-vue provides CSS variables and a config object for design tokens:
import { style } from 'tdesign-vue/es/config';
style.setGlobalConfig({
primaryColor: '#0052d9'
});
vuetify uses a JavaScript-based theme system with deep nesting:
const vuetify = createVuetify({
theme: {
themes: {
light: {
colors: { primary: '#1976D2' }
}
}
}
});
element-ui used SCSS variables, but again — it’s deprecated.
If your team prefers compile-time theming (e.g., via Webpack), ant-design-vue fits well. If you need runtime theme switching, vuetify and tdesign-vue offer better support.
vuetify has the most comprehensive responsive utilities, including grid system breakpoints (xs, sm, md, etc.) and mobile-first directives.ant-design-vue includes responsive grid and hidden utilities, but mobile touch targets are sometimes too small by default.tdesign-vue explicitly supports mobile viewports and includes touch-friendly components like PullDownRefresh.element-ui was desktop-first and lacks robust mobile support — another reason to avoid it.For mobile-heavy applications, vuetify or tdesign-vue are stronger choices.
All active libraries claim WCAG compliance, but implementation depth varies:
vuetify has the most thorough a11y testing, with ARIA roles baked into components like v-data-table.ant-design-vue follows Ant Design’s a11y guidelines, but some complex components (e.g., TreeSelect) require manual ARIA tweaks.tdesign-vue includes keyboard navigation and focus management in core components, with explicit a11y documentation.Always audit with tools like axe-core, but vuetify tends to require fewer post-hoc fixes.
All three active libraries ship with TypeScript definitions:
ant-design-vue: Full TS support; props and events are strongly typed.tdesign-vue: Built with TypeScript; excellent IDE autocomplete.vuetify: Vuetify 3 is fully typed; earlier versions had gaps.No major red flags here — all integrate smoothly into TS projects.
vuetify has the richest ecosystem: CLI plugins, icon packs, premium themes, and Nuxt integration.ant-design-vue integrates well with UmiJS and Ant Design Pro templates.tdesign-vue offers Figma kits and design token exports, useful for designer-developer handoff.If you rely on scaffolding tools or design systems tooling, factor this in.
| Scenario | Recommended Library |
|---|---|
| Building an internal admin panel aligned with Ant Design | ant-design-vue |
| Creating a public app requiring Material Design fidelity | vuetify |
| Needing a neutral, modern UI with dark mode out of the box | tdesign-vue |
| Maintaining a legacy Vue 2 app (only) | element-ui (with migration plan) |
Switching libraries mid-project is costly. Components don’t map 1:1 — a Table in one library may lack features present in another. Audit your most-used components (e.g., form controls, data tables, modals) early.
These libraries solve the same problem — accelerating UI development — but with different trade-offs in design philosophy, customization model, and ecosystem maturity. Don’t pick based on demo screenshots alone. Build a spike with your top two candidates using real components from your app (e.g., a filterable data table with pagination and export). That hands-on test reveals more than any feature matrix.
And remember: if you’re starting today, skip element-ui entirely. The future belongs to its successors.
Choose ant-design-vue if your team follows Ant Design principles or works within ecosystems that already use Ant Design (e.g., backend services built with Ant Design Pro). It offers deep customization through less variables and strong TypeScript support, making it suitable for large-scale applications requiring strict design consistency and complex data-heavy interfaces like admin panels or dashboards.
Avoid element-ui for new projects — it is officially deprecated and no longer maintained. The maintainers recommend migrating to element-plus, its Vue 3 successor. If you're maintaining a legacy Vue 2 application that already uses Element UI, continue using it only until you can upgrade, but do not start new projects with this package.
Choose tdesign-vue if you value a modern, neutral design system with strong cross-framework consistency (it also supports React and Angular) and need built-in support for both light and dark modes. Developed by Tencent, it emphasizes developer experience with clear documentation, comprehensive TypeScript definitions, and components tailored for enterprise scenarios like workflow builders or internal tools.
Choose vuetify if your project adheres to Google’s Material Design guidelines or requires pixel-perfect implementation of Material components. It provides extensive theming capabilities, a mature ecosystem, and full Vue 3 support via Vuetify 3. Ideal for public-facing applications where visual polish and adherence to a widely recognized design language are priorities.
English | 简体中文
Star us, and you will receive all releases notifications from GitHub without any delay!

![]() IE / Edge | ![]() Firefox | ![]() Chrome | ![]() Safari | ![]() Opera | ![]() Electron |
|---|---|---|---|---|---|
| Edge | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
We recommend using npm or yarn to install, it not only makes development easier, but also allow you to take advantage of the rich ecosystem of Javascript packages and tooling.
$ npm install ant-design-vue --save
$ yarn add ant-design-vue
If you are in a bad network environment, you can try other registries and tools like cnpm.
| Project | Description |
|---|---|
| vue-ref | You can use the callback to get a reference like react |
| ant-design-vue-helper | A vscode extension for ant-design-vue |
| vue-cli-plugin-ant-design | Vue-cli 3 plugin to add ant-design-vue |
| vue-dash-event | The library function, implemented in the DOM template, can use the custom event of the ant-design-vue component (camelCase) |
| @formily/antdv | The Library with Formily and ant-design-vue |
| @ant-design-vue/nuxt | A nuxt module for ant-design-vue |
ant-design-vue is an MIT-licensed open source project. In order to achieve better and sustainable development of the project, we expect to gain more backers. You can support us in any of the following ways:
Become a sponsor and get your logo on our README on Github with a link to your site. [Become a sponsor]
Thank you to all the people who already contributed to ant-design-vue!
This project is tested with BrowserStack.