Open source · MIT licence · v1.1.98

New Pivot, row grouping, master/detail, formulas, RTL – 12 features in October →

Millions of rows.
Any framework.
Still smooth.

GuiExpert Table renders only the cells you can see – vertically and horizontally. One TypeScript core without runtime dependencies, components for Angular, React, Vue, Svelte, Solid, Preact and Web Components – and sorting, filtering, selection, editing, tree tables, row grouping, pivot tables, master/detail and Excel export included.

npm i @guiexpert/table
  • MIT – free for commercial use
  • 0 runtime dependencies
  • 8 frameworks
  • Source on GitHub
Live · 1,000,000 orders – cells in the DOM – fps

Scroll in both directions, drag to select a range, copy it with Ctrl/⌘ + C. “Order” and “Total” stay fixed. Every value is computed when its cell becomes visible.

Why GuiExpert Table

A lean data grid with everything included – and an honest view of where others go further.

  • Free – really

    Every current release is MIT licensed, also for commercial use. No licence key, no watermark, no paid tier for Excel export, range selection or tree tables.

    Licence →
  • Not tied to a framework

    Eight integrations of one core. Models, renderers and options move with you from Angular to React or Svelte – you learn the grid once.

    Same code in every framework →
  • Nothing hidden

    No runtime dependencies, plain DOM elements, CSS variables and readable TypeScript on GitHub. You can debug, style and extend every part.

    Source on GitHub →
GuiExpert Tableag-Grid
Community
ag-Grid
Enterprise
LicenceMIT, free – also commerciallyMIT, freecommercial, per developer
Excel export✔ no extra library–✔
Range selection & clipboard✔–✔
Row grouping with aggregation✔ one factory, since 1.1.94–✔
Pivot tables✔ one factory, since 1.1.94–✔
Server-side row model– own area model–✔
Filter UI– your UI, a filter function✔✔
Accessibility (WAI-ARIA, keyboard)✔ since 1.1.91✔✔
Loading / no rows overlays✔ plain CSS, since 1.1.92✔✔
Save & restore state (layout, sorting, selection)✔ localStorage or your server, since 1.1.92✔✔
Row numbers✔ one flag, since 1.1.93–✔
Drag rows into order (mouse, touch, keyboard)✔ one flag, since 1.1.95✔✔
Fill handle & batch edit (collect, then save)✔ two options, since 1.1.96–✔
Master/detail (expandable detail rows, nested tables)✔ one option, since 1.1.97–✔
Right-to-left (Arabic, Hebrew, Persian)✔ one option, since 1.1.98✔✔
Undo / redo of edits– not yet (change sets with old values are there)✔✔
Paste from the clipboard– not yet–✔
Total rows & aggregation (sum, average …)✔ one option, since 1.1.94–✔
Calculated columns (valueGetter)✔ sort, filter, totals and Excel included, since 1.1.95✔✔
Formulas typed by users✔ own parser, no eval, since 1.1.95–✔
Show values as (% of total, running total, rank)✔ one option, since 1.1.95–✔
Spreadsheet cell references (A1) & formula editor– fields of the row, your input field–✔
FrameworksAngular 14 – 22, React, Vue, Svelte, Solid, Preact, Web Component, JSReact, Angular, Vue, JSReact, Angular, Vue, JS
Runtime dependenciesnone––

Rule of thumb: need a drag & drop group panel or pivot field list, spreadsheet-style cell formulas with an in-cell formula editor, or a server-side row model off the shelf? ag-Grid Enterprise is further today. Need large data, export, selection and full control over HTML and CSS – in any framework, without licence costs? That is what GuiExpert Table is for.

As of October 2026, based on ag-grid.com (Community vs. Enterprise, Licensing) – check the current terms before you decide. More in chapter 3 of the training.

Everything included

Every feature is part of the MIT-licensed core – in every framework. New in October: twelve features with code →

Fast at any size

Virtual scrolling in both directions: only visible rows and columns are in the DOM. The rendering cost depends on the viewport, not on your data.

See 2 million rows →

One core, every framework

Angular 14 – 22, React, Vue 3, Svelte 4 / 5, Solid, Preact, Web Component and plain JavaScript – the same model, options and API everywhere.

Get started →

Flexible models

Flat and tree tables, grouped headers, total rows that follow filter and sorting (sum, average, count …), rowspan and colspan, fixed columns on both sides, row numbers like in a spreadsheet – or a model of your own that computes values on demand.

The table model →

Data tools built in

Sorting with own comparators, filtering with your own UI, cell, row, column and range selection, row grouping with totals per group, pivot tables with subtotals and totals, calculated columns and formulas ("[price] * [quantity]", shares of the total, running totals, ranks), master/detail with nested tables, the sum of the selected cells for a status bar, clipboard and Excel export, loading and "no rows" overlays – without an extra library.

Sorting, filtering, export →

Accessible and editable

A WAI-ARIA grid for screen readers and full keyboard navigation, inline editing with text and select editors, a fill handle and batch edit (collect changes, then save), resizable and movable columns, rows dragged into order (mouse, touch or Ctrl+Alt+↑/↓), live updates – and a table that remembers its layout, sorting and selection, in localStorage or on your server.

Accessibility and editing →

Your look

Cell renderers and framework components in cells, heatmaps, CSS variables, light and dark themes, right-to-left for Arabic and Hebrew with one option – full control over HTML and CSS.

Renderers and theming →

What's new

Twelve features in October 2026 – 6 of them are Enterprise features at ag-Grid.

Get started

One model, one component, a container with a height – the same table in every framework.

npm i @guiexpert/table @guiexpert/react-table

OrderTable.tsx
import { GuiexpertTable } from "@guiexpert/react-table";
import { GeMouseEvent, TableFactory, TableOptions } from "@guiexpert/table";
import "@guiexpert/table/css/main.css";
import { orders } from "./orders";
// create model and options once – a new object rebuilds the table
const tableModel = TableFactory.createTableModel({
rows: orders,
properties: ["id", "customer", "city", "total"]
});
const tableOptions = new TableOptions();
export function OrderTable() {
return (
<div style={{ height: 500 }}>
<GuiexpertTable
tableModel={tableModel}
tableOptions={tableOptions}
mouseClicked={(evt: GeMouseEvent) => console.info("row", evt.rowIndex)} />
</div>
);
}

orders is any array of objects. Solid and Preact work like React – see the training.

More than text in a cell

A cell renderer is one function that receives the cell's element: box plots, sparklines, progress bars, icons – or a component of your framework.

Renderers run only for visible cells, so rich content costs the same at 100 rows as at a million. Sorting, filtering, copying and Excel export still work on the raw values.

The same model drives header groups, tree tables, rowspans and footers with totals. The demo above recalculates and repaints its cells many times per second.

Showcase

Complete examples – master/detail, pivot tables, row grouping, formulas, a fill handle, right-to-left, heatmaps, trees and timetables. Run them in the browser and read their source.