ant-design-vue, bootstrap-vue, element-ui, and vuetify are prominent UI component libraries for Vue.js, each offering a distinct design language and set of tools for building interfaces. ant-design-vue brings the Ant Design enterprise system to Vue, focusing on dense data display and complex forms. bootstrap-vue integrates Bootstrap 4 components directly into Vue, appealing to teams already familiar with the Bootstrap ecosystem. element-ui provides a Vue 2-focused component set known for its clean aesthetic and comprehensive coverage, though it is now legacy for Vue 3. vuetify implements Google's Material Design specifications, offering a highly opinionated and visually rich component library. Choosing between them depends heavily on Vue version requirements, design preferences, and long-term maintenance goals.
When selecting a UI library for Vue.js, the decision impacts not just the visual style but also the underlying architecture, Vue version compatibility, and long-term maintainability. ant-design-vue, bootstrap-vue, element-ui, and vuetify represent four different approaches to component development. Let's compare how they handle setup, component usage, layout, theming, and maintenance status.
The most critical architectural constraint is Vue version support. Two of these libraries are primarily tied to Vue 2, while the others have mature Vue 3 implementations.
ant-design-vue supports Vue 3 fully (v4+). It uses standard plugin registration.
// ant-design-vue (Vue 3)
import { createApp } from 'vue';
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/reset.css';
const app = createApp(App);
app.use(Antd);
bootstrap-vue is built for Vue 2. For Vue 3, the ecosystem has shifted to bootstrap-vue-next.
// bootstrap-vue (Vue 2)
import Vue from 'vue';
import BootstrapVue from 'bootstrap-vue';
import 'bootstrap/dist/css/bootstrap.css';
import 'bootstrap-vue/dist/bootstrap-vue.css';
Vue.use(BootstrapVue);
element-ui is strictly for Vue 2. It is not compatible with Vue 3.
// element-ui (Vue 2)
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
vuetify supports Vue 3 (v3+). It requires a specific configuration object during setup.
// vuetify (Vue 3)
import { createVuetify } from 'vuetify';
import 'vuetify/styles';
const vuetify = createVuetify();
const app = createApp(App);
app.use(vuetify);
Component naming conventions and API structures vary significantly. Some use prefixed tags, while others rely on global registration.
ant-design-vue uses an a- prefix for components.
// ant-design-vue
<template>
<a-button type="primary">Primary Button</a-button>
</template>
bootstrap-vue uses a b- prefix to distinguish from native HTML.
// bootstrap-vue
<template>
<b-button variant="primary">Primary Button</b-button>
</template>
element-ui uses an el- prefix.
// element-ui
<template>
<el-button type="primary">Primary Button</el-button>
</template>
vuetify uses a v- prefix and often relies on props for styling variants.
// vuetify
<template>
<v-btn color="primary">Primary Button</v-btn>
</template>
Layout strategies differ between flex-based grids and container-based systems. All four offer responsive grids, but the syntax varies.
ant-design-vue uses a 24-column grid system with <a-row> and <a-col>.
// ant-design-vue
<a-row>
<a-col :span="12">Left Half</a-col>
<a-col :span="12">Right Half</a-col>
</a-row>
bootstrap-vue mirrors Bootstrap's container system with <b-container>, <b-row>, and <b-col>.
// bootstrap-vue
<b-container>
<b-row>
<b-col cols="6">Left Half</b-col>
<b-col cols="6">Right Half</b-col>
</b-row>
</b-container>
element-ui also uses a 24-column system similar to Ant Design.
// element-ui
<el-row>
<el-col :span="12">Left Half</el-col>
<el-col :span="12">Right Half</el-col>
</el-row>
vuetify uses a flexbox grid with <v-row> and <v-col>, often relying on breakpoint props.
// vuetify
<v-row>
<v-col cols="6">Left Half</v-col>
<v-col cols="6">Right Half</v-col>
</v-row>
Customizing the look and feel ranges from simple CSS overrides to complex Sass variable maps.
ant-design-vue allows customization via CSS variables or Less modification during build.
/* ant-design-vue: CSS Variables */
:root {
--ant-primary-color: #0052d9;
}
bootstrap-vue relies on standard Bootstrap Sass variables.
// bootstrap-vue: SCSS Variables
$primary: #0052d9;
@import 'bootstrap-vue/src/index.scss';
element-ui requires a theme generator or SCSS variable overrides.
// element-ui: SCSS Variables
$--color-primary: #0052d9;
@import 'element-ui/lib/theme-chalk/index.scss';
vuetify uses a configuration object to define theme colors globally.
// vuetify: Config Object
const vuetify = createVuetify({
theme: {
themes: {
light: {
primary: '#0052d9',
},
},
},
});
This is the most critical section for architectural decisions. Using a library without active Vue 3 support creates technical debt.
ant-design-vue is actively maintained with full Vue 3 support. It is safe for new projects.
bootstrap-vue is in maintenance mode for Vue 2. For Vue 3, you must look at bootstrap-vue-next, which is a separate package. Sticking with bootstrap-vue locks you to Vue 2.
element-ui is effectively legacy. It does not support Vue 3. The official path forward is element-plus. Using element-ui in a new project is not recommended.
vuetify is actively maintained with Vuetify 3 for Vue 3. It is safe for new projects.
Despite their differences, these libraries share common goals and patterns.
// All libraries provide similar basic components
// <a-button>, <b-button>, <el-button>, <v-btn>
// All support column spans
// :span="12" (Ant, Element) vs cols="6" (Bootstrap, Vuetify)
// All offer ways to change primary brand colors
// Via CSS variables, SCSS, or JS config
// All components include built-in focus management
// and semantic HTML structures
// All can be installed via npm or yarn
// npm install [package-name]
| Feature | Shared by All Four |
|---|---|
| Core Tech | ๐ข Vue.js Components |
| Layout | ๐ Responsive Grid Systems |
| Styling | ๐จ Themable Colors |
| Accessibility | โ ARIA & Keyboard Support |
| Installation | ๐ฆ NPM Package Based |
| Feature | ant-design-vue | bootstrap-vue | element-ui | vuetify |
|---|---|---|---|---|
| Vue Version | ๐ข Vue 3 Supported | ๐ด Vue 2 Only (See Next) | ๐ด Vue 2 Only | ๐ข Vue 3 Supported |
| Design Style | ๐ข Enterprise/Neutral | ๐ Bootstrap Standard | ๐งน Clean/Minimal | ๐จ Material Design |
| Prefix | a- | b- | el- | v- |
| Grid System | 24-column | Container/Row/Col | 24-column | Flexbox Based |
| Maintenance | โ Active | โ ๏ธ Legacy (Vue 2) | โ ๏ธ Legacy (Vue 2) | โ Active |
ant-design-vue is the strong choice for enterprise applications ๐ข needing Vue 3 support and complex data handling. It balances functionality with a professional look.
bootstrap-vue is suitable only for Vue 2 legacy projects ๐ฐ๏ธ. For Vue 3, teams should investigate bootstrap-vue-next to maintain Bootstrap familiarity without the version lock.
element-ui should be avoided for new development ๐. It is a Vue 2 library. If the Element design language is required, element-plus is the necessary alternative for Vue 3.
vuetify is ideal for teams wanting Material Design ๐จ and a rich component set for Vue 3. It offers a polished experience but comes with a larger bundle size and opinionated structure.
Final Thought: The decision largely depends on Vue version requirements. For new projects, ant-design-vue and vuetify are the viable modern options. element-ui and bootstrap-vue are legacy tools that should only be selected for maintaining existing Vue 2 codebases.
Choose ant-design-vue if you are building enterprise-grade applications with Vue 3 that require complex data tables, forms, and a professional, neutral design system. It is ideal for admin dashboards and B2B platforms where density and functionality outweigh decorative flair.
Choose bootstrap-vue if you are maintaining a Vue 2 project already using Bootstrap 4, or if your team relies heavily on Bootstrap's utility classes. For new Vue 3 projects, evaluate bootstrap-vue-next instead, as the original package does not support Vue 3.
Do not choose element-ui for new Vue 3 projects. It is strictly for Vue 2 legacy maintenance. If you like the Element design language but need Vue 3 support, you must migrate to element-plus, which is the official Vue 3 successor.
Choose vuetify if you prefer Material Design and want a comprehensive, opinionated framework for Vue 3. It is suitable for consumer-facing apps, prototypes, and projects where a polished, modern look is a priority out of the box.
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.