ag-grid-vue3 is the official Vue 3 wrapper for AG Grid, a high-performance, feature-rich data grid component designed for complex enterprise applications. It supports millions of rows via row virtualization, advanced filtering, pivoting, Excel export, and deep customization through a robust API.
vue-good-table is a lightweight, easy-to-use table component specifically built for Vue. It focuses on simplicity, offering essential features like sorting, pagination, and basic filtering with a minimal footprint. While it has a Vue 3 compatible version, its feature set is significantly smaller, targeting simple data display needs rather than complex data manipulation.
Choosing the right table component is one of the most critical architectural decisions in frontend development. A table often becomes the primary interface for user data, and picking the wrong tool can lead to performance bottlenecks or endless customization struggles. Let's compare ag-grid-vue3 and vue-good-table to see how they handle real-world engineering challenges.
ag-grid-vue3 is built for scale. It uses aggressive row and column virtualization, meaning it only renders the rows currently visible in the viewport. This allows it to handle hundreds of thousands of rows without crashing the browser.
<!-- ag-grid-vue3: Handles 100k+ rows smoothly -->
<template>
<AgGridVue
:grid-options="gridOptions"
:row-data="hugeDataset"
style="height: 600px;"
/>
</template>
<script setup>
import { AgGridVue } from 'ag-grid-vue3';
const gridOptions = {
columnDefs: [{ field: 'name' }, { field: 'amount' }],
// Virtualization is on by default
};
</script>
vue-good-table renders rows directly in the DOM. While efficient for small lists, it lacks built-in virtualization for massive datasets. If you try to render 5,000+ rows, the page will become sluggish because the browser has to manage thousands of DOM nodes simultaneously.
<!-- vue-good-table: Best for <1000 rows -->
<template>
<vue-good-table
:columns="columns"
:rows="smallDataset"
:paginate="true"
/>
</template>
<script setup>
import { VueGoodTable } from 'vue-good-table';
const columns = [
{ label: 'Name', field: 'name' },
{ label: 'Amount', field: 'amount' }
];
</script>
ag-grid-vue3 offers a massive API out of the box. You get column resizing, dragging, pinning, complex filtering (text, number, date, set), grouping, and aggregation without writing custom logic. It feels like a spreadsheet embedded in your app.
<!-- ag-grid-vue3: Advanced features enabled via config -->
<script setup>
const gridOptions = {
columnDefs: [
{
field: 'make',
filter: 'agTextColumnFilter', // Built-in complex filter
floatingFilter: true // Show filter below header
},
{
field: 'price',
aggFunc: 'sum' // Aggregation for grouped rows
}
],
groupDisplayType: 'groupRows', // Enable row grouping
sideBar: true // Enable tool panel for column management
};
</script>
vue-good-table focuses on the basics. It provides simple text search, basic sorting, and pagination. If you need to group rows or aggregate data, you must write that logic yourself before passing the data to the table.
<!-- vue-good-table: Simple search and sort -->
<template>
<vue-good-table
:search-options="{ enabled: true }" // Simple text match
:sort-options="{ enabled: true }"
/>
</template>
ag-grid-vue3 gives you full control over cell rendering using Vue components. You can embed buttons, charts, or complex forms inside a single cell. The grid manages the lifecycle of these components efficiently.
<!-- ag-grid-vue3: Custom Cell Component -->
<!-- ActionCell.vue -->
<template>
<button @click="params.data.onEdit(params.data)">Edit</button>
</template>
<!-- Grid Setup -->
<script setup>
import ActionCell from './ActionCell.vue';
const gridOptions = {
columnDefs: [
{
field: 'actions',
cellRenderer: ActionCell // Pass Vue component directly
}
]
};
</script>
vue-good-table allows custom formatting via scoped slots, which is great for simple text formatting or adding icons. However, handling complex interactive state inside a cell can become verbose and harder to manage compared to AG Grid's component approach.
<!-- vue-good-table: Scoped Slot Formatting -->
<template>
<vue-good-table :rows="rows">
<template #table-row="props">
<span v-if="props.column.field === 'status'">
<badge :type="props.row.status">{{ props.row.status }}</badge>
</span>
</template>
</vue-good-table>
</template>
ag-grid-vue3 has a dedicated "Row Model" architecture. The "Infinite Row Model" or "Server-Side Row Model" lets you fetch data in chunks (pagination) while keeping the scroll bar accurate for the total dataset size. This is crucial for large databases.
// ag-grid-vue3: Server-side data source
const dataSource = {
getRows: (params) => {
// params.startRow, params.endRow, params.sortModel, params.filterModel
api.get(`/data?start=${params.startRow}&limit=${params.endRow}`)
.then(response => {
params.successCallback(response.rows, response.totalCount);
});
}
};
const gridOptions = { rowModelType: 'infinite', dataSource };
vue-good-table expects the full dataset to be passed to it (client-side). While you can manually implement pagination by slicing your array before passing it to the component, it does not natively understand server-side cursors or infinite scrolling mechanics.
// vue-good-table: Manual client-side pagination
// You must slice the array yourself before passing it
const paginatedRows = computed(() => {
const start = (currentPage - 1) * perPage;
return allRows.slice(start, start + perPage);
});
Despite the differences, both libraries aim to make displaying tabular data easier in Vue 3.
Both packages work with the modern Vue 3 Composition API (<script setup>), allowing you to use reactive refs and computed properties easily.
<!-- Both support reactive data binding -->
<script setup>
import { ref } from 'vue';
const rowData = ref([]);
// Works in both AG Grid and Vue Good Table
</script>
Both provide out-of-the-box sorting (click header to sort) and pagination controls, saving you from building these common UI patterns from scratch.
<!-- Basic config in both -->
<!-- AG Grid -->
const colDefs = [{ field: 'name', sortable: true }];
<!-- Vue Good Table -->
<!-- Enabled by default or via simple props -->
Both offer built-in themes (light, dark, material) and allow CSS customization, though AG Grid uses CSS variables for deeper theming while Vue Good Table relies more on standard class overrides.
| Feature | ag-grid-vue3 | vue-good-table |
|---|---|---|
| Max Rows | 100,000+ (Virtualized) | ~1,000 (DOM limited) |
| Complexity | High (Enterprise features) | Low (Simple display) |
| License | MIT (Community) / Commercial (Enterprise) | MIT (Free) |
| Server-Side | Native Infinite/Server Row Models | Manual Implementation Required |
| Custom Cells | Full Vue Components | Scoped Slots |
| Bundle Size | Large (Feature heavy) | Small (Lightweight) |
ag-grid-vue3 is the industrial powerhouse 🏭. If you are building a fintech dashboard, an ERP system, or any app where users need to analyze, filter, and export large datasets, this is the only serious choice. The learning curve is steeper, and the bundle size is larger, but it saves months of development time on complex features.
vue-good-table is the lightweight utility 🔧. If you need a quick, nice-looking table for a settings page, a list of recent comments, or a simple report with limited rows, this is perfect. It gets the job done with minimal setup and zero cost.
Final Thought: Don't over-engineer a simple list with AG Grid, and don't try to force vue-good-table to handle a million-row dataset. Match the tool to the complexity of your data.
Choose ag-grid-vue3 if you are building an enterprise-grade application requiring complex data interactions, such as financial dashboards, admin panels with massive datasets, or tools requiring Excel-like functionality (grouping, pivoting, aggregation). It is the correct choice when performance with large datasets (10k+ rows) and extensive customization are critical requirements, and you have the budget for the enterprise license if advanced features are needed.
Choose vue-good-table if your project requires a simple, clean table to display small to medium-sized datasets (under 1,000 rows) with basic sorting and pagination. It is ideal for startups, marketing sites, or internal tools where development speed and minimal bundle size are more important than advanced grid features. Avoid this package if you anticipate needing complex filtering, column resizing, or server-side data pipelines.
AG Grid is a fully-featured and highly customizable Vue3 Data Grid. It delivers outstanding performance and has no third-party dependencies.
AG Grid is available in two versions: Community & Enterprise.
ag-grid-community is free, available under the MIT license, and comes with all of the core features expected from a Vue3 Data Grid, including Sorting, Filtering, Pagination, Editing, Custom Components, Theming and more.ag-grid-enterprise is available under a commercial license and comes with advanced features, like AI Toolkit, Integrated Charting, Formulas, Row Grouping, Aggregation, Pivoting, Master/Detail, Server-side Row Model, Find and Exporting in addition to dedicated support from our Engineering team.| Feature | AG Grid Community | AG Grid Enterprise |
|---|---|---|
| MCP Server | ✅ | ✅ (Advanced) |
| Filtering | ✅ | ✅ (Advanced) |
| Sorting | ✅ | ✅ |
| Cell Editing | ✅ | ✅ |
| CSV Export | ✅ | ✅ |
| Drag & Drop | ✅ | ✅ |
| Themes and Styling | ✅ | ✅ |
| Selection | ✅ | ✅ |
| Accessibility | ✅ | ✅ |
| Infinite Scrolling | ✅ | ✅ |
| Pagination | ✅ | ✅ |
| Server-Side Data | ✅ | ✅ (Advanced) |
| Custom Components | ✅ | ✅ |
| AI Toolkit | ❌ | ✅ |
| Integrated Charting | ❌ | ✅ |
| Formulas | ❌ | ✅ |
| Find | ❌ | ✅ |
| Range Selection | ❌ | ✅ |
| Row Grouping and Aggregation | ❌ | ✅ |
| Pivoting | ❌ | ✅ |
| Excel Export | ❌ | ✅ |
| Clipboard Operations | ❌ | ✅ |
| Master/Detail | ❌ | ✅ |
| Tree Data | ❌ | ✅ |
| Column Menu | ❌ | ✅ |
| Context Menu | ❌ | ✅ |
| Tool Panels | ❌ | ✅ |
| Support | ❌ | ✅ |
ℹ️ Note:
Visit the Pricing page for a full comparison.
We've created several demos to showcase AG Grid's rich feature set across different use cases. See them in action below, or interact with them on our Demo page.
AG Grid is easy to set up - all you need to do is provide your data and define your column structure.
$ npm install --save ag-grid-vue3
1. Register Modules
Register the AllCommunityModule to access all Community features:
import { AllCommunityModule, ModuleRegistry } from 'ag-grid-community';
// Register all Community features
ModuleRegistry.registerModules([AllCommunityModule]);
ℹ️ Note:
To minimize bundle size, only register the modules you want to use. See the Modules page for more information.
2. Import the Vue Data Grid
<template></template>
<script>
import { ref } from 'vue';
import { AgGridVue } from "ag-grid-vue3"; // Vue Data Grid Component
export default {
name: "App",
components: {
AgGridVue, // Add Vue Data Grid component
},
setup() {},
};
</script>
3. Define Rows and Columns
setup() {
// Row Data: The data to be displayed.
const rowData = ref([
{ make: "Tesla", model: "Model Y", price: 64950, electric: true },
{ make: "Ford", model: "F-Series", price: 33850, electric: false },
{ make: "Toyota", model: "Corolla", price: 29600, electric: false },
]);
// Column Definitions: Defines the columns to be displayed.
const colDefs = ref([
{ field: "make" },
{ field: "model" },
{ field: "price" },
{ field: "electric" }
]);
return {
rowData,
colDefs,
};
},
4. Vue Data Grid Component
Rows and Columns are set as ag-grid-vue component attributes. Grid height is applied through the style attribute.
<template>
<!-- The AG Grid component -->
<ag-grid-vue
:rowData="rowData"
:columnDefs="colDefs"
style="height: 500px"
>
</ag-grid-vue>
</template>
ℹ️ Note:
For more information on building Data Grids with AG Grid, refer to our Documentation.
We also provide Seed Projects to help you get started with common configurations:
| Environment | Framework |
|---|---|
| Create React App (CRA) | |
| Vite | |
| Create Next App | |
| Vite - TypeScript | |
| Webpack 5 - TypeScript | |
| Webpack 5 - Vue3 | |
| Angular CLI | |
| Nuxt | |
| Vite |
AG Grid is fully customisable, both in terms of appearance and functionality. There are many ways in which the grid can be customised and we provide a selection of tools to help create those customisations.
You can create your own Custom Components to customise the behaviour of the grid. For example, you can customise how cells are rendered, how values are edited and also create your own filters.
There are a number of different Component Types that you can provide to the grid, including:
To supply a custom cell renderer and filter components to the Grid, create a direct reference to your component within the gridOptions.columnDefs property:
gridOptions = {
columnDefs: [
{
field: 'country', // The column to add the component to
cellRenderer: CountryCellRenderer, // Your custom cell component
filter: CountryFilter, // Your custom filter component
},
],
};
AG Grid has 4 themes, each available in light & dark modes:
| Quartz | Material |
|---|---|
|
|
| Alpine | Balham |
|
|
All AG Grid themes can be customised using the Theming API, or you can create a new theme from scratch with the help of our Theme Builder or Figma Design System.
AG Grid has a large and active community who have created an ecosystem of 3rd party tools, extensions and utilities to help you build your next project with AG Grid, no matter which language or framework you use:
AG Grid is used by 100,000's of developers across the world, from almost every industry. Whilst most of these projects are private, we've curated a selection of open-source projects from different industries where household names use AG Grid, including J.P.Morgan, MongoDB and NASA. Visit our Community Showcase page to learn more.
Founded in 2016, AG Grid has seen a steady rise in popularity and is now the market leader for Data Grids:
AG Grid Enterprise customers have access to dedicated support via ZenDesk, which is monitored by our engineering teams.
If you have found a bug, please report it in this repository's issues section.
Look for similar problems on StackOverflow using the ag-grid tag. If nothing seems related, post a new message there. Please do not use GitHub issues to ask questions.
AG Grid is developed by a team of co-located developers in London. If you want to join the team send your application to info@ag-grid.com.
ag-grid-community is licensed under the MIT license.
ag-grid-enterprise has a Commercial license.
See the LICENSE file for more info.
If you've made it this far, you may be interested in our latest project: AG Charts - The best Vue3 Charting library in the world.
Initially built to power Integrated Charts in AG Grid, we open-sourced this project in 2018. Having seen the steady rise in popularity since then, we have decided to invest in AG Charts with a dedicated Enterprise version (ag-charts-enterprise) in addition to our continued support of ag-charts-community.