Infinite Table vs Handsontable

Handsontable is a spreadsheet-like grid with formulas and Excel-style editing. Infinite Table is a data grid for exploring large datasets, with grouping, pivoting and server-side loading.

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

TL;DR

Handsontable is built to feel like a spreadsheet: Excel-like shortcuts, a fill handle, merged cells, comments, undo and redo, validators and formulas through HyperFormula. It also has native Excel export and thorough accessibility documentation. If your users edit data the way they would in Excel, it is a strong fit.

Infinite Table is built for reading and analysing data: row grouping with aggregations, pivoting, tree data, master-detail and lazy loading from a server, with every piece of state exposed as a prop. Handsontable doesn't group rows by value, pivot or render detail rows, and its server-side data loads one page at a time.

The licenses differ a lot. Handsontable's free license is for non-commercial use only, and commercial licenses are priced per end user, through sales. Infinite Table is free for commercial use with a footer, or $395 per developer per year without it.

When to choose which

Choose Handsontable if

  • Your users need a spreadsheet: formulas, a fill handle, merged cells, comments, undo and redo.
  • You need Excel and CSV export, or clipboard copy and paste, built in.
  • You need documented accessibility (Handsontable publishes a WCAG 2.2 conformance report) or right-to-left layouts.
  • You use Angular or plain JavaScript as well as React and Vue.

Choose Infinite Table if

  • You need row grouping with aggregations, pivoting or master-detail.
  • You load large datasets from a server in batches as the user scrolls.
  • You want to use the grid commercially for free (with a footer), or at a published per-developer price.
  • You want a declarative API: columns, sorting, grouping and selection as controlled or uncontrolled props.

Features

22 of the 30 features below are built into Infinite Table, every one in the free package. Handsontable has 20 built in, and 6 more partly or as headless logic, counting its most complete edition (Non-commercial and evaluation license). Each Handsontable 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 Handsontable, by edition
FeatureInfinite TableFree with footer · $395 per developer per yearHandsontableSame features in every edition
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
Yessource
Column filtersBuilt-in filter UI: a filter row, header filters or a filter menu.
YesFilter row with operators, client-side or server-side.source
YesExcel-like filters in the column menu.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
PartialColumns freeze at the start edge only.source
Column groupsMulti-level, grouped column headers.
Yessource
YesNested headers, optionally collapsible.source
Column menuA built-in column header menu (sort, hide, pin...).
Yessource
Yessource
Grouping and analysis
Row groupingGroup rows by one or more columns, with expand and collapse.
Yessource
NoNo grouping by column value; the NestedRows plugin shows parent and child rows from nested data.source
AggregationsAggregated values (sum, average...) for groups or totals.
Yessource
PartialThe ColumnSummary plugin writes totals into cells you choose; no group or footer rows.source
PivotingPivot rows into dynamically generated columns.
Yessource
No
Tree dataHierarchical (tree) rows.
Yessource
PartialNestedRows plugin; not supported together with column filters or sorting.source
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
PartialThe DataProvider plugin (17.1+) loads one page at a time with the pager; loading on scroll is not documented.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
PartialDataProvider sends paging, single-column sorting and filters to your server; no grouping.source
Pagination UIA built-in pager.
NoNo pager UI. Live pagination loads the next page as you scroll.source
Yessource
Editing and interaction
Cell editingInline cell editing with built-in editors.
Yessource
Yessource
Row selectionSelect rows, including checkbox selection.
Yessource
PartialSelect whole rows from the row headers; no checkbox selection column.source
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
Yessource
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
Yessource
Excel exportBuilt-in export to Excel (.xlsx).
No
YesSince 17.1; needs the ExcelJS library as a peer dependency.source
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 soonEditing, then grouping, the same dataset. Edit cells in both grids, then group and aggregate the same rows 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.
Non-commercial and evaluation licenseProprietary (non-commercial)FreesourceNon-commercial use only: education, research, personal use, testing and demos. In a business it covers evaluation, not production.–
Handsontable commercial licenseCommercialContact sales (no public list price)Priced by the number of end users of your applications, as a subscription or a perpetual license, with a support plan.source45-day trial.Covers internal and customer-facing apps. SaaS, OEM and redistribution terms are not published.
Handsontable + HyperFormula bundleCommercialContact sales (no public list price)Adds a commercial license for the HyperFormula formula engine (otherwise GPLv3).source––

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
Handsontable@handsontable/react-wrapper@18.1.2 + handsontable@18.1.2355 kB22.8 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 TablesourceHandsontablesource
ReactYesYes
VueYesYes
AngularNoYes
JavaScriptNoYes
  • Infinite Table: React 18+ (@infinite-table/infinite-react) and Vue 3.4+ (@infinite-table/infinite-vue), same features and version.

Key differences

Spreadsheet vs data grid

Handsontable's model is a sheet: rows are identified by their position, and sorting, filtering and moving are stored as index changes. Formulas, validators and cell meta data are first class.

Infinite Table's model is a dataset: rows have a primary key, and <DataSource> derives sorted, filtered, grouped and pivoted views from your data, locally or on the server.

Migrating from Handsontable

A Handsontable grid with three columns and an initial sort, next to the same grid in Infinite Table.

Handsontable

import { HotTable, HotColumn } from '@handsontable/react-wrapper';
import { registerAllModules } from 'handsontable/registry';
import 'handsontable/styles/handsontable.min.css';
import 'handsontable/styles/ht-theme-main.min.css';

registerAllModules();

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 },
];

export function Cars() {
  return (
    <HotTable
      themeName="ht-theme-main"
      data={data}
      colHeaders={true}
      columnSorting={{ initialConfig: { column: 0, sortOrder: 'asc' } }}
      height={500}
      licenseKey="non-commercial-and-evaluation"
    >
      <HotColumn data="make" title="Make" />
      <HotColumn data="model" title="Model" width={200} />
      <HotColumn data="price" title="Price" type="numeric" />
    </HotTable>
  );
}

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 Handsontable concepts map to Infinite Table
HandsontableInfinite Table
<HotColumn data="make"> or columnscolumns (an object keyed by column id) with field
title, colHeadersheader
width, colWidthsdefaultWidth, defaultFlex, or the columnSizing prop
rendererrenderValue or render
rows identified by indexprimaryKey on <DataSource>
columnSorting.initialConfigdefaultSortInfo, sortInfo on <DataSource>
NestedRows (__children)<TreeDataSource> and <TreeGrid>
DataProvider plugina data function on <DataSource>, with lazyLoad
licenseKeylicenseKey

What Handsontable does well

  • It looks and feels like a spreadsheet: Excel-style shortcuts, a fill handle, merged cells, comments and undo/redo. source
  • Excel-compatible formulas through the HyperFormula engine (about 400 functions). source
  • A deep editing toolkit: many cell types and editors, sync and async validators, custom React editors. source
  • Native .xlsx export that keeps data types, styles, merged cells and frozen panes, plus CSV export. source
  • Strong accessibility documentation: it targets WCAG 2.2 A/AA and publishes a conformance report. source
  • Zero runtime dependencies in the current release, too. source

FAQ

Is Handsontable free for commercial use?

No. Its free license key, non-commercial-and-evaluation, covers non-commercial use (education, research, personal use, testing and demos); in a business it only covers evaluation. Commercial licenses are sold through sales and priced by the number of end users. Infinite Table can be used commercially for free, with a "Powered by Infinite Table" footer.

Does Infinite Table support formulas like Handsontable?

No. Infinite Table has no formula engine. Handsontable integrates HyperFormula, with about 400 Excel-compatible functions. In Infinite Table you compute values with a column valueGetter, or in your data.

Does Handsontable support row grouping and pivoting?

Handsontable's docs don't describe grouping rows by column value or pivoting. Its NestedRows plugin shows parent and child rows from nested data. Infinite Table has row grouping, aggregations and pivoting built in.

Is Infinite Table good for spreadsheet-style editing?

It has inline editing, Excel-like editing (start typing to edit) and cell selection, but no fill handle, formulas, undo and redo, or clipboard paste. For a spreadsheet experience, Handsontable is the better fit.

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 Handsontable have, compared to Infinite Table?

Infinite Table has 0 runtime dependencies: installing it adds one package. Handsontable 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 Handsontable compared to Infinite Table?

Bundling the minimal getting-started usage with esbuild, minified and gzipped, without React: Infinite Table 145 kB of JavaScript, Handsontable 355 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. Handsontable 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 Handsontable: website, docs, pricing, license, repository.