vue-good-table vs vue3-easy-data-table
Modern Data Grid Solutions for Vue 3 Applications
vue-good-tablevue3-easy-data-table

Modern Data Grid Solutions for Vue 3 Applications

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.

Npm Package Weekly Downloads Trend

3 Years

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
vue-good-table02,173-1915 years agoMIT
vue3-easy-data-table0-120 kB-3 years agoMIT

Vue 3 Data Tables: vue-good-table vs vue3-easy-data-table

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.

🏗️ Architecture: Options API vs Composition API

vue-good-table was built during the Vue 2 era using the Options API.

  • It relies on data, methods, and computed properties defined in an object.
  • To use it in Vue 3, you must run the app in compatibility mode or wrap it, which adds unnecessary bulk.
  • It does not leverage reactive primitives like 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.

  • It uses <script setup> syntax, making logic reuse and type inference much cleaner.
  • It integrates naturally with Vue 3's reactivity system.
  • The component structure is flatter and easier to debug in modern devtools.
<!-- 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>

📦 Installation and Bundle Impact

vue-good-table brings significant baggage to a Vue 3 project.

  • Since it targets Vue 2, using it often requires installing @vue/compat or dealing with peer dependency warnings.
  • The package includes polyfills and logic for older browsers that modern apps no longer need.
  • Tree-shaking is less effective due to its older build configuration.
# 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.

  • It has zero dependencies on Vue 2 compatibility layers.
  • It ships with modern ES modules that Vite and Webpack 5 can tree-shake efficiently.
  • The installation is clean with no version conflicts.
# Clean installation for Vue 3
npm install vue3-easy-data-table
# No peer dependency conflicts

⚙️ Feature Implementation: Sorting and Pagination

Both libraries offer basic sorting and pagination, but the implementation syntax differs greatly.

vue-good-table uses a verbose configuration object for features.

  • Sorting is enabled via a nested sort-options prop.
  • Pagination requires listening to specific events like @page-change.
  • Customizing the look often requires deep CSS overrides or scoped slots that are harder to migrate.
<!-- 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.

  • Sorting and pagination are boolean flags or simple objects.
  • Event names follow standard Vue 3 conventions (e.g., @update-page).
  • Styling is handled via CSS variables, making theme changes straightforward without fighting specificity.
<!-- vue3-easy-data-table: Simplified feature config -->
<EasyDataTable
  :headers="headers"
  :items="items"
  :items-per-page="10"
  :sort-by="'name'"
  @update-page="handlePageChange"
/>

⚠️ Maintenance and Future Proofing

vue-good-table is effectively deprecated for new development.

  • The original repository has seen minimal activity in recent years.
  • There are no plans to rewrite it for Vue 3 natively.
  • Using it introduces technical debt that will require a full rewrite when you eventually upgrade your stack.

vue3-easy-data-table is actively maintained for the current ecosystem.

  • It receives updates to align with new Vue 3 minor releases.
  • The community around it is growing as developers migrate away from Vue 2 plugins.
  • It represents a sustainable choice for long-term projects.

📊 Summary: Key Differences

Featurevue-good-tablevue3-easy-data-table
Vue VersionVue 2 (Legacy)Vue 3 (Native)
API StyleOptions APIComposition API (<script setup>)
Bundle SizeHeavy (includes legacy polyfills)Lightweight (modern ES modules)
MaintenanceInactive / LegacyActive
StylingDeep CSS overridesCSS Variables
Recommendation❌ Avoid for new projects✅ Recommended for Vue 3

💡 The Big Picture

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.

How to Choose: vue-good-table vs vue3-easy-data-table

  • vue-good-table:

    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.

  • vue3-easy-data-table:

    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.

README for vue-good-table

Vue-good-table

npm npm npm

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

Installing

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,
}
Example table with grouped rows and column filters

Advanced Screenshot

Features

Upgrade Guide

Hey there! coming from 1.x? find the upgrade guide here

Authors

License

This project is licensed under the MIT License - see the LICENSE.md file for details