vue-good-table is a legacy table component originally built for Vue 2, offering features like sorting, filtering, and pagination. While widely adopted in the past, it lacks native Vue 3 support and requires compatibility layers to function in modern stacks. vue3-easy-data-table is a lightweight, purpose-built alternative designed specifically for Vue 3. It leverages the Composition API and provides a streamlined set of features for displaying and interacting with tabular data without the overhead of maintaining legacy code.
When building dashboards or admin panels in Vue 3, choosing the right data table component is critical for performance and maintainability. Two names often come up: vue-good-table and vue3-easy-data-table. However, they represent very different stages in the Vue ecosystem lifecycle. Let's break down why one is a legacy artifact and the other is a modern solution.
vue-good-table was built during the Vue 2 era using the Options API.
data, methods, and computed properties defined in an object.ref or reactive natively.<!-- vue-good-table: Vue 2 Options API style -->
<template>
<vue-good-table
:columns="columns"
:rows="rows"
:search-options="{ enabled: true }"
/>
</template>
<script>
import { VueGoodTable } from 'vue-good-table';
export default {
components: { VueGoodTable },
data() {
return {
columns: [{ label: 'Name', field: 'name' }],
rows: [{ name: 'Alice' }]
};
}
};
</script>
vue3-easy-data-table is built from the ground up for Vue 3 using the Composition API.
<script setup> syntax, making logic reuse and type inference much cleaner.<!-- vue3-easy-data-table: Vue 3 Composition API style -->
<template>
<EasyDataTable
:headers="headers"
:items="items"
theme-color="#1d90ff"
/>
</template>
<script setup>
import { ref } from 'vue';
import EasyDataTable from 'vue3-easy-data-table';
const headers = [{ text: 'Name', value: 'name' }];
const items = ref([{ name: 'Alice' }]);
</script>
vue-good-table brings significant baggage to a Vue 3 project.
@vue/compat or dealing with peer dependency warnings.# Installation often triggers peer dependency warnings in Vue 3
npm install vue-good-table
# Warning: vue-good-table@2.x requires vue@^2.6.0
vue3-easy-data-table is lightweight and optimized for modern bundlers.
# Clean installation for Vue 3
npm install vue3-easy-data-table
# No peer dependency conflicts
Both libraries offer basic sorting and pagination, but the implementation syntax differs greatly.
vue-good-table uses a verbose configuration object for features.
sort-options prop.@page-change.<!-- vue-good-table: Verbose feature config -->
<vue-good-table
:columns="columns"
:rows="rows"
:pagination-options="{ enabled: true, perPage: 10 }"
:sort-options="{ enabled: true }"
@on-page-change="handlePageChange"
/>
vue3-easy-data-table simplifies feature toggles with direct props.
@update-page).<!-- vue3-easy-data-table: Simplified feature config -->
<EasyDataTable
:headers="headers"
:items="items"
:items-per-page="10"
:sort-by="'name'"
@update-page="handlePageChange"
/>
vue-good-table is effectively deprecated for new development.
vue3-easy-data-table is actively maintained for the current ecosystem.
| Feature | vue-good-table | vue3-easy-data-table |
|---|---|---|
| Vue Version | Vue 2 (Legacy) | Vue 3 (Native) |
| API Style | Options API | Composition API (<script setup>) |
| Bundle Size | Heavy (includes legacy polyfills) | Lightweight (modern ES modules) |
| Maintenance | Inactive / Legacy | Active |
| Styling | Deep CSS overrides | CSS Variables |
| Recommendation | ❌ Avoid for new projects | ✅ Recommended for Vue 3 |
vue-good-table is a relic of the Vue 2 era. While it served many developers well in the past, it is not a viable option for modern Vue 3 architecture. Using it today means accepting compatibility shims, larger bundle sizes, and a lack of future support.
vue3-easy-data-table is the pragmatic choice for Vue 3. It embraces the Composition API, offers a clean developer experience, and avoids the baggage of legacy frameworks. Unless you are strictly maintaining an old Vue 2 app, there is no technical reason to choose vue-good-table over a native Vue 3 solution.
Final Thought: In frontend architecture, staying current isn't just about features; it's about reducing friction. vue3-easy-data-table removes the friction of compatibility layers, letting you focus on building your application logic rather than fighting framework mismatches.
Choose vue-good-table only if you are maintaining an existing Vue 2 application that already relies on it, or if you are forced to support a legacy codebase where rewriting the data grid layer is not feasible. Do not select this package for new Vue 3 projects, as it is not natively compatible and lacks active maintenance for modern Vue features.
Choose vue3-easy-data-table for any new Vue 3 project requiring a simple, performant data table. It is the ideal choice when you need native Composition API support, tree-shakable components, and a lightweight footprint without the technical debt of migrating a Vue 2 library. It fits best in scenarios where you need standard sorting, pagination, and row selection without complex enterprise-grade requirements.
An easy to use, clean and powerful data table for VueJS with essential features like sorting, column filtering, pagination and much more - xaksis.github.io/vue-good-table/
| Vue 3 Update |
|---|
| @borisflesch is working on a Vue 3 compatible version of VGT . Please follow/contribute to his repository as it gets production ready: vue-good-table-next |
Install with npm:
npm install --save vue-good-table
Import globally in app:
import VueGoodTablePlugin from 'vue-good-table';
// import the styles
import 'vue-good-table/dist/vue-good-table.css'
Vue.use(VueGoodTablePlugin);
Import into your component
import { VueGoodTable } from 'vue-good-table';
// add to component
components: {
VueGoodTable,
}
Import into your component using Typescript
// add to component
components: {
'vue-good-table': require('vue-good-table').VueGoodTable,
}

Hey there! coming from 1.x? find the upgrade guide here
This project is licensed under the MIT License - see the LICENSE.md file for details