Skip to content

Releases: handsontable/handsontable

17.1.0-rc

22 Apr 11:54

Choose a tag to compare

17.1.0-rc Pre-release
Pre-release

Added

  • Added a hit area for dropdown menu and collapsible buttons #12070
  • Added rowspan support to the NestedHeaders plugin, allowing column headers to span multiple header rows. #191
  • Added the DataProvider plugin and dataProvider table option for server-side row loading and mutations. #12147
  • Added XLSX export support to the ExportFile plugin #12166
  • Added build weight comparison tables to the Modules guide, showing the minified and gzip size added by each optional module when imported on top of handsontable/base. #12262
  • Added Notification plugin for non-blocking toast notifications. #12299
  • Added long-press gesture detection on touch devices to open the context menu. #12306
  • Added dedicated paginationButton* theme tokens so pagination navigation button colors can be customized independently via the theme builder. #12317
  • Added dedicated paginationButton* theme tokens so pagination navigation button colors can be customized independently for default, hover, focus, and disabled states via the theme builder. #12404
  • Added rowspan support to the NestedHeaders plugin, allowing column headers to span multiple header rows. #191

Changed

  • Added a frame-based e2e test wait helper and replaced selected hook test sleeps. #12161
  • Improve the rendering performance #12189
  • Change the columnHeaders property name to colHeaders in the exportFile plugin #12224
  • Improve rendering performance for fast scrollbar movements #12235

Fixed

  • Fixed an issue where the Nested Rows plugin was disabled after calling updateSettings with an empty data array. #10556
  • Fixed setSourceDataAtCell() updating parent rows instead of nested child rows when nestedRows is enabled. #10657
  • Fixed an issue where the stretchH: 'last' option would ignore the defined column width when the viewport was too narrow, causing the last column to shrink to 0px. #11761
  • Fixed a stack overflow error when pasting large datasets (50,000+ rows) by optimizing array operations in the HTML table parser. #11784
  • Fixed incorrect JSDoc type annotations for the modifyAutofillRange hook parameters. The parameters entireArea and startArea are now correctly documented as number[] (a flat 4-element array) instead of the generic Array type, and the @returns type annotation has been added. #11862
  • Fixed filter by value input performance degradation when searchMode: apply option is enabled. #12104
  • Fixed getCellMetaAtRow() to always return cell metadata in physical column order. #12109
  • Fixed the modifyAutofillRange hook type signature to match runtime tuple arguments and return value #12113
  • Fixed incorrect parsing of comma-grouped values in numeric cells #12114
  • Fixed comment editor positioning for merged cells #12115
  • Fixed the Filters plugin incorrectly applying filter conditions after columns were moved with the ManualColumnMove plugin. #11832
  • Fixed column resizing being misaligned and calculating incorrect widths when the grid container has a CSS transform: scale() applied. #11838
  • Fixed the stretchH: 'last' option ignoring the defined column width and shrinking the last column to 0px when the viewport was too narrow. #11761
  • Fixed HyperFormula errors when MultiSelect cells store array values. #12135
  • Fixed setSourceDataAtCell() updating a parent row instead of the intended nested child row when the nestedRows option was enabled. #10657
  • Fixed setDataAtRowProp() incorrectly canceling an active editor session when the programmatic update targeted a different cell in the same row. #4305
  • Fix ThemeBuilder false unknown token warning on initialization #12146
  • Prevent after scroll hooks from firing when axis position is unchanged #12151
  • Fixed six regressions related to rowspans in nested column headers. #12152
  • Fixed undo restore for mixed checkbox multi-selection delete. #12153
  • Fixed Ctrl+A selecting the entire grid instead of the comment text when the comment textarea was focused. #12193
  • Fixed columnHeaderHeight overriding the actual content height, causing overlay THEAD misalignment when header text wraps. #12198
  • Fixed selected fixed-column header alignment with data cells for fixedColumnsStart #12202
  • Fixed autofill over hidden columns when Formulas is enabled and hiddenColumns.copyPasteEnabled is false #12203
  • Fixed a one-pixel horizontal misalignment of the left pagination caret in the Pagination plugin. #2791
  • Fixed nested headers crash when sorting with disabled current highlight. #12211
  • Improved server-side data documentation structure and fixed disjunctionWithExtraCondition guard fallback in server filter utility examples. #12241
  • Fixed framework wrappers crashing when init-only settings (renderAllRows, renderAllColumns, layoutDirection, ariaTags) changed after initialization. #12242
  • Fixed an issue where currentRowClassName and currentColClassName could not be changed dynamically using updateSettings. #12247
  • Fixed column menu dropdown button styling when a filtered column header is also active #12253
  • Fixed an issue where rows with dataSchema default values (e.g., false for checkbox columns) were not recognized as empty by isEmptyRow and isEmptyCol, causing minSpareRows and minSpareCols to add infinite rows. #12254
  • Fixed autocomplete editor with strict mode and allowInvalid discarding typed value on click-away instead of saving it. #12285
  • Fixed incorrect JSDoc type annotations for the modifyAutofillRange hook's entireArea and startArea parameters, and added the missing @returns annotation. #11862
  • Fixed filter-by-value search by trimming leading and trailing spaces and treating whitespace-only input as an empty query. #12290
  • Fixed portal-based popups (e.g., date picker) closing immediately on touch devices (Android) due to outside-click detection not accounting for rootPortalElement. #12298
  • Fixed setDataAtRowProp ignoring the source parameter in array-form calls, causing beforeChange and afterChange hooks to always receive 'edit' instead of the provided source string. #12300
  • Fixed multiple Handsontable tables with shared HyperFormula engine and auto-sizing becoming unresponsive due to cross-table formula update interference. #12305
  • Fixed disableVisualSelection treating undefined as true instead of falling back to the default (false). #12307
  • Fixed incorrect return types for in some hooks #12309
  • Fixed multiselect overflow indicator not responding to chip padding token changes #12316
  • Fixed the headerRowBackgroundColor theme token having no visual effect on row headers. The rowHeaderOddBackgroundColor and rowHeaderEvenBackgroundColor tokens now derive from headerRowBackgroundColor by default, so customizing it ...
Read more

17.0.1

25 Mar 07:50

Choose a tag to compare

Fixed

  • Fix UndoRedo crash when nullified changes #12000
  • Fix UndoRedo beforeChange order #12001
  • Fixed a bug where the editor does not receive the user inputs #12042
  • Fixed scrollbar width calcualtion on Safari >=26. #12047
  • Added missing typings for Core #12048
  • Fixed rounded corners that may be applied in incorrect use cases #12052
  • Fixed undo/redo stack desync with formulas engine #12056
  • Fixed column width calculation for collapsed columns #12059
  • Fixed and issue with table backround overflow #12063
  • Fixed column header misalignment when nestedRow is enabled #12081
  • Fixed an issue with mobile select handles styles #12083
  • Improved clipboard processing after paste #12084
  • Fixed an issue with scrolling issue that occurs when preventOverflow is enabled #12086
  • Fixed date picker positioning near viewport edges #12087
  • Fixed an issue with main theme hover on menu icon background color #12159

17.0.1-rc

19 Mar 10:33

Choose a tag to compare

17.0.1-rc Pre-release
Pre-release

Fixed

  • Fix UndoRedo crash when nullified changes #12000
  • Fix UndoRedo beforeChange order #12001
  • Fixed a bug where the editor does not receive the user inputs #12042
  • Fixed scrollbar width calcualtion on Safari >=26. #12047
  • Added missing typings for Core #12048
  • Fixed rounded corners that may be applied in incorrect use cases #12052
  • Fixed undo/redo stack desync with formulas engine #12056
  • Fixed column width calculation for collapsed columns #12059
  • Fixed and issue with table backround overflow #12063
  • Fixed column header misalignment when nestedRow is enabled #12081
  • Fixed an issue with mobile select handles styles #12083
  • Improved clipboard processing after paste #12084
  • Fixed an issue with scrolling issue that occurs when preventOverflow is enabled #12086
  • Fixed date picker positioning near viewport edges #12087
  • Fixed an issue with main theme hover on menu icon background color #12159

17.0.0

09 Mar 08:57
53e0395

Choose a tag to compare

Added

  • Breaking change: Added the Theme API. #11950
  • Introduced a simple way to define custom editors using the new BaseEditor.factory method. #11899
  • Implemented a new MultiSelect cell type with a dedicated editor, renderer, and validator. #11981
  • Added support for Intl.NumberFormat options. #11997
  • Added support for Intl.DateTimeFormat options. #11999
  • Added a copy-as-Markdown button to the documentation pages. #12009
  • Added a new sanitizer table option. #12016
  • React: Introduced a simple way to define custom editors using the new ComponentEditor. #11978

Changed

  • Improved differentiation between Handsontable errors and other errors. #11780
  • Reverted the editors' updateChoicesList method type change. #11943
  • Added a hit area to the fill handle. #11952
  • Added a new parsePastedValue option to fix issues with pasting object-based values. #12020
  • Introduced a new publishing flow for versions 17.0.0 and above. #12028

Deprecated

  • Deprecated numbro.js for numeric formatting. Copy it to your project or replace it with the Intl.NumberFormat API. Migration guide
  • Deprecated Pikaday for date picking. Switch to native date input. Migration guide
  • Deprecated moment.js for date parsing and display. Replace it with the Intl.DateTimeFormat API. Migration guide
  • Deprecated DOMPurify as a built-in XSS sanitizer. Use the new sanitizer option or convert content to plain text. Migration guide
  • Deprecated core-js polyfills for ECMAScript features. Migration guide
  • Deprecated bundling HyperFormula as a Handsontable dependency. Starting from version 18.0, install and import it separately, then pass it to the Formulas plugin with licenseKey: 'internal-use'. Formula calculation

Removed

  • Breaking change: Removed deprecated wrapper packages for Angular, React, and Vue, the PersistentState plugin, and the legacy undo/redo methods. #12015
  • Breaking change: Removed core-js from dependencies. #12017
  • Breaking change: Removed the legacy CSS stylesheets (e.g. handsontable.full.min.css), which were the default styling prior to version 16. #11950
  • Removed the languages folder from git + updated the 17.0+ release workflow. #12049

Fixed

  • Fixed errors triggered by certain keyboard shortcuts. #11951
  • Fixed unwanted layout shifts caused by the editor. #11955
  • Fixed an issue with scrolling in Firefox. #11962
  • Fixed an issue with viewport scroll after calling loadData()/updateData(). #11985
  • Fixed a bug where the pasted value could not be changed. #11989
  • Fixed misalignment issues when using CSS transform: scale(). #11990
  • Fixed a bug that made it impossible to delete values from key/value-based autocomplete and dropdown cells. #12010
  • Fixed a Data Factory issue in filters that could return zero results even when matches exist. #12031
  • Changed the element type for focus catchers. #12032
  • Fixed incorrect scrollbar width calculation for scaled environments. #12035
  • Fixed and issue with column headers styles #12058
  • Angular: Fixed a problem with the Angular wrapper that broke builds done with a disabled skipLibCheck. #12091

17.0.0-rc

20 Feb 12:45

Choose a tag to compare

17.0.0-rc Pre-release
Pre-release

Added

  • Breaking change: Added the Theme API. #11950
  • Introduced a simple way to define custom editors using the new BaseEditor.factory method. #11899
  • Implemented a new MultiSelect cell type with a dedicated editor, renderer, and validator. #11981
  • Added support for Intl.NumberFormat options. #11997
  • Added support for Intl.DateTimeFormat options. #11999
  • Added a copy-as-Markdown button to the documentation pages. #12009
  • Added a new sanitizer table option. #12016
  • React: Introduced a simple way to define custom editors using the new ComponentEditor. #11978

Changed

  • Improved differentiation between Handsontable errors and other errors. #11780
  • Reverted the editors' updateChoicesList method type change. #11943
  • Added a hit area to the fill handle. #11952
  • Added a new parsePastedValue option to fix issues with pasting object-based values. #12020
  • Introduced a new publishing flow for versions 17.0.0 and above. #12028

Deprecated

  • Deprecated numbro.js for numeric formatting. Copy it to your project or replace it with the Intl.NumberFormat API. Migration guide
  • Deprecated Pikaday for date picking. Switch to native date input. Migration guide
  • Deprecated moment.js for date parsing and display. Replace it with the Intl.DateTimeFormat API. Migration guide
  • Deprecated DOMPurify as a built-in XSS sanitizer. Use the new sanitizer option or convert content to plain text. Migration guide
  • Deprecated core-js polyfills for ECMAScript features. Migration guide
  • Deprecated bundling HyperFormula as a Handsontable dependency. Starting from version 18.0, install and import it separately, then pass it to the Formulas plugin with licenseKey: 'internal-use'. Formula calculation

Removed

  • Breaking change: Removed deprecated wrapper packages for Angular, React, and Vue, the PersistentState plugin, and the legacy undo/redo methods. #12015
  • Breaking change: Removed core-js from dependencies. #12017
  • Breaking change: Removed the legacy CSS stylesheets (e.g. handsontable.full.min.css), which were the default styling prior to version 16. #11950
  • Removed the languages folder from git + updated the 17.0+ release workflow. #12049

Fixed

  • Fixed errors triggered by certain keyboard shortcuts. #11951
  • Fixed unwanted layout shifts caused by the editor. #11955
  • Fixed an issue with scrolling in Firefox. #11962
  • Fixed an issue with viewport scroll after calling loadData()/updateData(). #11985
  • Fixed a bug where the pasted value could not be changed. #11989
  • Fixed misalignment issues when using CSS transform: scale(). #11990
  • Fixed a bug that made it impossible to delete values from key/value-based autocomplete and dropdown cells. #12010
  • Fixed a Data Factory issue in filters that could return zero results even when matches exist. #12031
  • Changed the element type for focus catchers. #12032
  • Fixed incorrect scrollbar width calculation for scaled environments. #12035
  • Fixed and issue with column headers styles #12058
  • Angular: Fixed a problem with the Angular wrapper that broke builds done with a disabled skipLibCheck. #12091

16.2.0

25 Nov 09:13
16.2.0
1546024

Choose a tag to compare

Added

  • Improved focus management by introducing a focus scopes mechanism. #11804
  • Introduced an "auto" option for the roundFloat setting in the Column Summary plugin and ensured proper recalculation of endpoints after data updates. #11833
  • Added an Enter key handler and a new searchMode option to the Filters plugin. #11871
  • Implemented a style option for the Custom Borders plugin, enabling style customization. #11876
  • Introduced a new "dotted" border style to the Custom Borders plugin. #11877
  • Added the EmptyDataState plugin to improve UX when no data is available. #11879
  • Added a settings entry to the Handsontable exports. #11883
  • Added new global button CSS class names. #11896
  • Introduced minRowHeights as an alias for rowHeights for API consistency. #11898
  • Added a new template option to the Dialog plugin. #11902
  • Added new theme variables and implemented no-icons and icons-only style variants. #11913

Changed

  • Refined dropdown behavior when the input is empty - focus now remains on the input field. #11863
  • Improved how the Autocomplete and Dropdown editors respond to clicks outside the open editor. #11873
  • Reverted the editors' updateChoicesList method type change. #11943

Fixed

  • Fixed the datepicker icon size issue on iPad. #11860
  • Corrected header size rendering on iPad. #11861
  • Fixed an issue with header text size with collapsibleColumns enabled. #11864
  • Fixed an issue with an unwanted empty space on the right side of the table when using the modern themes. #11868
  • Fixed row misalignment for multi-line cell content. #11872
  • Improved column width calculations for checkbox-typed cells. #11891
  • Fixed a problem, where using minSpareRows would crash the table when configured alongside the Column Summary plugin. #11911
  • Fixed an issue preventing re-adding a previously removed hook callback. #11914
  • Stabilized the height of the first row when it's empty. #11918
  • Fixed a problem where resizing the window vertically did not resize the table. #11919
  • Fixed an issue where the dialog overlay could make the table unresponsive after rapid show/hide calls. #11925
  • Fixed an issue with TouchEvent on Firefox. #11928
  • React: Fixed an issue with Collapsible Columns being reset in React wrapper. #11923

Security

  • Updated dev dependencies to address high-severity vulnerabilities. #11895

For more information about this release, see:

16.1.1

23 Sep 12:08
16.1.1
300321d

Choose a tag to compare

Fixed

  • Fixed row misalignment when setting manualRowResize on an instance with autoRowSize enabled. #11849
  • Reverted the color variables change for the "main" theme. #11852
  • Fixed an error thrown when using autocomplete-typed cells with key/value sources alongside formulas. #11853

16.1.0

15 Sep 08:15
16.1.0
d7c34a3

Choose a tag to compare

Added

  • Introduced row pagination functionality. #11612
  • Introduced a Dialog plugin. #11754
  • Added support for object-based (key/value) source in Autocomplete and Dropdown editors, along with new valueGetter and valueSetter options. #11773
  • Added a new initialState configuration option. #11777
  • Introduced the Loading plugin. #11792
  • Added a new "classic" theme. #11790
  • Added a Deprecation policy page to the documentation.
  • Added a Long Term Support (LTS) page to the documentation.

Changed

  • Enabled focus navigation between multiple selection layers. #11756
  • Renamed the input element used as the internal focus catcher. #11770
  • Added a background color to the wtHolder element. #11797
  • Updated the CSS variables for the Pagination styles. #11820

Fixed

  • Fixed undo/redo functionality for cell types other than text. #11656
  • Fixed incorrect resizing behavior when auto-sizing rows or columns by double-clicking separators. #11671
  • Fixed mouse wheel zooming issues on Windows. #11680
  • Fixed autocomplete sorting and option highlighting issues. #11708
  • Fixed a missing touchend handler that prevented editors from opening on mobile devices. #11729
  • Fixed misalignment between rows and row headers when using autoRowSize. #11736
  • Fixed layout inconsistencies caused by browser zoom and scaling. #11739
  • Fixed an issue with the root-wrapper height calculation. #11769
  • Fixed a TypeError being thrown after undoing operations on nested row structures. #11793
  • Fixed rowHeights handling for merged cells. #11795
  • Fixed visual issues across themes. #11805
  • Fixed table misalignment after loading new data. #11809
  • Angular: Fixed the tree-shaking mechanism for the Angular wrapper (@handsontable/angular-wrapper). #11738
  • Fixed an issue with the deprecation warning being shown too often. #11819
  • Fixed an issue with the classic (legacy) theme deprecation warning being displayed for non-root instances. #11821
  • Fixed an issue with the table not rendering correctly when scrolling into extremely tall rows. #11825

Security

  • Resolved critical vulnerabilities reported by pnpm audit. #11798

Deprecated

  • Deprecated the legacy style (to be removed in version 17.0.0). #11790
  • Deprecated the PersistentState plugin (to be removed in version 17.0.0). #11835
  • Deprecated the @handsontable/vue wrapper. #11839

For more information about this release see:

16.0.1

10 Jul 12:06
61f9738

Choose a tag to compare

Fixed

  • Fixed a missing touchend handler that prevented the editor from opening on mobile devices. #11729

16.0.0

09 Jul 08:24
16.0.0
04254ec

Choose a tag to compare

Added

  • Breaking change: Added a focus outline to the context and dropdown menus. #11669
  • Improved Handsontable editor positioning. #11593
  • Added a second-click cell deselection feature. #11602
  • Added a new textEllipsis option. #11609
  • Added backward compatibility for the renamed CSS variables. #11676
  • Angular: Introduced a new Angular wrapper - @handsontable/angular-wrapper. #11511

Changed

  • Breaking change: Updated the CSS theme variables and added --ht-radio-* variables. #11470
  • Breaking change: Changed the modifyData hook to use visual indexes for both rows and columns. #11501

Fixed

  • Breaking change: Fixed an issue with custom border overlapping row headers. #11551
  • Breaking change: Fixed accessibility issues and introduced a new DOM structure with a wrapper and a portal. #11579
  • Fixed a problem with the dropdown editor having a horizontal scrollbar on Windows with fractional scaling applied. #11613
  • Fixed an issue with scrollbar styles on the Safari browser. #11614
  • Fixed the column filter behavior when adding new columns. #11616
  • Fixed an issue with the dropdown elements' colors. #11661
  • Angular: Fixed an error of this.hotInstance.getSettings(...).columns?.filter is not a function in angular-wrapper. #11695

For more information about this release see: