Infinite Table vs react-data-grid

react-data-grid is a small, dependency-free MIT grid that leaves data operations to you. Infinite Table, also dependency-free, has them built in.

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

TL;DR

react-data-grid is lean and well made: zero dependencies, row and column virtualization, frozen columns, column groups, row grouping, editing, CSS-variable theming, accessibility and RTL. It shows sort state but leaves sorting, filtering and loading data to your code, and its npm latest release is a 7.0 beta (the last stable release is from 2019).

Infinite Table is the same size class in dependencies (zero), and adds built-in sorting, filtering, aggregations, pivoting, tree data, master-detail, lazy loading, cell selection and context menus. It is free to use with a footer.

When to choose which

Choose react-data-grid if

  • You want the smallest bundle and do your own data processing.
  • You want an MIT license with no footer.
  • You need documented accessibility or right-to-left layouts.

Choose Infinite Table if

  • You want sorting, filtering and aggregations done for you, on the client or the server.
  • You need pivoting, tree data, master-detail or lazy loading.
  • You want a stable release line.

Features

22 of the 30 features below are built into Infinite Table, every one in the free package. react-data-grid has 12 built in, and 5 more partly or as headless logic, counting its most complete edition (react-data-grid). Each react-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 react-data-grid, by edition
FeatureInfinite TableFree with footer · $395 per developer per yearreact-data-gridMIT · Free
Rendering
Row virtualizationOnly the visible rows are rendered, out of the box.
Yessource
Yessource
Column virtualizationOnly the visible columns are rendered, out of the box.
Yessource
Yessource
Columns
Multi-column sortingBuilt-in sorting UI, including sorting by several columns.
Yessource
PartialSortable headers and sort state; you sort the rows.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
NoThe demos build header filters in app code.
Column resizingUsers drag to resize columns.
Yessource
Yessource
Column reorderingUsers drag and drop columns to reorder them.
Yessource
PartialDrag events; you reorder the columns.source
Column pinningPin (freeze) columns to the left or right.
Yessource
Yessource
Column groupsMulti-level, grouped column headers.
Yessource
Yessource
Column menuA built-in column header menu (sort, hide, pin...).
Yessource
No
Grouping and analysis
Row groupingGroup rows by one or more columns, with expand and collapse.
Yessource
YesWith the TreeDataGrid component.source
AggregationsAggregated values (sum, average...) for groups or totals.
Yessource
PartialSummary rows show values you compute.source
PivotingPivot rows into dynamically generated columns.
Yessource
No
Tree dataHierarchical (tree) rows.
Yessource
NoTreeDataGrid groups by column values; the tree demo is app code.
Master-detailExpandable detail rows with custom content or a nested grid.
Yessource
NoThe demo builds it in app code.
Server data
Lazy loadingLoad rows from a server in batches as the user scrolls.
Yessource
NoThe infinite scrolling demo is app code.
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
No
Keyboard navigationMove between cells with the keyboard.
Yessource
Yessource
Context menuA built-in cell or row context menu.
Yessource
Logic onlyA context menu event; you render the menu.source
Row drag and dropReorder rows by dragging them.
No
NoThe demo implements it in app code.
Export and charts
ClipboardCopy (and paste) cells, built in.
No
PartialCopy and paste of the active cell, through callbacks.source
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
No
Styling and accessibility
Theming with CSS variablesTheme the grid through CSS custom properties or design tokens.
Yessource
Yessource
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.
Yessource
Right-to-leftRight-to-left layout support.
No
Yessource

Side by side

Live side-by-side demo: coming soonSorting and filtering in both grids. The same rows sorted and filtered in react-data-grid (with app code) and in Infinite Table.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.
react-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
react-data-gridreact-data-grid@7.0.0-beta.6423.9 kB2.2 kB00

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 Tablesourcereact-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 react-data-grid

react-data-grid reports sort changes and expects you to sort the rows; Infinite Table sorts for you.

react-data-grid

import { useMemo, useState } from 'react';
import { DataGrid } from 'react-data-grid';
import type { Column, SortColumn } from 'react-data-grid';
import 'react-data-grid/lib/styles.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: Column<Car>[] = [
  { key: 'make', name: 'Make', sortable: true },
  { key: 'model', name: 'Model', width: 200, sortable: true },
  { key: 'price', name: 'Price', renderCell: ({ row }) => <b>{row.price}</b> },
];

export function Cars() {
  const [sortColumns, setSortColumns] = useState<readonly SortColumn[]>([
    { columnKey: 'make', direction: 'ASC' },
  ]);

  // the grid shows the sort state; sorting the rows is up to you
  const rows = useMemo(() => {
    const [sort] = sortColumns;
    if (!sort) return data;
    const key = sort.columnKey as keyof Car;
    const sorted = [...data].sort((a, b) =>
      String(a[key]).localeCompare(String(b[key]), undefined, { numeric: true }),
    );
    return sort.direction === 'DESC' ? sorted.reverse() : sorted;
  }, [sortColumns]);

  return (
    <DataGrid
      columns={columns}
      rows={rows}
      sortColumns={sortColumns}
      onSortColumnsChange={setSortColumns}
      style={{ 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 react-data-grid concepts map to Infinite Table
react-data-gridInfinite Table
columns with keycolumns (an object keyed by column id) with field
nameheader
widthdefaultWidth, or the columnSizing prop
renderCellrenderValue or render
sortColumns + sorting the rows yourselfdefaultSortInfo, sortInfo on <DataSource>
<TreeDataGrid groupBy>defaultGroupBy, groupBy on <DataSource>
frozencolumnPinning

What react-data-grid does well

  • Small and dependency-free, with tree shaking. source
  • Row and column virtualization. source
  • A modern React fit: ESM, server-side rendering support, strict TypeScript types. source
  • Light and dark mode out of the box, themed with CSS variables. source
  • Accessible: ARIA grid semantics, keyboard support and right-to-left layouts. source

The npm "latest" release is a 7.0 beta; the last stable release is 6.1.0, from 2019. source

FAQ

Is react-data-grid stable?

Its npm latest tag points to a 7.0 beta, and the last stable release, 6.1.0, is from 2019. The project is actively developed on GitHub, and API names still change between betas.

Does react-data-grid sort and filter the rows?

It shows sortable headers and reports the sort state, but sorting the rows is up to you, and filtering is built in app code in its demos. Infinite Table sorts and filters built in.

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 react-data-grid have, compared to Infinite Table?

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

How big is react-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, react-data-grid 23.9 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. react-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 react-data-grid: website, docs, license, repository.