Infinite Table vs Glide Data Grid

Glide Data Grid draws cells on a canvas and leaves sorting and filtering to you. Infinite Table renders DOM cells and has data operations built in.

Facts last verified on November 11, 2026, with a source link for each one.

TL;DR

Glide Data Grid is a fast, MIT-licensed grid that renders on an HTML canvas. It scrolls smoothly through millions of rows and has spreadsheet-like interaction: range selection, copy and paste, a fill handle. Sorting, filtering, grouping and server data are left to your code, and its latest stable release is from February 2024.

Infinite Table renders regular DOM cells, so cells can hold any React component, and it has sorting, filtering, grouping, pivoting, tree data, master-detail and lazy loading built in, with zero runtime dependencies. It is free to use with a footer.

When to choose which

Choose Glide Data Grid if

  • You need canvas rendering for very large grids with simple cells.
  • You want spreadsheet-style range selection, copy and paste, and a fill handle.
  • You want an MIT license with no footer.

Choose Infinite Table if

  • You need sorting, filtering, grouping or pivoting built in.
  • Your cells render React components: buttons, links, inputs, charts.
  • You load data from a server as the user scrolls.
  • You want a grid that is actively released.

Features

22 of the 30 features below are built into Infinite Table, every one in the free package. Glide Data Grid has 10 built in, and 8 more partly or as headless logic, counting its most complete edition (Glide Data Grid). Each Glide Data Grid entry links to its documentation.

  • Built in
  • Partial / with limits
  • Logic only (headless)
  • Not available
  • Pro = needs that paid edition
Features of Infinite Table and Glide Data Grid, by edition
FeatureInfinite TableFree with footer · $395 per developer per yearGlide Data GridMIT · Free
Rendering
Row virtualizationOnly the visible rows are rendered, out of the box.
Yessource
YesCanvas rendering, cells drawn on demand.source
Column virtualizationOnly the visible columns are rendered, out of the box.
Yessource
YesCanvas rendering, cells drawn on demand.source
Columns
Multi-column sortingBuilt-in sorting UI, including sorting by several columns.
Yessource
NoSorting is implemented in your data source.source
Column filtersBuilt-in filter UI: a filter row, header filters or a filter menu.
YesFilter row with operators, client-side or server-side.source
NoFiltering is implemented in your data source.source
Column resizingUsers drag to resize columns.
Yessource
Yessource
Column reorderingUsers drag and drop columns to reorder them.
Yessource
Yessource
Column pinningPin (freeze) columns to the left or right.
Yessource
PartialLeft side only.source
Column groupsMulti-level, grouped column headers.
Yessource
PartialOne level of group headers.source
Column menuA built-in column header menu (sort, hide, pin...).
Yessource
Logic onlyA menu indicator and click event; you render the menu.source
Grouping and analysis
Row groupingGroup rows by one or more columns, with expand and collapse.
Yessource
No
AggregationsAggregated values (sum, average...) for groups or totals.
Yessource
No
PivotingPivot rows into dynamically generated columns.
Yessource
No
Tree dataHierarchical (tree) rows.
Yessource
No
Master-detailExpandable detail rows with custom content or a nested grid.
Yessource
No
Server data
Lazy loadingLoad rows from a server in batches as the user scrolls.
Yessource
Logic onlyCells are requested on demand; you load the data.source
Server-side sort, filter and groupBuilt-in support for sorting, filtering and grouping on the server.
YesSorting, filtering, grouping and pivoting can all run on the server.source
No
Pagination UIA built-in pager.
NoNo pager UI. Live pagination loads the next page as you scroll.source
No
Editing and interaction
Cell editingInline cell editing with built-in editors.
Yessource
Yessource
Row selectionSelect rows, including checkbox selection.
Yessource
Yessource
Cell selectionSelect multiple cells or ranges of cells.
Yessource
Yessource
Keyboard navigationMove between cells with the keyboard.
Yessource
Yessource
Context menuA built-in cell or row context menu.
Yessource
Logic onlyContext menu events; you render the menu.source
Row drag and dropReorder rows by dragging them.
No
Yessource
Export and charts
ClipboardCopy (and paste) cells, built in.
No
Yessource
CSV exportBuilt-in export to CSV.
No
No
Excel exportBuilt-in export to Excel (.xlsx).
No
No
Integrated chartsChart grid data from inside the grid.
NoCells can render any component, for example sparklines.source
PartialIn-cell sparklines only.source
Styling and accessibility
Theming with CSS variablesTheme the grid through CSS custom properties or design tokens.
Yessource
PartialThemed mainly through a JavaScript theme object.source
Documented accessibilityARIA roles and screen reader support, documented by the vendor.
NoKeyboard navigation is built in, but ARIA roles and screen reader support are not documented.
PartialThe FAQ says it works with screen readers, with limited testing.source
Right-to-leftRight-to-left layout support.
No
No

Side by side

Live side-by-side demo: coming soonScrolling a million rows in both grids. The same large dataset in Glide Data Grid (canvas) and Infinite Table (DOM).Until then, try the full Infinite Table demo or see the benchmark.

Licensing and pricing

List prices as published by each vendor, in US dollars. Follow the source links for the full terms.

Editions, licenses and prices
EditionLicenseList priceConditionsDeployment
Infinite TableCommercial (EULA)$395 per developer per yearVolume discounts: 5% from 3 developers, 10% from 5, 15% from 10. For 20 or more developers, email us.sourceEvery feature is free to use, in any product, as long as the "Powered by Infinite Table" footer stays visible. A license removes the footer and adds email support.Development licenses only: no deployment, application or SaaS licenses.
Glide Data GridMITFreesourceMIT: free for any use.None (MIT).

Bundle size and dependencies

Every dependency is code you ship and a package you have to trust and keep updated. Infinite Table has none.

Bundle size and dependencies
PackageJS, min + gzipCSS, min + gzipRuntime dependenciesFrom other publishers
Infinite Table for React@infinite-table/infinite-react@10.1.4145 kB5.7 kB00
Infinite Table for Vue@infinite-table/infinite-vue@10.1.4126 kB5.4 kB00
Glide Data Grid@glideapps/glide-data-grid@6.0.3108 kB2.3 kB81
list@babel/code-frame@7.29.7, @babel/compat-data@7.29.7, @babel/core@7.29.13, @babel/generator@7.29.13, @babel/helper-compilation-targets@7.29.13, @babel/helper-globals@7.29.7, @babel/helper-module-imports@7.29.7, @babel/helper-module-transforms@7.29.13, @babel/helper-plugin-utils@7.29.7, @babel/helper-string-parser@7.29.13, @babel/helper-validator-identifier@7.29.7, @babel/helper-validator-option@7.29.7, @babel/helpers@7.29.13, @babel/parser@7.29.13, @babel/plugin-proposal-export-namespace-from@7.18.9, @babel/plugin-syntax-dynamic-import@7.8.3, @babel/plugin-syntax-export-namespace-from@7.8.3, @babel/plugin-transform-modules-commonjs@7.29.7, @babel/template@7.29.7, @babel/traverse@7.29.13, @babel/types@7.29.11, @emotion/is-prop-valid@1.4.0, @emotion/memoize@0.9.0, @jridgewell/gen-mapping@0.3.13, @jridgewell/remapping@2.3.5, @jridgewell/resolve-uri@3.1.2, @jridgewell/sourcemap-codec@1.6.0, @jridgewell/trace-mapping@0.3.31, @linaria/core@4.5.4, @linaria/logger@4.5.0, @linaria/react@4.5.4, @linaria/tags@4.5.4, @linaria/utils@4.5.3, babel-merge@3.0.0, balanced-match@1.0.2, baseline-browser-mapping@2.11.35, brace-expansion@2.1.8, browserslist@4.29.5, caniuse-lite@1.0.30001826, canvas-hypertxt@1.0.3, classnames@2.5.1, convert-source-map@2.0.0, debug@4.4.3, deepmerge@2.2.1, electron-to-chromium@1.5.481, escalade@3.2.0, find-up@5.0.0, gensync@1.0.0-beta.2, html-element-attributes@1.3.1, is-extendable@1.0.1, is-plain-object@2.0.4, isobject@3.0.1, js-tokens@4.0.0, jsesc@3.1.0, json5@2.2.3, locate-path@6.0.0, lodash@4.18.1, loose-envify@1.4.0, lru-cache@5.1.1, marked@4.3.0, minimatch@9.0.9, ms@2.1.3, node-releases@2.0.63, object-assign@4.1.1, object.omit@3.0.0, p-limit@3.1.0, p-locate@5.0.0, path-exists@4.0.0, picocolors@1.1.1, prop-types@15.8.1, react-easy-swipe@0.0.21, react-html-attributes@1.4.6, react-is@16.13.1, react-number-format@5.4.5, react-responsive-carousel@3.2.23, semver@6.3.2, ts-invariant@0.10.3, tslib@2.9.1, update-browserslist-db@1.3.4, yallist@3.1.1, yocto-queue@0.1.0
81

Measured on November 11, 2026 with the latest versions on npm. Runtime dependencies: every package that npm install adds besides the grid's own packages and the framework, including required peer dependencies. JS / CSS: esbuild 0.25.10 bundle of the minimal getting-started usage, minified, React or Vue left out, gzip level 9 (kB = 1,000 bytes). Fonts and images are not counted. Numbers include required peers such as a design system, so they are lower if your app already ships those. The measurement script is open source: run it to reproduce or update these numbers.

Framework support

Supported frameworks
FrameworkInfinite TablesourceGlide Data Gridsource
ReactYesYes
VueYesNo
  • Infinite Table: React 18+ (@infinite-table/infinite-react) and Vue 3.4+ (@infinite-table/infinite-vue), same features and version.

Migrating from Glide Data Grid

Glide asks you for each cell through getCellContent and leaves sorting to your data; Infinite Table takes your data and columns, and sorts it for you.

Glide Data Grid

import { DataEditor, GridCellKind } from '@glideapps/glide-data-grid';
import type { GridCell, GridColumn, Item } from '@glideapps/glide-data-grid';
import '@glideapps/glide-data-grid/dist/index.css';

type Car = { id: number; make: string; model: string; price: number };

const data: Car[] = [
  { id: 1, make: 'Tesla', model: 'Model Y', price: 64950 },
  { id: 2, make: 'Ford', model: 'F-Series', price: 33850 },
];

const columns: GridColumn[] = [
  { title: 'Make', id: 'make' },
  { title: 'Model', id: 'model', width: 200 },
  { title: 'Price', id: 'price' },
];
const keys = ['make', 'model', 'price'] as const;

// sorting is up to you: sort the data before giving it to the grid
const rows = [...data].sort((a, b) => a.make.localeCompare(b.make));

function getCellContent([col, row]: Item): GridCell {
  const value = String(rows[row][keys[col]]);
  return {
    kind: GridCellKind.Text,
    data: value,
    displayData: value,
    allowOverlay: false,
  };
}

export function Cars() {
  return (
    <DataEditor
      columns={columns}
      rows={rows.length}
      getCellContent={getCellContent}
      height={500}
    />
  );
}

Infinite Table

import { DataSource, InfiniteTable } from '@infinite-table/infinite-react';
import type { InfiniteTablePropColumns } from '@infinite-table/infinite-react';
import '@infinite-table/infinite-react/index.css';

type Car = { id: number; make: string; model: string; price: number };

const data: Car[] = [
  { id: 1, make: 'Tesla', model: 'Model Y', price: 64950 },
  { id: 2, make: 'Ford', model: 'F-Series', price: 33850 },
];

const columns: InfiniteTablePropColumns<Car> = {
  make: { field: 'make', header: 'Make' },
  model: { field: 'model', header: 'Model', defaultWidth: 200 },
  price: {
    field: 'price',
    header: 'Price',
    renderValue: ({ value }) => <b>{value}</b>,
  },
};

export function Cars() {
  return (
    <div style={{ height: 500, display: 'flex' }}>
      <DataSource<Car>
        primaryKey="id"
        data={data}
        defaultSortInfo={{ field: 'make', dir: 1 }}
      >
        <InfiniteTable<Car> columns={columns} />
      </DataSource>
    </div>

How Glide Data Grid concepts map to Infinite Table
Glide Data GridInfinite Table
columns (array) + getCellContentcolumns (an object keyed by column id) with field
titleheader
widthdefaultWidth, or the columnSizing prop
custom cells (canvas drawing)renderValue or render (React components)
sorting your data yourselfdefaultSortInfo, sortInfo on <DataSource>
onVisibleRegionChanged + your fetcha data function on <DataSource>, with lazyLoad

What Glide Data Grid does well

  • Canvas rendering that scales to millions of rows, with cells drawn on demand. source
  • Very fast, smooth native scrolling. source
  • Fully custom cell drawing, plus many built-in cell types. source
  • Spreadsheet-style interaction: multi-range selection, copy and paste, a fill handle. source
  • MIT-licensed, with TypeScript types, variable row heights and merged cells. source

The latest stable release is 6.0.3 (February 2024); newer versions are published as alphas. source

FAQ

Does Glide Data Grid sort and filter?

Glide's FAQ says filtering and sorting are something you implement in your data source. Infinite Table sorts and filters built in, on the client or the server.

Is canvas rendering faster than DOM rendering?

Canvas rendering can draw very large grids quickly, and Glide scrolls smoothly. DOM rendering lets cells hold any React component and works with browser features such as text selection and find. Infinite Table virtualizes rows and columns, so it only renders the cells you see.

Is Infinite Table free to use?

Yes. Every feature is free to use, in any product and in production, as long as the "Powered by Infinite Table" footer stays visible. A license removes the footer and adds email support: $395 per developer per year, with volume discounts and no deployment or application licenses. See pricing.

How many dependencies does Glide Data Grid have, compared to Infinite Table?

Infinite Table has 0 runtime dependencies: installing it adds one package. Glide Data Grid adds 81 (81 from other publishers), counting required peer dependencies but not React. Measured on November 11, 2026 with the latest versions on npm.

How big is Glide Data Grid compared to Infinite Table?

Bundling the minimal getting-started usage with esbuild, minified and gzipped, without React: Infinite Table 145 kB of JavaScript, Glide Data Grid 108 kB. CSS is measured separately; the table above has both.

Try Infinite Table

npm i @infinite-table/infinite-react for React, or npm i @infinite-table/infinite-vue for Vue. Every feature is in the package.

Other comparisons

Sources

Sources and corrections

Every statement about another product links to the vendor's own documentation, pricing or license page. Glide Data Grid facts were last verified on November 11, 2026. Prices are list prices as published; taxes, discounts and quotes can differ. Products change quickly, so please check the vendor's site before you buy.

Spotted something wrong or out of date? We'll fix it: open a correction issue, edit the data on GitHub or email us.

Official links for Glide Data Grid: website, docs, license, repository.