#13353·handsontable

Handsontable 18.1.0 is here!

Author: GreenFluxCreated Sep 2, 2026Updated Sep 2, 2026
LabelsAnnouncement

Handsontable 18.0.0 rebuilt the foundation: a TypeScript core, a rewritten rendering engine, and a new layout system. Handsontable 18.1.0 is where that investment pays off. Loading a 100,000-row grid now takes about a tenth of the memory it did in 18.0, the grid runs inside Shadow DOM — including Salesforce Lightning Web Components — and a set of editing and selection features that used to need custom code now ship built in.

This is a minor release and removes no public API. A few behavior changes deserve a look before upgrading — most notably, a missing or invalid license key now blocks the grid instead of showing a notice below it. The Migration guide (18.0 → 18.1) covers all of them.

Faster and lighter on large datasets

The largest share of this release — more than twenty changes — went into how the grid behaves at scale. Measured against 17.1.0 with our open-source benchmark suite:

  • Up to 10× less memory. Sorting 100,000 rows drops from 1,338 MB of JS heap to 126 MB, with similar reductions across the filtering and scrolling tests. Handsontable now has the smallest memory footprint in 12 of the 13 tests in the suite.
  • A million rows. Grids of 500,000 and 1,000,000 rows, which previously failed with out-of-memory errors, now render and scroll at a steady ~30 FPS — the same frame rate the grid holds at 10,000 rows.
  • Faster operations. Sorting 100,000 rows is 2.1× faster, filtering 2.5× faster, cell updates about 3× faster, and horizontal scrolling 4× faster.

Behind the numbers: cell metadata storage was rewritten, and bulk operations — sorting, copying, pasting, filling, exporting, validation — no longer permanently cache settings for every cell they visit (the new getCellMetaTransient() method reads the effective cell configuration without caching it). The grid now renders in a single pass by predicting whether scrollbars will appear, and scrolling reuses more and rebuilds less: rows that stay in the viewport are kept in place while only the rows entering it render.

Shadow DOM and Salesforce Lightning

Handsontable now runs inside a Shadow DOM without anything arranged around it. The core library resolves mouse, focus, and clipboard events across the shadow boundary, and the grid creates its own stacking context in shadow-root embeddings, so frozen headers stay behind the host page's navigation. Cell editing, selection, keyboard navigation, and copy and paste behave as they do in the regular DOM.

We used Salesforce Lightning Web Components as the reference target, because Lightning Web Security adds a sandbox on top of the native Shadow DOM. Lit, Stencil, plain custom elements, and web-component design systems such as Material Web, Fluent, Spectrum, Carbon, and UI5 ask less of the library, so the same behavior holds there. If you already run the grid in a shadow root, the event and clipboard handlers in your wrapper can go.

Move and resize selections by dragging

Two new options bring spreadsheet-style selection gestures to the grid. With moveCells enabled, you can pick up a selected range by its border and drag it to a new location — the data moves with it. With selectionHandles, every selection shows a draggable handle at the midpoint of each edge, so you can grow or shrink the range by dragging instead of re-selecting it. Try the live demo →

A new cell type and new options

  • The new intl-datetime cell type edits values with the browser's native date-time picker and displays them in any locale through Intl.DateTimeFormat (the new dateTimeFormat option), with column sorting, filtering, and Excel export supported out of the box.
  • preserveNumericLiteral on the numeric cell type keeps exactly what you type in the editor, preserving trailing decimal zeros and large-number precision.
  • customBordersProgressive applies a large customBorders configuration in background batches, so the grid renders immediately, and the afterCustomBordersUpdate hook fires once every border is in place.
  • colorScheme and density set the color scheme and spacing of the grid without declaring a theme.
  • Persian joins the built-in translations, with full RTL support.

Every docs example is now a live demo

The "Open in StackBlitz" and "Edit in CodeSandbox" buttons in our documentation are gone, replaced by our own runner at demos.handsontable.com. Every example in every guide — 1,452 of them across five frameworks — opens as a live, editable demo, pinned to the exact Handsontable version the surrounding page documents. You can edit an example, share it with a permanent link, restyle it with the full theme token catalogue, or ask the built-in assistant to change it for you.

And more

Two fixes that React and TypeScript users have been asking for: <HotTable> and <HotColumn> props get autocomplete and type checking again, and hook callbacks typed through Events[hookName] or addHook now resolve to their real parameter types instead of any.

This release also brings more than 50 smaller improvements across the grid: open menus now follow the grid when a scrollable parent scrolls, merged cells stay whole through filtering, sorting, and collapsing rows, dragging a column header now moves the column even with sorting enabled, nested headers follow their columns when moved, the NestedRows plugin gains a public collapse/expand API, and pasted HTML is sanitized on every surface.

See the full Changelog for details. Read the blog →

Source: handsontable/handsontable