Skip to content

See the full history of changes made to Handsontable in each major, minor, and patch release.

17.0.1

Released on March 25th, 2026

For more information about this release, see:

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

Released on March 9th, 2026

For more information about this release, see:

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-in-handsontable'. 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

Released on November 25th, 2025

For more information about this release see:

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

16.1.1

Released on September 23, 2025

For more information about this release see:

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

Released on September 15, 2025

For more information about this release see:

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

16.0.1

Released on July 10, 2025

For more information about this release see:

Fixed

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

16.0.0

Released on July 9, 2025

For more information about this release see:

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

15.3.0

Released on April 29, 2025

For more information about this release see:

Added

  • Added a missing boolean type to the editor in the React wrapper. #11514
  • Fixed the Comments plugin for IME editing and added a new beforeCompositionstart hook. #11521
  • Added horizontal scroll to the Filter’s “by value” component. #11561
  • Added optional formula sanitization for CSV export to prevent CSV Injection attacks. #11592

Changed

  • Improved the initialization time of Handsontable with Formulas enabled. #11474
  • Changed the size of the Manual Row Resize and Manual Column Resize guide lines. #11507
  • Improved the viewport scrolling behavior. #11577

Fixed

  • Fixed an issue with the NestedRows plugin duplicating rows when moving child rows. #11362
  • Fixed an issue with row resize line alignment and resize handle flickering. #11500
  • Fixed an issue with the Autocomplete caret position after using scroll on a list of choices and a problem with the dropdown width. #11503
  • Fixed the submenu positioning for all themes. #11505
  • Fixed a problem where re-enabling the Hidden Columns configuration caused an error to be thrown if a selection was a part of the hidden range. #11508
  • Fixed an issue with an empty parentNode in the table’s getCords method. #11509
  • Improved the Undo/Redo actions for removing rows and columns. #11515
  • Fixed rows’ height calculations for merged cells on Safari. #11517
  • Fixed the missing (incorrect) render call after dataset change. #11529
  • Fixed an issue with the mobile keyboard closing after clicking the filter search input on Android devices. #11532
  • Fixed a problem with multiple row header levels being rendered in reverse order. #11533
  • Fixed a TypeError error for the AutoRowSize plugin. #11537
  • Allow changing the selection after a filter was applied. #11538
  • Fixed a problem with the Autocomplete editor rendering very slowly when provided with a long list of choices. #11552
  • Fixed an issue with the focus catcher accessibility. #11553
  • Fixed a TypeError error being thrown after removing rows on the bottom overlay. #11555
  • Fixed calculating the first row height. #11557
  • Fixed an issue with highlighting a cell after calling updateData. #11558
  • Fixed the “unmerge cells” action triggered form keyboard shortcut. #11559
  • Fixed the left/right-arrow shortcuts for menus when the table was configured with layoutDirection: rtl. #11562
  • Fixed an issue with duplicate boolean values in the filters. #11563
  • Fixed an issue with data sources with non-string values under the name property. #11565
  • Fixed the settings object not being updated after adding new hooks. #11566
  • Fixed a problem with the table rendering all rows when it’s configured to have 0px height. #11567
  • Fixed the copy/paste/cut functionalities for web components. #11572
  • Fixed the allowInvalid option (both true and false) for the Dropdown Editor. #11587
  • Fixed a problem with a deprecation warnings being thrown when using Context Menu’s Undo and Redo items. #11588
  • Fixed an error being thrown when editing Autocomplete-typed cells with a long list of choices rendered in a small container. #11589
  • Ensured that there’s a single @charset entry in the classic theme’s CSS files and that it’s placed at the beginning of those files. #11591

15.2.0

Released on March 19, 2025

For more information about this release see:

Added

  • Added the Farsi translation. #11388
  • Added support for class names passed as an array for the numeric cell renderer. #11420
  • Updated the Italian translation for the new Context Menu labels. #11436
  • Updated the Serbian translation for the new Context Menu labels. #11437
  • Added the mobile cell handle CSS variables to the themes. #11479
  • Improved the execution flow of the Filters plugin and added two new methods (importConditions and exportConditions). #11488

Changed

  • Sped up the rendering performance for themes. #11443
  • Improved the table UI behavior after removing all rows and/or columns. #11477
  • Reverted the removal of actionType class field for UndoRedo actions. #11495

Removed

  • Removed the broken, unsupported and undocumented rendererTemplate Text Renderer option. #11424

Fixed

  • Fixed the default (fallback) date format for the Date editor. #11419
  • Fixed the Context Menu’s items’ state rendering. #11422
  • Corrected the checkbox visibility in the no-theme variant. #11427
  • Fixed problems with the cell content reading with imeFastEdit enabled. #11442
  • Fixed hasVerticalScroll and hasHorizontalScroll methods. #11455
  • Fixed the editor border radius on mobile devices. #11457
  • Fixed the wrong height of the first row. #11458
  • Fixed the single cell selection inside iframes. #11460
  • Fixed an issue with row header misalignment. #11465
  • Improved the Autocomplete/Dropdown Editor list behavior. #11469
  • Fixed a problem with horizontal scrollbar in the Autocomplete dropdown. #11473
  • Fixed the merged cells height for custom row heights. #11478
  • Fixed a problem with the Comments editor not flipping direction when overlapping the window’s scrollbars. #11481
  • Fixed a problem with the focus trap during Shift + Tab navigation. #11483
  • Fixed an issue with the Context Menu opening on Classic theme. #11486
  • Fixed a problem with rowHeights when the provided value was lower than the default/minimal row height. #11487
  • Fixed an issue with the data source modification for row values passed as strings. #11491
  • Fixed the conflicts between ColumnSorting and MultiColumnSorting plugins. #11492
  • Fixed copy, cut an paste actions on tables with a selection reaching outside of the rendered viewport. #11504

15.1.0

Released on February 20, 2025

For more information about this release see:

Added

  • Added the TAB and SHIFT + TAB functionality to the Comments editor. #11345

Changed

  • Changed the approach to how the table is rendered by reusing the cell nodes. #11264
  • Updated Hyperformula to v3. #11373
  • Improved the performance of horizontal scrolling. #11412

Removed

  • Removed the getComputedStyle function from the type declaration file. #11421

Fixed

  • Fixed a bug where values passed to data-modifying hooks were not normalized. #11346
  • Fixed a problem where data population via autofill handler was broken for merged cells. #11291
  • Fixed a problem with a missing render call for the minSpareRows and minSpareCols options. #11292
  • Fixed the undo/redo scrolling behavior after undoing the data deletion. #11297
  • Fixed the Page Up/Page Down keyboard shortcuts for the oversized rows. #11301
  • Fixed a bug where the Undo/Redo action caused the wrong cells to be affected when triggered after filtering data. #11307
  • Fixed a bug where the selection was incorrectly expanded after closing the editor. #11311
  • Fixed a bug where the viewport was incorrectly scrolled after moving rows with the Nested Rows plugin enabled. #11312
  • Fixed dropdown-typed cells validation for custom editors. #11314
  • Fixed Undo/Redo for rows/columns with enabled min spare indexes. #11321
  • Fixed a problem with the table misalignment after changing the container size. #11324
  • Fixed a bug with an uncaught error being thrown after changing the theme while some of the editors were not fully initialized. #11325
  • Fixed a problem with a broken scroll on overlays when batch was used. #11328
  • Fixed the date picker arrow icon positions for RTL, along with other minor RTL fixes. #11329
  • Fixed the Autofill handler styles for the new themes. #11330
  • Fixed a problem with an uncaught error being thrown after scrolling the viewport. #11341
  • Fixed a problem where calling updateSettings with themeName set to the current theme name would clear the theme from the table. #11343
  • Fixed a problem where the getCellsMeta method returned improper results. #11350
  • Fixed the row virtualization for Filter’s “by value” component. #11351
  • Fixed a problem with the columns shifting after the render calls with the new themes being enabled. #11352
  • Fixed the cell editor width for the new themes. #11354
  • Disabled the “Clear column” option for read-only cells. #11355
  • Fixed a problem where autocomplete highlight was not rendered correctly in the new themes. #11364
  • Fixed a problem where the cell borders were not rendered correctly for fixed rows and columns with the new themes being enabled. #11369
  • Fixed the incorrect spacing between the checkboxes and their labels. #11377
  • Fixed a problem where the Nested Headers’ header selection was not rendered properly for the new themes. #11381
  • Fixed a bug where the dropdown editor was not fully visible on fixed rows while the new themes were enabled. #11399
  • Fixed a problem where the initial styles of the context menu and dropdown menu were not properly assigned in the new themes. #11400
  • Fixed a misalignment of the Manual Row Move’s “guide” in the new themes. #11401
  • Fixed a bug where the selection was not rendered correctly when selecting both merged and non-merged cells with the new themes being enabled. #11403
  • Fixed a bug where using the keyboard shortcuts to open the Context Menu would open it at a wrong position when the new themes were enabled. #11404
  • Fixed the CodeQL warnings by modifying potentially problematic code fragments. #11405
  • Fixed a bug where the date editor would not close after selecting a date on mobile devices. #11406
  • Fixed a problem with the header widths when using Nested Headers with the new themes enabled. #11410
  • Fixed the header text overlap in Nested Headers. #11413
  • Fixed a problem with the merged cells height calculation in the new themes. #11423
  • Fixed the copy/paste feature not working correctly in Chrome 133. #11428
  • Fixed a problem, where clicking on the Comments’ editor element deselected the currently selected cells. #11446

15.0.0

Released on December 16, 2024

For more information about this release see:

Added

  • Added support for row and column virtualization of merged cells. #11162
  • Added missing typings for the language files. #11236
  • Added support for the new themes, including “main” and “horizon”. #11144
  • React: Added @handsontable/react-wrapper to the monorepo. #11212

Changed

  • Breaking change: Updated the production dependencies (replaced pikaday with @handsontable/pikaday, updated numbro and dompurify) #10929
  • Refactored the column stretching logic, moved it to a separate plugin and fixed bugs related to the columns widths misalignment. #11210
  • Updated the typing for dropdown and context menu options. #11237
  • Updated the monorepo to utilize Node 22. #11265

Removed

  • Breaking change: Removed check marks from the Context Menu’s alignment submenu. #11278
  • Removed aria-hidden from TextEditor’s and PasswordEditor’s TEXTAREA elements. #11218

Fixed

  • Fixed the Autocomplete and Dropdown editors’ container size calculations. #11201
  • Fixed the focus management for the Dropdown Menu after updateSettings calls. #11205
  • Fixed the broken column selection when the column was being moved with the Nested Headers plugin enabled. #11206
  • Fixed copying values when the Fast IME Edit option was enabled. #11243
  • Fixed an issue with exporting of the common lib in package.json. #11247
  • Fixed the checkbox switching in merged cells. #11252
  • Fixed a problem with the missing “name” attribute of the Focus Catcher. #11256
  • Fixed data deletion for the checkbox-typed cells. #11263
  • Fixed the horizontal scrolling for Nested Headers. #11269
  • Fixed a problem where the Filters’ dropdown container did not match the dropdown content size. #11273
  • Fixed an error thrown when hiding already selected columns. #11277
  • Fixed the cell fast edit mode that did not work properly when a comment was displayed. #11280
  • Fixed an error for cases where the keyboard event was triggered with key set as undefined. #11281
  • Fixed the input width calculation for the password-typed cells. #11283
  • Fixed the missing source argument for the setDataAtCell method. #11287
  • Fixed the top overlay misalignment issue, visible after vertical scrollbar disappeared. #11289
  • React: Made the build scripts of @handsontable/react-wrapper place the TS type definitions in the configured directory. #11296

14.6.2

Released on February 10, 2025

For more information about this release see:

Fixed

  • Fixed the copy/paste feature not working correctly in Chrome 133. #11428

14.6.1

Released on October 17, 2024

For more information about this release see:

Removed

  • Removed aria-hidden from the TextEditor and PasswordEditor’s TEXTAREA elements. #11218

14.6.0

Released on October 1, 2024

For more information about this release see:

Added

  • Fix aria-label, aria-checked and menuitemcheckbox roles for the readOnly and alignment contextMenu items #11091
  • Extended the beforeFilter hook with a second argument to allow correct Undo/Redo functionality. #11170
  • Added even and odd class names to the TR elements. #11183
  • Added new API to retrieve visible, partially visible and rendered row and columns indexes. #11189

Changed

  • Make the focus visible for select cell type cells. #11160

Removed

  • Remove -ms fix from css #11055

Fixed

  • Fixed a bug that prevents copy valus from cell comments. #11103
  • Fixed submenu misalignment after horizontal scroll. #11106
  • Fixed rows misalign for cells that content produce heights with fractions. #11110
  • Fixed dropdown menu misalignment after opening with a keyboard shortcut. #11115
  • Fixed a bug where the data was saved in a wrong cell, when sorting a column with an open editor. #11129
  • Fixed copy/paste/cut issues when outsideClickDeselects was disabled #11139
  • Fixed merged cells that break after adding a new row. #11145
  • Fixed F2 keyboard shortcut (enter into editing mode). #11151
  • Fixed context/dropdown menu column width calculations depending on the content. #11156
  • Updated TS typings for selectCell method. #11161
  • Fixed a problem with deleting content from a selection when it contained both checkbox and non-checkbox-typed cells. #11182
  • Fixed a problem where the Context Menu container wasn’t reflecting the size of its contents. #11190
  • Fixed an issue connected with throwing an error triggered by some keyboard shortcuts when there was no selection #11195

14.5.0

Released on July 30, 2024

For more information about this release see:

Added

  • Added support for other keyboard layouts besides QWERTY (e.g. AZERTY). #11027
  • Added missing “this” typing for the ColumnSummary plugin. #11036
  • Added Undo/Redo logic for the ColumnSorting/ManualColumnSorting plugins. #11037
  • Added new option headerClassName, which allows adding custom CSS classes to the column headers. #11076

Changed

  • Improved the precision of calculating the height and width of columns and rows. #11049
  • Improved the rendering performance. #11069

Fixed

  • Fixed Context.getShortcuts type. #10910
  • Improved performance of cell merging. #10995
  • Fixed a problem where clicking and dragging on cells in window-controlled scrolled instances would result in unpredictable behavior. #10996
  • Fixed a bug that prevented column sorting of the checkbox cell types. #11004
  • Fixed merged cells misalignment in overlays. #11007
  • Fixed selection expansion for merged cells. #11010
  • Fixed a problem where the table could go into an endless resize loop when one of the instance’s parents was using dvh values for sizing, and the table was not given any size itself. #11021
  • Fixed a bug where the afterSetCellMeta was unnecessarily triggered after clicking on the comments textarea element. #11033
  • Fixed invalid cell states after data population that was canceled in the beforeChange hook. #11035
  • Fixed a problem with the Formulas plugin using wrong indexes when performing autofill. #11038
  • Fixed a problem where disabling navigableHeaders broke keyboard navigation in the first row if the option was previously enabled and used. #11043
  • Fixed a problem where the dropdown menu would not close after tapping on the table cells on mobile browsers. #11044
  • Fixed the header selection with nestedHeaders enabled not working on mobile devices. #11051

14.4.0

Released on June 11, 2024

For more information on this release, see:

Added

  • Extended the manualRowResize plugin with a method to retrieve the row height value from the last manual adjustment attempt. #10941
  • Added an option to change the order of hook callbacks. #10970
  • Added new dataDotNotation option which, when set as false allows using object keys with dots. #10973

Changed

  • Improved editor behavior after dataset alterations. #10963
  • React: Synchronized the rollup version between the wrappers and updated the rollup plugin dependencies. #10962

Fixed

  • Fixed unwanted table re-rendering for oversized rows/columns. #10912
  • Fixed Ctrl/Cmd + Enter keyboard shortcut for comments. #10920
  • Fixed issue with rows and columns not unfreezing when headers are disabled. #10926
  • Fixed imeFastEdit option being reset after updateSettings call #10933
  • Improved fast typing values between editors. #10947
  • Removed double borders for column headers. #10948
  • Fixed column width calculations with stretchH: 'all' option. #10954
  • Fixed missing column summary cell meta state after updateSettings method call. #10955
  • Fixed sorting issue for the time column type. #10956
  • Fixed data populate error with correctFormat usage. #10957
  • Fixed cell meta coordinates overwrite by GhostTable. #10961
  • Fixed setDataAtRowProp error when saving data into a trimmed-out column. #10964
  • Fixed table scrolling issue after inserting a new row over a table-wide selection. #10965
  • Fixed copy/cut/paste issue from outside elements. #10976
  • Fixed autocomplete dropdown dimensions after filtering out all choices. #10977
  • Fixed dataset clearing issue for formulas. #10983
  • Improved typings for the ContextMenu plugin. #10984
  • Added missing type for namedExpressions. #10986
  • Fixed double borders for row/column headers. #10988
  • Fixed a problem, where trying to render a hidden instance made it render all of its rows by disabling the rendering for hidden instances. #10989
  • Fixed error in numeric cell types after entering non-numeric values. #10931
  • Fixed a bug that prevented column sorting of the checkbox cell types. #11004
  • Updated the TS typings of the Shortcut Manager’s getShortcuts method. #10910
  • React: Prevented React wrapper from throwing errors on updating component props with init-only settings. #10921

14.3.0

Released on April 16, 2024

For more information on this release, see:

Added

  • Added new feature, Navigation within selection and edit cells within a range #10732

Changed

  • Updated dependencies based on npm audit, most notably we upgraded to Angular 17.0 #10889

Fixed

  • Ensured the cursor changes to ‘grabbing’ for all table elements during column or row movement#10852
  • Resolved an issue where the TAB key failed to move selection when editing select-type cells in ‘fast edit’ mode. #10849
  • Prevent the Cmd/Ctrl + A action when the focus is on headers. #10853
  • Unified source arguments in beforeChange and afterChange hooks triggered by the Merge Cells plugin. #10857
  • Ensured focus retention after column collapsing. #10865
  • Fixed visibility issue with bottom/right cell borders after scrolling from the absolute top/left positions using the api. #10887
  • Fixed Dropdown plugin logic to prevent blocking click events from custom editors. #10888
  • Fixed datepicker position for the date cell type. #10892
  • Vue: Fixed an issue in the Vue and Vue3 wrappers where updating the hook callback didn’t reflect changes in the underlying instance’s settings. #10686
  • Vue: Fixed the behavior of the Vue/Vue3 wrappers’ simpleEqual helper, which previously returned incorrect results when comparing identical objects. #10896

14.2.0

Released on March 6, 2024

For more information on this release, see:

Added

Changed

  • Improved the viewport scroll behavior after clicking on a cell. #10709
  • Improved the response of checkboxes to double-clicks. #10748
  • Improved the way checkbox cells react to pressing Space or Enter. #10802
  • Improved the type inference of the propToCol() method. #10750
  • React: Improved React portal caching. #10758

Removed

  • Removed versioned Handsontable examples and their GitHub publishing workflow. #10766

Fixed

  • Fixed an issue where the sizes of rows and columns were calculated incorrectly for hidden indexes. #10705
  • Fixed an issue where pasting arrays larger than the table’s height caused data getter methods (such as getCellMeta()) to throw an error. #10710
  • Fixed an issue where HyperFormula and Handsontable didn’t sync properly. #10719
  • Fixed an issue where removing all rows and columns while HyperFormula was enabled caused an error. #10720
  • Fixed an issue where very large text cells lacked the vertical scrollbar during editing. #10722
  • Fixed an issue where non-contiguous selection caused too many afterSelectionEnd and afterSelectionEndByProp calls. #10725
  • Fixed an issue where tables pasted from the clipboard contained redundant line breaks. #10745
  • Fixed an issue where clicking outside the table didn’t remove the focus from the table (when Handsontable was placed in an iframe). #10752
  • Fixed an issue where hovering over the header handles of handsontable cells caused an error. #10761
  • Fixed an issue where dropdown cells with long lists of options caused an error. #10763
  • Fixed an issue where using the browser’s autocomplete dropdown on an input outside of Handsontable caused errors. Also, fixed an event listener leak. #10795
  • Fixed an issue where using context and dropdown menus on mobile caused unwanted selection handles to show up. #10816
  • Fixed an issue where the Autofill plugin treated cells filled with 0 as empty. #10817
  • React: Fixed a missing HotTableClass export. #10760
  • React: Fixed missing renderer and editor props. #10768

14.1.0

Released on January 16, 2024

For more information on this release, see:

Added

  • Added a new configuration option, renderAllColumns, which lets you disable column virtualization for improved accessibility. #10599
  • Added a dedicated renderer (DropdownRenderer) and validator (DropdownValidator) for the dropdown cell type. #10688
  • Added support for the Tab key in the select editor (selectEditor). #10673

Changed

  • Improved how undoing changes affects the viewport. Now, when you undo a change, the view automatically scrolls back to the changed area. #10639
  • Improved how pasting data affects the viewport. Now, even when the size of the pasted data is larger than the viewport, the viewport stays in place. #10630
  • Improved how removing a row or column affects the selection. Now, when you remove a row or column, the selection moves to the nearest visible row or column. #10690
  • Improved TypeScript definitions for multiple plugins. #10670
  • Improved TypeScript definitions for the core modules. #10671
  • Improved TypeScript definitions for the CellCoords and CellRange classes. #10678
  • Improved TypeScript definitions for the CustomBorders plugin. #10659
  • React: Improved support for SSR frameworks. #10575

Fixed

  • Fixed an issue where double-clicking a cell resulted in highlighting the cell’s contents. #10595
  • Fixed an issue where pressing the Tab key when editing a cell in the last column caused an error. #10632
  • Fixed an issue where pressing the Tab key with tabNavigation set to false caused the grid to scroll. #10634
  • Fixed an issue where the Filters plugin threw a TypeError in specific setup cases. #10637
  • Fixed an issue where changing Handsontable’s configuration or data broke the focus position. #10642
  • Fixed an issue where Handsontable didn’t go into the “unlisten” state after clicking an element outside of the table. #10648
  • Fixed an issue where recovering removed cells by using undo/redo didn’t restore the cells’ configuration options. #10649
  • Fixed an issue where the ManualRowResize and ManualColumnResize plugins threw an error when a cell renderer used the HTML <table> element. #10650
  • Fixed an issue where, in some situations, the table didn’t scroll after navigating it with the keyboard. #10655
  • Fixed an issue where the drag-to-scroll functionality was not working for window-scrolled instances. #10655
  • Fixed an issue where some configurations of the CollapsibleColumns plugin caused an uncaught TypeError. #10693
  • Fixed an issue where pressing the Backspace key in a date cell deleted the entire contents of the cell instead of a single character. #10696
  • Fixed several issues related to the roundFloat option of the ColumnSummary plugin. #10701
  • Fixed a missing TypeScript definition in the Formulas plugin. #10186
  • Added pikaday to handsontables dependencies, to ensure backward compatibility of Handsontable 14.1.0. #10715
  • React: Fixed a missing TypeScript definition for the settings prop. #10661
  • Vue: Fixed an issue where passing hyperformulaInstance to hotSettings resulted in TypeError: Converting circular structure to JSON. #8728
  • Vue: Updated the peer dependencies of the Vue 3 wrapper with the latest version of Vue. #10571

14.0.0

Released on November 30, 2023

For more information on this release, see:

Added

  • Added multiple keyboard shortcuts. For more information, see the release blogpost and and the updated Keyboard Shortcuts documentation page. #10237 #10389 #10404 #10405 #10410 #10413 #10417 #10419 #10420 #10421 #10548
  • Added ARIA tags to various elements of the table to improve screen reader compatibility. #10463 #10524 #10526 #10539 #10548 #10541
  • Added the ability to navigate the headers with the keyboard by introducing a new navigableHeaders option along with other changes. #10265 #10301
  • Added the ability to traverse the grid within a webpage using the TAB key and introduced a new tabNavigation option. #10430 #10585
  • Added a new beforeSelectionHighlightSet hook that allows modifying logical selection coordinates before they are applied to the rendering engine. #10513
  • Implemented the select renderer and cell type. #10529
  • Added an accessibility demo for javascript and React. #10532
  • Added handsontable and date renderers for their respective cell types to allow adding the a11y attributes. #10535
  • Added new beforeColumnWrap and beforeRowWrap hooks. #10550

Changed

  • Breaking change: Changed the way the table reacts to using the “select all cells” methods and shortcuts. #10461
  • Breaking change: Changed the colors of the invalid cells and the arrow buttons of the autocomplete-typed cells. #10520
  • Breaking change: Improved the navigation and accessibility of the Filtering Dropdown Menu. #10530
  • Breaking change: Changed the way Handsontable handles focus by focusing the browser on cell elements. Introduced a new imeFastEdit option to minimize the negative effects affecting the “fast edit” feature for the IME users. #10342
  • Improved the keyboard navigation for the context and dropdown menus and added a new forwardToContext option to the ShortcutManager. #10519
  • Extended the Core’s scrollViewportTo method to allow disabling of cell auto-snapping. #10508
  • Upgraded the monorepo to utilize Node 20. #10468
  • Improved DX by adding an exception to be thrown when trying to activate a shortcut context that has been not yet registered. #10476
  • Improved the performance of the table for cases when the table is hidden. #10490
  • Updated the TypeScript definitions. #10492 #10493 #10494 #10509
  • Changed the default styling of the “OK” button in the Filtering Dropdown when it’s focus. #10558

Fixed

  • Fixed an issue where copying values containing an ampersand resulted in a wrong values being pasted. #10472
  • Fixed an issue related to the backlight position misalignment for the ManualRowMove and ManualColumnMove plugins. #10475
  • Fixed a problem with row header widths changing sizes after adding/deleting rows. #10479
  • Fixed a problem with the offset helper for elements placed in foreign object contexts. #10480
  • Fixed problems with size and alignment of the table when placed under elements with the CSS transform: scale attribute applied. #10482
  • Added the missing updateData value to the ChangeSource type. #10488
  • Fixed a bug where pressing Ctrl/Cmd does not trigger non-contiguous selection. #10502
  • Fixed a problem with the editor having incorrect width and height. #10504
  • Fixed visual glitches (unwanted pixels) of the Autocomplete editor’s list in cases when there were no items. #10506
  • Fixed the Vue and React demo’s dependencies to be able to use the demos with Stackblitz. #10523
  • Fixed a problem with the merged cells having wrong row heights. #10500
  • Fixed the accessibility issues in the documentation. #10574
  • Updated the demos for better accessibility. #10563
  • Fixed a problem with the text editor’s width being calculated incorrectly. #10590
  • Fixed a problem with two cells being selected after Ctrl/Cmd + Shift key combination. #10622

13.1.0

Released on August 31, 2023.

For more information on this release, see:

Changed

  • Optimized the transpilation process of the distribution files. #10440
  • Updated the internal monorepo scripts to utilize Node 20. #10468

Fixed

  • Fixed a problem with errors being thrown when pressing delete or backspace keys after deselecting cells. #10272
  • Fixed problems with moving rows when there are trimmed rows in the table. #10399
  • Fixed a problem with the column resize handle being stuck after the user clicked the right mouse button. #10416
  • Extended the type definition of CellChange to match the actual implementation. #10432
  • Fixed a typo in the CopyPaste plugin’s copy method argument. #10446
  • Fixed the mobile selection handlers that disappeared below the table headers when multiple cells were selected. #10447
  • Fixed the MergeCells plugin’s problem with updating the cell meta after unmerging the previously-merged cells, which resulted in the Autofill plugin not working properly. #10456
  • Added the missing type definition for BaseEditor’s getEditedCellRect method. #10459
  • Corrected the type definitions for the ContextMenu. #9566
  • React: Mark an internal prop of the React wrapper’s base editor component as optional. #10429

13.0.0

Released on June 22, 2023.

For more information on this release, see:

Added

  • Angular: Added support for Angular 16. #10396

Changed

  • Breaking change (React, Angular, Vue 2, Vue 3): Changed Handsontable’s policy toward older versions of supported frameworks. From now on, Handsontable supports only those versions of any supported frameworks that are officially supported by their respective teams. Dropping Handsontable’s support for any older framework versions won’t be treated as a breaking change. #10396
  • Breaking change: Changed the order in which three hooks are executed: now, the beforeChange hook is fired before the afterSetDataAtCell and afterSetDataAtRowProp hooks. #10231
  • Changed the margins of the context menu in the RTL layout direction. #10375

Removed

  • Breaking change (Angular): Dropped support for Angular 13 and lower. From now on, Handsontable supports only those versions of Angular that are officially supported by the Angular team: currently, it’s 14-16. However, Handsontable 13.0.0 was thoroughly tested and, to the best of our knowledge, works correctly with versions down to Angular 12. #10396
  • Breaking change: Removed the deprecated beforeAutofillInsidePopulate hook. #10407
  • Breaking change: Removed the deprecated getFirstNotHiddenIndex method. Instead, use the getNearestNotHiddenIndex() method. #10407
  • Breaking change: Removed the deprecated parameters of the alter() method: insert_row and insert_col. Instead, use the following parameters: insert_row_above, insert_row_below, insert_col_start, and insert_col_end. #10407
  • Breaking change: Removed the deprecated parameters of the populateFromArray() method: direction and deltas. #10407

Fixed

  • Fixed an issue where the “Read only” icon of the context menu displayed incorrectly in the RTL layout direction. #10375

12.4.0

Released on May 23, 2023.

For more information on this release, see:

Added

Fixed

  • Fixed numerous issues related to syncing Handsontable with HyperFormula. Now, formulas work properly with all the Handsontable features. #10215
  • Fixed na issue where formulas didn’t recalculate after rows or columns were moved. #4668
  • Fixed an issue where Handsontable’s dates didn’t sync correctly with HyperFormula’s dates. #10085
  • Fixed an issue where calling updateSettings() would reset HyperFormula’s undo/redo actions stack. #10326
  • Fixed an issue where the Autofill, TrimRows and Formulas plugins didn’t work properly together. #10200
  • Fixed an issue where the modifySourceData hook used the wrong type of indexes. #10215
  • Fixed an issue where text copied from Handsontable to Excel included wrong types of spaces. #10017
  • Fixed an issue where mousing over the same cell twice didn’t trigger the beforeOnCellMouseOver and afterOnCellMouseOver hooks. #10321
  • Updated TypeScript definition files related to the CustomBorders plugin. #10360
  • Fixed an issue where moving rows manually to the bottom was difficult due the misalignment between the backlight and guideline elements. #9556

12.3.3

Released on March 28, 2023.

For more information on this release, see:

Added

  • Added a Chinese (zh-CN) translation of the “Copy with headers” feature. #10273
  • Added a new guide: Rows sorting. #10183

Fixed

  • Fixed an issue where column-filter checkboxes got reset when the table was scrolled out of view. We solved this by preventing the table from triggering a complete render each time it leaves the viewport. #10206
  • Fixed an issue where clicking on a cell scrolled the table sideways in certain RTL configurations. #10206
  • Fixed an issue where calling getDataAtCol() or getDataAtProp() caused an error when the data set had more than 125 000 rows. #10226
  • React: Fixed React 18 warnings about deprecated lifecycle methods. We removed componentWillMount() and componentWillUpdate() from Handsontable’s codebase and recreated their functionality by using React’s portals. #10263

12.3.2

Released on March 23, 2023.

Handsontable 12.3.2 may not work properly with React’s functional components. If you’re using React, you should upgrade to 12.3.3.

12.3.1

Released on February 6, 2023.

For more information on this release, see:

Added

  • Added a Japanese translation of the “Copy with headers” feature. #10201

Removed

  • Removed the two-week delay in showing the console warning about license expiration. #10175

Fixed

  • Fixed an issue where updateData() didn’t work with nested data structures (NestedRows). #10178
  • Fixed an issue of unwanted pixels in the “Filter by condition” menu by removing a superfluous overlay. #10174
  • Fixed an issue where merged cells could lack right and bottom borders due to a Chrome bug. #10212
  • Fixed an issue where using some browser and system shortcuts could cause Handsontable to behave as if Cmd/Ctrl was being held down. #10210

12.3.0

Released on December 14, 2022.

For more information on this release, see:

Added

Fixed

  • Fixed an issue where the UndoRedo plugin didn’t work properly with preconfigured columns. #10108
  • Fixed an issue where formulas inserted programmatically by using updateData() were not evaluated. #10011
  • Fixed a regression where setting a column’s type could overwrite other custom-defined settings. #10128
  • Fixed an issue where Handsontable didn’t render properly when initialized inside of a hidden container. #5322
  • Fixed an issue of desynchronization between configuration options (cell meta) and Handsontable’s data. The issue occurred when Handsontable’s options were modified through the following hooks: beforeCreateRow, afterCreateRow, beforeCreateCol, and afterCreateCol. #10136
  • Fixed an issue where comments added to fixed columns didn’t display properly after scrolling. #9645
  • Fixed an issue where typing in a dropdown editor caused the IME to disappear, resulting in wrong characters being typed. #9672
  • React: Fixed an issue where dropdown cells weren’t validated properly when using the HotColumn component. #10065

12.2.0

Released on October 25, 2022.

For more information on this release, see:

Added

  • Added a new feature that lets you add rows and columns at a specified position. Now, the alter() method takes 4 new parameter values: insert_row_above, insert_row_below, insert_col_start, and insert_col_end. The insert_row and insert_col parameters are marked as deprecated. #9471

Deprecated

  • Deprecated the insert_row parameter of the alter() method. Instead, use insert_row_above or insert_row_below. #9471
  • Deprecated the insert_col parameter of the alter() method. Instead, use insert_col_start or insert_col_end. #9471

Removed

  • Removed a type definition for a non-existing method, translateRowsToColumns(). #9919

Fixed

  • Fixed an issue where the width of the cell editor was calculated incorrectly. #3815
  • Fixed an issue where formulas surrounded by merged cells were converted to values by mistake. #6359
  • Fixed an issue where Handsontable could disappear on Firefox 93 (and later) in a specific use case. #9545
  • Fixed an issue where changing a cell’s type through setCellMeta() didn’t properly set the cell’s editor and renderer. #9734
  • Fixed an issue where the dropdown menu didn’t display when the NestedHeaders plugin was enabled and all rows were trimmed out. #9753

12.1.3

Released on September 22, 2022.

For more information on this release, see:

Removed

  • Removed a custom stable sorting implementation in favor of the stable sorting algorithm guaranteed by ECMAScript 2019. #6091
  • Removed type definitions for non-existing methods rowOffset and colOffset and a non-existing hook modifyRowSourceData. #8659, #7317

Fixed

  • Fixed incorrect date format conversion on input in the date editor. #9681
  • Fixed an error when adding a large number of rows using the alter method. #7840
  • Fixed IME text input in the editors. #9586
  • Fixed an issue where the editor did not open on key events when the cell was outside the viewport. #9022
  • Fixed an issue with “0” values being ignored by the Column Summary plugin. #6385
  • Fixed an error when opening the column dropdown menu with the Filters plugin enabled. #9561
  • Fixed an issue where the trimWhitespace option could not be used in the column and cell levels of the cascading configuration. #7387
  • Fixed the flickering of the selection area at the edge of the table while scrolling. #8317
  • Fixed misalignment on mobile devices when the edge cells were selected. #9621
  • Fixed type definitions for the method setSourceDataAtCell. #8599

12.1.2

Released on July 8, 2022.

For more information on this release, see:

Changed

  • Changed the version of the Moment.js dependency from 2.29.3 to 2.29.4, in reaction to a recently-found Moment.js security vulnerability. The vulnerability did not affect a correct configuration of Handsontable. #9638
  • Vue: Freezed the version of the Vue framework that is used in our build chain to ~2.6. This shouldn’t affect apps that use Vue 2.7+. #9624

12.1.1

Released on July 5, 2022.

For more information on this release, see:

Fixed

  • Angular: Fixed an issue where the installation of @handsontable/angular package failed for versions of Angular other than 9 #9622

12.1.0

Released on June 28, 2022.

For more information on this release, see:

Added

Changed

  • Replaced HTML entities appearing in Handsontable’s license texts with canonical counterparts. #9487
  • Updated the Pikaday optional dependency to 1.8.2, to let Handsontable work with Parcel 2 without errors. #9410
  • React: Changed the wrapper’s lifecycle methods, to let Handsontable work with React 17+ without warnings. #8748
  • Angular: Moved the @angular/core dependency to peer dependencies. #9574

Deprecated

  • Deprecated the getFirstNotHiddenIndex() method. Use getNearestNotHiddenIndex() instead. #9064

Fixed

  • Fixed an issue where dropdown and autocomplete cell editors rendered incorrectly if the preventOverflow option was set to 'horizontal'. #3828
  • Fixed an issue where frozen rows were getting duplicated. #4454
  • Fixed an issue where comments rendered outside the viewport. #4785
  • Fixed an issue where comments got positioned incorrectly when Handsontable ran within a scrollable element. #6744
  • Fixed an issue that occurred when Handsontable ran within an HTML <form>: pressing Enter inside another form’s <input> could open Handsontable’s dropdown menu. #9295
  • Fixed an issue where it was impossible to unmerge cells in the RTL layout direction. #9362
  • Fixed an issue where columns wider than the viewport’s width and rows higher than the viewport’s height didn’t render correctly. #9473
  • Fixed an issue where dragging-to-scroll on mobile didn’t work properly in the RTL layout direction. #9475
  • Fixed an issue where hiding columns with nested headers caused incorrect column width calculation (for the stretchH: 'all' option). #9496
  • Fixed an issue where ShortcutManager unnecessarily handled keyup events with no key defined. #9562

12.0.1

Released on May 16, 2022.

For more information on this release, see:

Fixed

  • Fixed an issue where checking or unchecking a checkbox in a row with autoRowSize: true and multi-line cell values caused rows to align incorrectly. #7102
  • Fixed an issue where checking or unchecking a checkbox changed the cell width. #8211
  • Fixed an issue where using a single Handsontable instance with multiple HyperFormula sheets could lead to an uncaught TypeError. #8268
  • Fixed an issue where nested column headers didn’t expand properly. #9099
  • Fixed an issue where updating custom borders could lead to uncaught error exceptions. #9455

12.0.0

Released on April 28, 2022.

For more information on this release, see:

Added

  • Added ShortcutManager, a new API for customizing keyboard shortcuts. #8942
  • Added support for right-to-left (RTL) languages, by introducing a new configuration option: layoutDirection. #8760
  • Added an Arabic translation. #9208
  • Added a new configuration option: fixedColumnsStart. #8760
  • Added a new keyboard shortcut (Ctrl/Cmd+Enter) for filling the selected range of cells with the value of the active cell. #9366
  • Added support for the Home and End keys inside cell editors, for moving the cursor to the beginning or end of the text. #9367
  • Added support for the latest Node LTS version. #9149

Changed

  • Breaking change: Changed how updateSettings() handles data updates, to improve performance and the consistency of user experience. Now, when provided with a new data object, updateSettings() updates the data without resetting any states. #7263 [migration guide]
  • Breaking change (React, Angular, Vue 2, Vue 3): Updating your data through a component property no longer resets your index mapper information and configuration options. #7263 [migration guide]
  • Breaking change: Changed how updatePlugin() reacts to updateSettings() calls, to improve performance and the consistency of user experience. Now, calls to updateSettings() update a plugin’s state only when the options object contains a configuration option that’s relevant to that particular plugin. #9021 [migration guide]
  • Breaking change: Changed the order of execution for two hooks: now, beforeKeyDown is properly fired before afterDocumentKeyDown. #6236 [migration guide]
  • Breaking change: Changed how default keyboard shortcuts are defined, to improve keyboard navigation consistency. Most of the shortcuts did not change and are now properly documented in the keyboard shortcuts guide. However, some shortcuts that were not defined explicitly, and were not listed in the documentation, don’t work anymore (e.g., Enter opens a cell’s editor, but Ctrl+Enter doesn’t). This change doesn’t affect custom keyboard shortcuts. #8942 [migration guide]
  • Breaking change: Split a cross-platform modifier key (Ctrl/Cmd) into two separate keys, to improve keyboard navigation consistency. Now, the Cmd key triggers actions on macOS where the Ctrl key triggers actions on Windows. For example, on macOS, Ctrl+A doesn’t work anymore: Cmd+A is used instead. #9369 [migration guide]
  • Breaking change: Changed the actions of the following keyboard shortcuts, to match the usual spreadsheet software behavior, and provide a more intuitive user experience: Ctrl/Cmd+, Ctrl/Cmd+Shift+, Ctrl/Cmd+, Ctrl/Cmd+Shift+, Ctrl/Cmd+, Ctrl/Cmd+Shift+, Ctrl/Cmd+, Ctrl/Cmd+Shift+, Home, Ctrl/Cmd+Home, End, Ctrl/Cmd+End, Shift+Page Up, and Shift+Page Down. #9363 #9364 #9365 [migration guide]
  • Changed two scripts of the main Handsontable workspace (/), to speed up the build process: now, the npm run build and npm run test scripts don’t build or test the Handsontable examples (/examples). #9412
  • Changed the version of the Moment.js dependency from 2.24.0 to 2.29.3, in reaction to a recently-found Moment.js security vulnerability that did not directly affect Handsontable. #9381
  • Changed the version of the HyperFormula optional dependency from ^1.2.0 to ^2.0.0. #9411
  • Changed an internal property name, from handsontableInstance.view.wt to handsontableInstance.view._wt, to make it clear that Walkontable (Handsontable’s rendering engine) is not a part of Handsontable’s public API. #8760

Removed

  • Breaking change: Removed the Cmd+M keyboard shortcut (used for cell merging), as it conflicted with window minimizing on macOS. The Ctrl + M keyboard shortcut works the same as before. #9368 [migration guide]
  • Breaking change: Removed the Shift+Page Up/Page Down keyboard shortcuts from the cell editing context. #9401 [migration guide]
  • Dropped support for Internet Explorer 11 and Edge Legacy (the non-Chromium version of Edge). Handsontable 11.x becomes the long-term support (LTS) version for Internet Explorer 11 and Edge Legacy, until the end of 2023. #7026
  • React: Removed the enzyme dependency from the React wrapper. #9151

Fixed

  • React, Angular, Vue 2, Vue 3: Fixed an issue where using updateSettings() caused problems for state managers. #8372
  • Fixed an issue where using updateSettings() caused hidden columns to reappear. #7165
  • Fixed an issue where using updateSettings() caused merged cells to unmerge. #3315
  • Fixed an issue where using updateSettings() caused the state of nested rows to reset. #8838
  • Fixed an issue where using updateSettings() caused problems with column sorting. #7688
  • React: Fixed an issue where using React’s setState() within the afterFilter hook broke filtering. #7567
  • Vue 2: Fixed an issue where repeatedly changing Handsontable’s height through updateSettings() caused Handsontable to crash. #7546
  • Vue 2: Fixed an issue where the failed validation status got erased when editing a new row. #7541
  • Fixed an issue where cell filtering did not use formula results. #5455
  • Fixed a wrong TypeScript definition in the BasePlugin class. #9175
  • Fixed an issue where the Ctrl/Cmd+Z and Ctrl/Cmd+Shift+Z keyboard shortcuts didn’t behave properly inside cell editors. #9367
  • Fixed an issue where the dropdown menu contained unwanted rectangle elements. #9240
  • React, Vue 2, Vue 3: Fixed an issue with registering modules for the React, Vue 2, and Vue 3 wrappers, by adding an "exports" field to their package.json files. #9140

11.1.0

Released on January 13, 2022

For more information on this release, see:

Added

Changed

Fixed

  • Fixed an issue where the autocomplete editor’s suggestion list didn’t update properly. #7570
  • Fixed an issue where nested headers didn’t render when data wasn’t defined. #8589
  • Fixed some end-to-end tests that failed on mobile devices. #8749
  • Fixed an issue where the rendered selection could get shifted by 1px. #8756
  • Fixed an issue where the first column’s border didn’t display properly. #8767
  • Fixed an issue where the CollapsibleColumns plugin’s expandAll() method didn’t expand collapsed columns. #8900
  • Fixed end-to-end test scripts that occasionally crashed. #8961
  • Fixed a typo in the valueAccordingPercent() helper. #9006
  • Fixed an issue where the NestedRows plugin could throw a type error after calling the updateSettings() method. #9018
  • Fixed an issue where performance was affected by removing events. #9044
  • Fixed a wrong TypeScript definition of the MultiColumnSorting plugin’s sort() method. #9067
  • Fixed an issue where the Comments plugin’s editor disappeared after adding a comment. #9075 #6661
  • React: Fixed a wrong return type. #9000

11.0.1

Released on November 17, 2021.

For more information on this release, see:

Fixed

  • Fixed the UMD build of @handsontable/angular, which was not working properly in 11.0.0. #8946

11.0.0

Released on November 17, 2021.

For more information on this release, see:

Added

  • Breaking change: Added TypeScript definition files for Handsontable’s modularized version. #7489
  • Breaking change (Vue): Added support for modularization to the Vue wrapper. #8820
  • Breaking change (React): Added support for modularization to the React wrapper. #8819
  • Breaking change (Angular): Added support for modularization to the Angular wrapper. #8818
  • Added a new package entry point that allows importing built-in modules in one function call: import { registerAllEditors, registerAllRenderers, registerAllValidators, registerAllCellTypes, registerAllPlugins } from 'handsontable/registry'. #8816
  • Added a new locale option, to properly handle locale-based data. #8897
  • Added a GitHub Actions workflow that covers testing Handsontable and the wrappers. #8652
  • Added new direction helpers (internal API) that lay ground for future RTL support. #8868

Changed

  • Breaking change: Changed how the populateFromArray() method works with its method argument set to shift_down or shift_right. #888
  • Moved the entire Handsontable package to its own, new subdirectory: /handsontable. #8759
  • Replaced the license files with updated versions. #8877

Fixed

  • Fixed an issue with incorrect filtering of locale-based data while using search input from a dropdown menu. #6095
  • Fixed an error thrown when using the populateFromArray() method with its method argument set to shift_right. #6929
  • Fixed an issue with the beforeOnCellMouseDown and afterOnCellMouseDown hooks using wrong coordinates. #8498
  • Fixed a TypeError thrown when calling the updateSettings() method in Handsontable’s modularized version. #8830
  • Fixed two issues with the documentation’s canonicalUrl entries. #8886
  • Fixed an error thrown when autofill’s source is a date cell. #8894
  • React: Fixed a React wrapper issue where it’s impossible to use different sets of props in editor components reused across multiple columns. #8527

10.0.0

Released on September 29, 2021.

For more information on this release, see:

Changed

Fixed

  • Fixed an issue of not resetting the date picker’s configuration #6636
  • An error won’t be thrown while inserting a new row for nested rows in a specific case #7137
  • Fixed a few problems with the NestedRows plugin, occurring with the Formulas plugin enabled. #8048
  • Fixed errors being thrown in the Formulas plugin if a provided sheet name contained a dash character #8057
  • Fixed multiple bugs related to undo/redo actions while using the Formulas plugin #8078
  • Fixed an issue where autofill was not able to be blocked/changed with the beforeChange hook when the Formulas plugin was enabled #8107
  • Data stored by the NestedRows plugin won’t be corrupted by some actions #8180
  • Collapsed parents won’t be expanded after inserting rows #8181
  • Fixed the cooperation of the dropdown menu and column sorting (menu closing on click) #8232
  • Data won’t be corrupted anymore when some alterations are performed #8614
  • Adjusted directories and files related to dataMap, to prevent potential circular references. #8704
  • Improved the performance of the regular expression used to detect numeric values, and fixed major code smells. #8752

9.0.2

Released on July 28, 2021.

For more information on this release, see:

Fixed

  • Fixed an issue with an error being thrown when lazy loading columns on a setup with Nested Headers + Hidden Columns. #7160
  • Fixed column header sizes not being updated on updateSettings calls containing columns. #7689
  • Fixed functional keys’ behavior to prevent unexpected editing. #7838
  • Fixed missing collapsible indicator on IE. #8028
  • Fixed support for row and column headers in the parseTable utility. #8041
  • Fixed a bug where not providing a data object with the NestedRows plugin enabled crashed the table. #8171
  • Vue: Fixed an issue where adding rows to a Handsontable instance wrapped for Vue resulted in additional rows being inserted at the end of the table. #8148
  • Vue: Fixed a problem in the Vue wrapper, where destroying the underlying Handsontable instance caused it to throw errors and crash. #8311
  • React: Fixed a problem in the React wrapper, where destroying the underlying Handsontable instance caused it to throw errors and crash. #8311
  • Angular: Fixed a problem in the Angular wrapper, where destroying the underlying Handsontable instance caused it to throw errors and crash. #8311

Added

  • Added new documentation engine #7624

9.0.1

Released on June 17, 2021.

For more information on this release, see:

Removed

  • Removed the redundant internal jsonpatch library from the source code. (#8140)

Fixed

  • Fixed an issue where the validator function was called twice when the Formulas plugin was enabled. (#8138)
  • Introduced a new CSS style for cells of the checkbox type to restore previous behaviour. (#8196)

9.0.0

Released on June 1, 2021.

For more information on this release, see:

Changed

  • Breaking change: New Formulas plugin, with an entirely different API. See the migration guide for a full list of changes. Removed the required hot-formula-parser dependency for the sake of an optional one, hyperformula. (#6466)
  • Breaking change: Changed the afterAutofill and beforeAutofill hooks’ signatures. (#7987)
  • Upgraded eslint and eslint-related modules. (#7531)
  • Added fit & fdescribe to restricted globals in test files. (#8088)

Deprecated

  • Deprecated the beforeAutofillInsidePopulate hook. It will be removed in the next major release. (#8095)

Removed

  • Breaking change: Removed the deprecated plugins - Header Tooltips and Observe Changes. (#8083)

Fixed

  • Fixed a problem with the column indicator of the CollapsibleColumns plugin not being displayed properly on styled headers. (#7970)
  • Fixed a problem with duplicated afterCreateCol hooks being triggered after undoing a removal of a column. (#8076)
  • Fixed a problem with formulas not being calculated in certain conditions. (#4430)
  • Fixed a bug with formulas displaying incorrect values after inserting new rows. (#4654)
  • Fixed a problem with the AVARAGE formula being updated incorrectly. (#4675)
  • Fixed a problem with the IF formulas not working properly. (#5870)
  • Fixed a bug with using the clear method broke the formulas in the table. (#6248)

8.4.0

Released on May 11, 2021.

For more information on this release, see:

Added

Fixed

  • Fixed a problem with sorting the checkbox-typed cells and an issue with empty cells not being displayed properly. (#4047)
  • Fixed a problem where undoing the removal of row with readOnly cells was not performed properly. (#4754)
  • Fixed state-change resolving for externally added checkboxes. (#5934)
  • Fixed a problem with the native selection being removed with the fragmentSelection option enabled. (#6083)
  • Fixed a bug where number of columns rendered in the viewport was not correct. (#6115)
  • Fixed a bug with the Dropdown Menu not opening on Android devices. (#6212)
  • Fixed the double-tap issue on iOS. (#6961)
  • Fixed a problem with the Comments editor being destroyed after destroying another Handsontable instance. (#7091)
  • Fixed incorrect numericFormat’s type definition. (#7420)
  • Fixed the trimWhitespace tests on Firefox. (#7593)
  • Fixed the [NPM Audit] Github Action job to report found vulnerabilities. (#7621)
  • Fixed some minor iOS problems. (#7659)
  • Fixed the TypeScript definition for the suspended rendering feature. (#7666)
  • Fixed the postbuild and examples:install scripts on Windows. (#7680)
  • Fixed the contents of the production package.json. (#7723)
  • Fixed an issue, where the callbacks for the UndoRedo plugin were called twice. (#7825)
  • Vue: Fixed a problem with displaying and removing rows in the NestedRows plugin. (#7548)
  • React: Fixed an incompatibility in the property type definitions for the HotColumn component. (#7612)

Changed

  • Enhanced the ESLint config file by adding a rule that checks if there are new lines missing before some keywords or statements. (#7691)

8.3.2

Released on March 16, 2021.

For more information on this release, see:

Added

  • Introduced the monorepo to this repository. From now on, handsontable@handsontable/angular@handsontable/react, and @handsontable/vue will all be developed in the same repo - handsontable. (#7380)
  • Added a custom ESLint rule which allows restricting specified modules from loading by import or re-exporting. (#7473)

Fixed

  • Fixed a bug where it was impossible to enable disableVisualSelection for cells/columns. (#5082)
  • Fixed wrong paddings for multi-level headers. (#5086)
  • Fixed problems with the current option of the disableVisualSelection setting. (#5869)
  • Fixed problems with the header option of the disableVisualSelection setting. (#6025)
  • Fixed a bug where the “double-tap-to-zoom” gesture prevented the editor from opening properly on some mobile devices. (#7142)
  • Fixed a bug where calling the updateSettings method in the body of some callbacks would break the table. (#7231)
  • Fixed an issue where the maxRows and maxCols options interfered with hidden index calculations. (#7350)
  • Fixed problems with doubled borders being displayed when window was a scrollable container. (#7356)
  • Fixed a bug where value population from an edited cell would result in a console error. (#7382)
  • Fixed a bug where the dropdown cell type would not work on Safari 14+. (#7413)
  • Fixed a bug where the AutoRowSize plugin would break the table when placed in an iframe. (#7424)
  • Fixed bugs in navigation by HOME and END keys with hidden rows/columns enabled. (#7454)
  • Fixed a bug with the trimWhitespace option not working properly. (#7458)
  • Fixed an issue with inconsistent documentation and TypeScript definitions for colWidths and rowHeights options. (#7507)
  • Fixed the incorrect cellTypes module paths in the exports entry of the package.json file. (#7597)
  • Vue: Fixed Remote Code Execution vulnerability in the dev dependencies. (#7620)

8.3.1

Released on February 10, 2021.

For more information on this release, see:

Fixed

  • Fixed an issue where the CSS files could be eliminated during tree-shaking. (#7516)

8.3.0

Released on January 28, 2021.

For more information on this release, see:

Added

  • Introduced a new feature that allows postponing the table render and internal data cache update. The table rendering time can be reduced several-fold times by batching (using the batch method), multi-line API calls, or manually suspending rendering using the suspendRender and resumeRender methods. (#7274)
  • Introduced a possibility to import:
    1. plugins
    2. cell types
    3. editors
    4. renderers
    5. validators as separate modules, along with the Handsontable base. This change allows utilizing only the parts of Handsontable the end application is actually using, without the overhead of the full bundle. (#7403)
  • Added a new workflow for managing and generating changelogs. (#7405)

Fixed

  • Fixed a bug with auto-execution of the first item in the ContextMenu plugin. (#7364)
  • Fixed a bug where column sorting with multi column sorting crashed the table. (#7415)
  • Added a missing entry for the skipRowOnPaste option in the TypeScript definition file. (#7394)
  • Added missing tests to prevent issue #7377 from resurfacing. (#7396)
  • Fixed an issue where altering columns did not update filters attached to columns. (#6830)
  • Fixed typos and wrong return types in the TypeScript definition file. (#7399)
  • Updated the dependencies causing potential security issues, as well as Babel configuration needed after the update. (#7463)

Changed

  • Corrected a typo in a helper method from the ColumnSorting plugin. (#7375)
  • Optimized the performance of rendering the table with numerous spare rows (for minSpareRows, minSpareCols, minRows, and minCols options). (#7439)

8.2.0

Released on November 12, 2020.

For more information on this release, see:

Added

  • Added a new type of an Index Map named LinkedPhysicalIndexToValueMap. (#7276)
  • Added an external dependency, DOMPurify, to add HTML sanitization that should minimize the risk of inserting insecure code using Handsontable built-in functionalities. (#7292)

Fixed

  • Fixed an issue where the container was not updated after trimming rows. (#7241)
  • Fixed an issue where the htmlToGridSettings helper threw an error if a <table> with no rows was passed. (#7311)
  • Fixed an issue where the sorting indicator moved incorrectly when a column was added. (#6397)
  • Fixed an issue where untrimming previously trimmed rows would sometimes result in the table instance not refreshing its height, leaving the row headers improperly rendered. (#6276)
  • Fixed an issue where the hidden columns plugin caused unintended scrolling when some cells were hidden. (#7322)
  • Fixed an issue where an error was thrown while hovering over row/column headers. (#6926)
  • Fixed an issue where table validation caused incorrect data rendering if the hidden rows/column plugin was enabled. (#7301)
  • Fixed an issue where adding 0 rows to the table ended with doubled entries in index mappers’ collections. (#7326)
  • Fixed a problem with the inconsistent behavior of the Context Menu’s “Clear column” disabled status. (#7003)
  • Fixed an issue with parsing multiline cells on pasting text/html mime-type. (#7369)

8.1.0

Released on October 1, 2020.

For more information on this release, see:

Added

  • Added support for resizing non-adjacent selected rows and columns. (#7162)
  • Added e2e tests and reorganized already existing ones. (#6491)

Changed

  • Updated dependencies to meet security requirements. (#7222)
  • Improved performance for TrimRows, HiddenRows and HiddenColumns plugins for big datasets with many trimmed/hidden indexes. (#7223)

Fixed

  • Fixed an issue where the value did not show if the first part of the merged area was hidden. (#6871)
  • Fixed an issue where after selecting the top-left element, resizing the row range was not possible. (#7162)
  • Fixed a bug introduced within (#6871)
  • Fixed an issue where column headers were cut off after hiding and revealing the columns with the HiddenColumns plugin. (#6395)
  • Fixed an issue where a redundant row was added during copy/paste operations in some cases. (#5961)
  • Fixed an issue where too many values were pasted after a column was hidden. (#6743)
  • Fixed a bug where an attempt to move collapsed parent rows, with the NestedRows plugin enabled, resulted in an error. (#7132)
  • Fixed an issue where, after column or row alteration, Handsontable threw an error if ColumnSummary was enabled without defined row ranges. (#7174)
  • Fixed an issue where using updateSettings was breaking column sorting in specific cases. (#7228)
  • Fixed an issue where, if fixedColumnsLeft was defined, rows had their left borders missing after disabling the row headers using updateSettings. (#5735)
  • Fixed an issue where the Handsontable instance could fall into an infinite loop during vertical scrolling. It only happened when the scrollable element was the window object. (#7260)
  • Fixed an issue with moving rows to the last row of the table when the NestedRows plugin was enabled. Repaired some other minor moving-related bugs as well. (#6067)
  • Fixed an issue with adding an unnecessary extra empty line in cells on Safari. (#7262)
  • Fixed an issue with clipped column headers when they were changed before or within usage of updateSettings. (#6004)

8.0.0

Released on August 5, 2020.

For more information on this release, see:

Major changes

This version introduces a completely new architecture for row and column management - index mapper, which is responsible for the storage and management of index values. In prior versions, the calculation between physical and visual indexes was based on callbacks between hooks. That solution slowly led to inconsistencies and the calculation was imperfect in some cases. To fix that there was a major change in the whole system of mapping the indexes. The current solution offers an easier and more straightforward way to perform CRUD and move operations on rows and columns. It keeps all data in one place so getting and managing information is easier and less prone to bugs.

The existing features were adapted to benefit from the new architecture. Apart from that, extra methods and hooks were added and there are few depreciations and removals, too.

Breaking changes

  • Modifying the table’s data by reference and calling render() will not work properly anymore. From this point onward, all the data-related operations need to be performed using the API methods, such as populateFromArray or setDataAtCell.
  • The modifyRow, modifyCol, unmodifyRow, unmodifyCol hooks are no longer needed and were removed. Their functionality can be achived by using API. More information in the 8.0.0 migration guide.
  • skipLengthCache hook was removed, indexMapper is now responsible for the cache and length.
  • The ManualColumnFreeze plugin doesn’t use the ManualColumnMove plugin anymore.
  • The CollapsibleColumns plugin doesn’t use the HiddenColumns plugin anymore.
  • The NestedRows and Filters plugins don’t use the TrimRows plugin anymore.
  • The minSpareRows and minRows options will ensure that the number of visible rows corresponds to the value provided to them (for example, the TrimRows plugin won’t have an impact on the number of displayed rows).
  • toPhysicalRow and toVisualColumn now return null for non-existant rows/columns. #5945).
  • The afterLoadData hook receives a different set of arguments. It used to be just the initialLoad flag, now the first argument is sourceData, followed by initialLoad.
  • The ManualColumnFreeze plugin will now put the unfrozen columns right next to the last frozen one.
  • The RecordTranslator object and the t property available in the plugins were removed.
  • After-prefixed hooks (afterLoadData, afterFilter, etc.) are now called just before the render call.
  • Newly created rows and columns are now placed in the source data in the place calculated from its position in the visual context (they “stick” to their adjacent rows/columns). It also applies to moved rows and columns.
  • When the NestedRows plugin is enabled, moving rows will be possible only using the UI or by calling the dragRows method of the ManualRowMove plugin.
  • The beforeRowResize, afterRowResize, beforeColumnResize, afterColumnResize hooks have the order of their arguments rearranged for the sake of consistency with other hooks and to fix an issue where multiple hooks didn’t get the modified value in the pipeline: #3328.
  • Changed the argument structure in collapsibleColumnstoggleCollapsibleSection method: #6193.
  • The following sublist shows changes related to the refactor of HiddenColumns and CollapsibleColumns. They will be compatible with upcoming IndexMappers #5945 along with other adjustments #6547:
    • Hidden indexes aren’t rendered. As a consequence hooks beforeValueRender, beforeRenderer, afterRenderer, modifyColWidth, beforeStretchingColumnWidth etc. will be executed just for some of the columns (just the rendered ones).
    • The getColWidth for hidden index will return 0 – it used to return 0.1. Also, it will no longer be called internally, the need can be now achieved by managers of rows and columns.
    • The modifyColWidth hook will not be called internally. However, it will be executed when the user will call the getColWidth.
    • Hidden indexes aren’t rendered. As a consequence hooks beforeValueRender, beforeRenderer, afterRenderer, modifyColWidth, beforeStretchingColumnWidth etc. will be executed just for some of the columns (just the rendered ones).
    • listen function from the core API used to accept modifyDocumentFocus as optional parameter, this parameter was removed.
    • CustomBorders plugin was adapted to work with HiddenColumns properly. From now on hiding cells at the start or the end of the range will also hide their borders. Hiding a single cell with borders will hide all of its borders. #7083.
    • CollapsibleColumns will no longer use HiddenColumns plugin to work. #6204.
    • Adjusted HiddenColumns to be compatible with upcoming IndexMappers. #6547.
    • hiddenRow and hiddenColumn hooks were removed. They were used to check if a given index is hidden in the HiddenColumns and HiddenRows plugins. Since now there may be more sources of hiding indexes they have been replaced by IndexMapper with the new isHidden method. It keeps the broad information about hidden indexes and their sources.
    • rowOffset and colOffset were removed since they aliased the methods from Walkontable. #6547.
  • Changes related to adjusting HiddenRows to new IndexMapper architecture are #6177:
    • Adjusted HiddenRows to new IndexMapper architecture. #6177.
  • Developed a unified way to identify HOT “input” elements. All input elements owned by HOT got an attribute “data-hot-input” which are identified by that key. #6383.
  • NestedHeaders plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers. #6716
  • The right mouse button (RMB) click on the corner when there is no data will show all options disabled. #6547.
  • Left mouse button (LMB) click on the top left corner will now select all cells along with their headers. #6547.
  • Removed the experimental GanttChart plugin. #7022.
  • Adding properties which were not defined on initialization or by updateSettings to the source data is possible only by the usage of setSourceDataAtCell. #6664.
  • Passing columns or data inside the settings object when calling the updateSettings method will result in resetting states corresponding to rows and columns (ie. row/column sequence, column width, row height, freezed columns etc.). The same behavior can be seen when using loadData. In such cases, it is assumed that a new dataset is introduced upon calling updateSettings or loadData .#6547.

New features

  • Added the Index Mapper architecture and its API. #5112 (more information available in the PRs #5945 with additional changes in #6547)
  • Added a new batch method. #5945 along with other adjustments (#7068)

Deprecations

  • The ObserveChanges plugin is no longer enabled by columnSorting and became deprecated. #5945
  • HeaderTooltips plugin becomes deprecated and will be removed in the next major version. #7023
  • IE support is deprecated and will be removed by the end of the year. #7026

Changelog

  • Added modifySourceData hook and setSourceDataAtCell method. #6664
  • Added new argument to scrollViewportTo method: optional considerHiddenIndexes which is a boolean. #6547
  • Added additional information available in the cell meta object - the language. #6254.
  • Added a possibility to allow cancelling of autofill in the beforeAutofill hook. #4441
  • Added support for newer versions of moment, numbro and pikaday. #5159
  • Added afterAutoFill hook. #6135
  • Added deprecated warning messages mechanism for plugin hooks. #6613
  • Added missing types for `instance.undoRedo`. #6346
  • Added countRenderableColumns method to the TableView. #6177
  • Added missing “hide” property in CustomBorders typings. #6788
  • Added beforeSetCellMeta hook with an ability to cancel the changes. #5388
  • Added additional test for autofill plugin. #6756
  • Changed how ManualRowMove and ManualColumnMove plugins work #5945
  • Click on a row header will select all cells (also hidden). #2391
  • Extracted Cell-Meta logic from Core to separate module. #6254
  • The CellMeta manager was refactored for future features and improvements. #6233
  • Rows can be resized to less than rowHeights. #6149
  • Left mouse button (LMB) click on the corner will now select all cells. #6547
  • Passing columns or data inside the settings object when calling the updateSettings method will result in resetting states corresponding to rows and columns (ie. row/column sequence, column width, row height, freezed columns etc.). The same behavior can be seen when using loadData. In such cases, it is assumed that a new dataset is introduced upon calling updateSettings or loadData .#6547.
  • The right mouse button (RMB) click on the corner, column and row headers will show just some options, defined by newly created specification #7082
  • Hidden indexes will no longer be rendered, as a consequence afterRenderer, modifyColWidth, beforeStretchingColumnWidth will be executable only on visible (meaning, rendered) rows and columns. #6547
  • The getColWidth for hidden index will return 0 - it used to return 0.1 #6547
  • The modifyColWidth hook isn’t called internally. However, it will be executed when the user will call the getColWidth. #6547
  • Hidden rows/columns won’t rendered anymore. As a consequence hooks beforeValueRender, beforeRenderer, afterRenderer, modifyColWidth, beforeStretchingColumnWidth etc. will be executed just for some of the columns (just the renderable ones). #6547
  • Selection behavior changed when hiding cells from the ContextMenu, now it is selecting a column on the right when there is space on right to the last selected column, selecting a column on the left otherwise. #6547
  • Developed a unified way to identify HOT “input” elements. All input elements owned by HOT got an attribute “data-hot-input” which are identified by that key. #6383
  • NestedHeaders plugin was rewritten, from now on, only a tree-like structure will be allowed, meaning, there will be no possibility to place nested headers in-between layers. #6716
  • CustomBorders plugin was adapted to work with HiddenColumns properly, from now on hiding cells at the start or at the end of a range will also hide their borders. Also, hiding a single cell with borders will hide all of its borders. #7083
  • CollapsibleColumns will no longer use HiddenColumns plugin to work. #6204
  • Modifying the table’s data by reference and calling `render()` will not work properly anymore. From this point onward, all the data-related operations need to be performed using the API methods, such as populateFromArray or setDataAtCell. #5945
  • Removed dependencies between plugins: the ManualColumnFreeze plugin doesn’t use the ManualColumnMove, the CollapsibleColumns plugin doesn’t use the HiddenColumns plugin, NestedRows plugin doesn’t use the TrimRows plugin, Filters plugin doesn’t use the TrimRows plugin anymore. #5945 along with other adjustments [#6547](https:// github.com/handsontable/handsontable/pull/6547):
  • The minSpareRows and minRows options will ensure that the number of visible rows corresponds to the value provided to them (for example, the TrimRows plugin won’t have an impact on the number of displayed rows). #5945
  • toPhysicalRow and toVisualColumn now return null for non-existant rows/columns. #5945
  • The afterLoadData hook receives a different set of arguments. It used to be just the initialLoad flag, now the first argument is sourceData, followed by initialLoad. #5945
  • The ManualColumnFreeze plugin unfreezes the column just after the “line of freeze”. #5945
  • The RecordTranslator object and the t property available in the plugins were removed. #5945
  • After-prefixed hooks (afterLoadData, afterFilter, etc.) are now called just before the render call. #5945
  • Newly created rows and columns are now placed in the source data in the place calculated from its position in the visual context (they “stick” to their adjacent rows/columns). It also applies to moved rows and columns. #5945
  • When the NestedRows plugin is enabled, moving rows will be possible only using the UI or by calling the dragRows method of the manualRowMove plugin. #5945
  • The beforeRowResize, afterRowResize, beforeColumnResize, afterColumnResize hooks have the order of their arguments rearranged for the sake of consistency with other hooks. #3328
  • Changed the argument structure in collapsibleColumnstoggleCollapsibleSection method. #6193
  • Updated the moment, numbro and pikaday dependencies to their latest versions. #6610
  • Standardize the `z-index` properties between the overlays. #6269
  • HeaderTooltips plugin becomes deprecated and will be removed in the next major version. #7023
  • IE support is depreacated and will removed by the end of the year. #7026
  • Removed firstVisibleColumn CSS class as no longer needed. #6547
  • Removed helpers that covered IE8 support or are not needed anymore. #6525
  • Removed old unnecessary warning about beforeChange callback. #6792
  • Removed debug key (key, css, docs). #6672
  • Removed hiddenRow and hiddenColumn hooks. #6547
  • Removed optional argument modifyDocumentFocus from the listen function. #6547
  • Removed rowOffset and colOffset public API methods since they aliased the methods from Walkontable. #6547
  • Removed the experimental GanttChart plugin. #7022
  • Removed post-install warning from package.json file #6608
  • The modifyRow, modifyCol, unmodifyRow, unmodifyCol and skipLengthCache hooks are no longer needed and were removed. #5945
  • Fixed a problem with data not being added to the table properly with the columnSorting option enabled. #2685
  • Fixed a problem with loadData not resetting the row order changed by the ManualRowMove plugin. #3568
  • Fixed a bug, where using alter’s insert_row after using the loadData method and sorting the data would add unintentional additional rows to the table. #3809
  • Fixed a bug, where blank rows appeared in the middle of the table after using loadData along with the minSpareRows option. #3937
  • Fixed a problem with the ColumnSummary plugin not working properly after adding new rows using the Context Menu and sorting the data. #3924
  • Fixed a bug, where calling loadData with an object-based data source would not work properly. #4204
  • Fixed a problem with the Hidden Columns settings being reset after calling updateSettings. #4121
  • Fixed a bug with the Filters plugin using incorrect indexes after moving and/or sorting the table. #4442
  • Fixed a bug that caused a column to contain improper data after moving it to index 0. #4470
  • Fixed a bug with the afterRowMove hook receiving an improper target argument. #4501
  • Fixed a problem with the ManualColumnFreeze plugin enabling ManualColumnMove, even if it was declared as false. #4553
  • Fixed a problem with plugins using arrayMappers not working properly after updating the dataset. #4567
  • Fixed a bug, where calling loadData with minSpareRows and manualRowMove enabled caused the table to improperly load the data. #4576
  • Fixed a bug, where enabling columnSorting caused the manualColumnFreeze to be unusable. #4601
  • Fixed a problem, where the columns were assigned improper widths after inserting additional columns or removing any of them. #4666
  • Fixed a bug, where moving rows was impossible while persistentState was enabled. #4713
  • Fixed a bug, where manualColumnMove didn’t work if the dataset was empty. #4926
  • Fixed a bug with the collapseAll method from the collapsibleColumns plugin did not work properly if columnSorting was enabled. #4999
  • Fixed a bug, where calling loadData with minSpareRows enabled would cause unwanted blank rows to appear. #5707
  • Fixed a bug with the afterColumnMove hook receiving an improper target argument. #5173
  • Fixed a problem, where filtering data after moving rows would not work properly. #5178
  • Fixed a bug, where calling loadData made NaN appear in the column headers. #5369
  • Fixed a bug with the skipColumnOnPaste option not working properly when using columnSorting and hiddenColumns. #5824
  • Fixed a bug with the TrimRows plugin did not work properly after moving rows. #5860
  • Fixed a problem with minSpareRows not working properly with the trimRows plugin being used. #5862
  • Fixed a problem, where it was impossible to filter the data declared in the NestedRows plugin . #5889
  • Fixed a bug, where filtering and sorting data would cause the toVisualRow method to return the wrong results. #5890
  • Fixed a bug with the filters and trimRows plugins not working properly alongside each other. #5915
  • Fixed a bug, where manualColumnMove would not work properly when the data object properties count would be lower than the table column count. #5931
  • Fixed a bug with the TrimRows plugin did not work properly with the startRows option. #5953
  • Fixed a problem, where using loadData after sorting would not work as expected. #5956
  • Fixed a problem with the beforeColumnMove and afterColumnMove hooks not containing information about their destination indexes. #6005
  • Fixed a problem where using filters and minSpareRows would make the table add an empty row at the beginning of the table. #6278
  • Fixed a bug with the manualRowMove plugin would duplicate data in the moved rows, when used with a row index greater than the table row count. #6088
  • Fixed a bug, where the toVisualRow method returned null when using the trimRows and columnSorting plugins together. #6310
  • Fixed a problem, where calling updateSettings in the afterColumnMove hook callback would have no effect. #4480
  • Fixed a bug, where calling loadData would make the filters plugin to not behave as expected. #5244
  • Fixed a bug, where detaching a child from a parent in the NestedRows plugin would cause a `+/-` button misalignment. #5900
  • Fixed a problem with the ColumnSummary plugin creating a doubled summary row. #5794
  • Fixed a bug, where moving children between parents using the NestedRows plugin would throw an error. #6066
  • Fixed a bug, where adding rows by modifying the data by reference while using the NestedRows plugin would throw an error. #3914
  • Fixed a bug, where merging cells would conflict with the columnSorting plugin. #6086
  • Fixed a bug, where the row headers would stay visible after removing all the table columns. #6412
  • Fixed an issue where Hidden columns become visible when the user ran updateSettings. #4121
  • Fixed an issue where using hiddenColumns and stretchH showed a redundant horizontal scrollbar. #4181
  • Fixed an issue in which if the last column was a hidden column and stretchH was enabled, the last column was displayed. #4370
  • Fixed an issue where updateSettings performance was very low because of hiddenColumns being rendered. #4381
  • Fixed an issue where collapse was not working correctly with custom cell renderers. #4716
  • Fixed an incorrect header name when user defined more columns in the NestedHeaders plugin. #4716
  • Fixed an issue where HiddenColumns did not work properly with ColumnSorting. #5571
  • Fixed an issue where ManualColumnMove should work with HiddenColumns. #5598
  • Fixed an issue where hiddenColumns option interfered with the keyboard movement. #5704
  • Fixed an issue where after hiding the first two rows, the row headers became de-synchronized by 1px. #5817
  • Fixed an issue where hiding columns affected selection of hidden columns. #5871
  • Fixed an issue where if collapsibleColumns were set to true it was impossible to exit selection mode. #5875
  • Fixed an issue where hiddenColumns did not work properly with `autoWrapRow/autoWrapCol`. #5877
  • Fixed an issue on IE where hiding the first column caused a display of double border for top left corner. #5881
  • Fixed an issue where nestedHeaders duplicated a header name if more columns are added. #5882
  • Fixed an issue where HiddenColumns plugin unset cell’s renderer. #5883
  • Fixed an issue where hiddenColumns had stored visual indexes and should have used physical indexes. #5909
  • Fixed an issue where hidden columns should be unrecoverable. #6113
  • Fixed an issue where row selection ignored columns that are hidden at the end. #6181
  • Fixed an issue where defining data with more data than used in columns caused an issue with showing column once it was hidden. #6426
  • Fixed an issue where hiding rows, while there was a merged area, involved caused data shifting and unexpected merged area coordinates. #6376
  • Fixed an issue where colHeader was truncated after moving hiddenColumn. #6463
  • Fixed an issue where the last hidden column was visible upon column resizing. #6557
  • Fixed an issue where with hiding columns after moved them manually. #6668
  • Fixed an issue where expanding a collapsed column caused expanding of a child columns except for the first one. #5792
  • Fixed an issue where setting columnSorting to true (on initialization or via updateSettings) made headers non-collapsible programmatically via collapseAll method. #4999
  • Fixed an issue where CustomBorders plugin was missing in the definition file. #6477
  • Fixed incorrect size of wtHiderand wtHolder in overlays. #3873
  • Fixed an issue where updateSettings could not update tableClassName. #6295
  • Fixed an issue where JSON data with empty value was losing some double quotes when pasted into a cell. #6167
  • Fixed an issue where some classes for the table were missing if one of them was empty. #6371
  • Fixed an issue where clicking in a contextmenu’s border opened the native context menu. #6218
  • Fixed the error that ocurred during loading of E2E test runner in Edge and IE. #6713
  • Fixed the inconsistency and problems with adding rows from the corner when all rows are trimmed. #7061
  • Fixed an issue where using read-only and alignment from the context menu was disabled when all columns were selected. #7114
  • Fixed an issue where setting focus to a column to open context menu after applying a filter was impossible. #7005
  • Fixed an issue where minSpareCols with undo added too many columns. #6363
  • Fixed the inconsistency in selection when using the right mouse button for first row/column. #6334
  • Fixed an issue where undoing column removal caused column headers to lack a header. #6992
  • Fixed an issue where readOnly for column was erased (did not apply) if filters were used. #6559
  • Fixed an issue where readonly property was lost after declining confirmation in beforeRemoveCol or beforeRemoverow. #6332
  • Fixed an issue where readOnly state for some cells was lost when rows with trimRows turned on were removed. #6990
  • Fixed incorrect column header highlight when merged cells were unmerged and hiddenColumns were used. #6978
  • Fixed an issue where after hiding the first row, the second row top border disappeared. #6977
  • Fixed an issue with incorrect selection after hiding the first row. #6831
  • Fixed an issue where hiding the first row caused blue highlight in column headers selection to disappear. #6976
  • Fixed wrong selection area after sorting with hidden rows. #6386
  • Fixed an issue where it was not possible to use selectAll when the first row was hidden. #6975
  • Fixed an issue where it was possible to select hidden row or column. #6974
  • Fixed an issue where row indexes changed if the first row was hiding after moving row from bottom to top. #6965
  • Fixed an issue where selection skipped the highest parent. #6770
  • Fixed an iisue where nestedRows blocked table from loading if data was not provided. #6928
  • Fixed an isse where it was impossible to go back to the original cell after dragging down. #4233
  • Fixed an issue where keyboard navigation did not work on merged cells with hidden rows/columns. #6973
  • Fixed an issue where trimRows and hiddenRows with specific settings broke borders. #6904
  • Fixed wrong union type for startPosition. #6840
  • Fixed type mismatch for `Handsontable.plugins.ContextMenu`. #6347
  • Fixed an issue where manualColumnMove did not modify the columns in updateSettings. #5200
  • Fixed rendering issue on column udpate with updateSettings. #3770
  • Fixed an issue where expanding a collapsed column was also expanding ‘child’ collapsed columns, except the first child. #5792
  • Fixed an issue with inproper selection for headers when the first column was hidden. #5999
  • Fixed an issue where it was not possible to align cells if the selection was made upward. #6600
  • Fixed an issue where currentColClassName did not work properly with nestedHeaders. #5861
  • Fixed an issue with scrollbar and dimension calculation in Firefox for toggling column visibility with fixed columns and stretchH. #6186
  • Fixed an issue with undoing the nested row removal. #6433
  • Fixed an isse where getSourceData functions returned wrong data for nested rows. #5771
  • Fixed na issue where the Formulas plugin did not work with nestedRows. #4154
  • Fixed an issue where nested headers and hidden columns highlighted ad additional column when used together. #6881
  • Fixed an issue where getByRange for sourceData did not work properly with nested object data. #6548
  • Fixed an issue where `window.frameElement` threw errors in MSEdge, IE and Safari. #6478
  • Fixed an issue where `DataSource.countColumns` returned invalid number of columns for nested objects. #3958
  • Fixed an issue where mergedCells with hidden cells caused problems with rendering. #7020
  • Fixed an issue where it was not possible to move column when all columns were selected by `ctrl + a`. #6355
  • Fixed an issue where double click on the column resize handle did not adjust size correctly. #6755
  • Fixed an issue where the cell meta was retrieved using the wrong coordinates. #6703
  • Fixed nested rows incorrect state after changing data. #5753
  • Fixed an issue in EDGE where the dropdown menu onMouseOut event caused critical errors when hovering over vertical scrollbar. #6699
  • Fixed an issue with too many layers of highlight with noncontinuous selection on merged cells. #7028
  • Fixed an issue where NestedHeaders did not allow to define header level as an empty array. #7035
  • Fixed an issue where passing nestedHeaders as a single empty array stoped the table from rendering. #7036
  • Fixed an issue where opening a context menu for a column when its hidden data was selected did not block adding of rows by the menu. #7050
  • Fixed an issue where it was not possible to navigate past hidden column using keyboard if` hot.updateSettings` was called in afterSelection. #3726
  • Fixed an issue where headers did not export with exportToFile in the specific case. #4176
  • Fixed an issue with types mismatch. #6035
  • Fixed an issue where manual row resize handler threw an error when bottom rows overlay was enabled. #6435
  • Fixed an issue where the afterRowResize hook shared incorrect results in the second parameter. #6430
  • Fixed an issue where the row/column resize hooks should not have returned null. #7074
  • Fixed the loss of selection after merging from headers. #7076
  • Fixed an issue where calling updateSettings changed the index of frozen columns via freezeColumn method. #6843
  • Fixed an issue where deleting the last column via updateSettings which was part of the selection caused scroll to the bottom. #5849
  • Fixed an issue where it was not possible to hide rows and merge cells at the same time. #6224
  • Fixed the wrong data in merge cells after the hidden column and additionally an error occurs. #6888
  • Fixed an issue where it was not possible to change cell type via setCellMeta. #4793
  • Fixed an issue where cell editor did not dynamically changed while changing the cell type. #4360
  • Fixed an issue where it was not possible to unmerge cells if part of them was hidden. #7095
  • Fixed an issue where calling clear method removed the focus from the table. #7099
  • Fixed an issue where clear method did not work for hidden data. #7097
  • Fixed an issue where the editor was moved by 1px when the first row / column was hidden. #6982
  • Fixed an issue where headers were deselected after undoing removal. #6670
  • Fixed an issue with improper selection after insert column/row when mergeCells was enabled. #4897
  • Fixed an issue where wrong cell meta was removed when deleting rows. #6051
  • Fixed wrong types of beforeRowMove arguments. #6539
  • Fixed an issue where selection of a whole row did not happen consequently after selecting a row header. #5906
  • Fixed an issue where it was not possible to use physical row index instead of visual one. #6309
  • Fixed an issue where incorrect data was returned after undoing the remove column option. #5000
  • Fixed - Copy and paste works properly also when selecting hidden columns when: all columns within a selected range are hidden and when just some columns within a selected range are hidden. #7043.
  • Fixed an issue where it was impossible to add new row in the nestedRows. #5133
  • Fixed an issue where afterOnCellMouseDown returned (0,0) coords after clicking on the topleft corner. #3978
  • Fixed an issue where persisted manualColumnMove was not restored when using loadData. #5207
  • Fixed issues with filtering results in blank rows. #5208
  • Fixed an issue where changing data on collapsed rows resulted in error. #5328
  • Fixed an issue where the manualColumnMove operation affected the column order of data loaded by loadData. #5591
  • Fixed an issue where nestedRows did not allow to keep rowHeaders after collapsing. #5874
  • Fixed performance and CPU issue caused by using some handsontable properties. #6058
  • Fixed an error with the ColumnSummary plugin when trying to create a row. #6300
  • Fixed an error where `walkontable.css` and `handsontable.css` stylesheets were out of sync. #6381
  • Fixed an issue where colHeaders order was not updated after manual move with empty object data source. #6413
  • Fixed “detach from parent” option. #6432
  • Fixed an issue where PreventOverflow feature did not work if MultiColumnSorting plugin was enabled. #6514
  • Fixed an issue where old CSS classes were not removed after updateSettings. #6575
  • Fixed an issue where columnSummary, Filters and spare rows were causing ‘RangeError: Maximum call stack size exceeded’. #6695
  • Fixed an issue where afterSelectionEnd returned incorrect data when clicking on a column when all rows were hidden. #7045
  • Fixed an issue where wrapping was not applied after setting trimWhitespace to false. #6232
  • Fixed an issue with additional selection border in iOS. #7103
  • Fixed an issue with rendering different borders. #6955
  • Fixed an issue with BACKSPACE not working properly in the filter by value input. #6842
  • Fixed an issue with Undo/Redo not working with fixing columns. #6869
  • Added a missing argument in the deepObjectSize function. #6821
  • Fixed an issue where the table threw errors while clicking the cells if the Handsontable was initialized with fixedRowsTop and fixedRowsBottom higher than rows length. #6718
  • Fixed an issue where it was not possible to change the state of checkbox-type, non-adjacent cells using SPACE. #4882
  • Fixed an issue where resizing made rows shorter than expected and caused row misalignment. #6429
  • Fixed an issue where Handsontable was missing rows when preventOverflow with updateSettings were used. #4303
  • Adding properties which were not defined on initialization or by updateSettings to the source data is possible only by the usage of setSourceDataAtCell. #6664.

7.4.2

Released on February 19, 2020.

For more information on this release, see:

Changes

  • Fixed an issue where the cell value could not be edited on mobile devices. (#6707)
  • Fixed an issue where white lines appeared at the bottom of cell headers. (#6459)
  • Fixed a bug, where resizing the window (while using Angular) would result in Handsontable not stretching properly and throwing an error. (#6710)

7.4.1

Released on February 19, 2020.

Due to technical issues, version 7.4.2 patch needed to be released.

All the changes from 7.4.1 are included in the 7.4.2 release.

7.4.0

Released on February 12, 2020.

For more information on this release, see:

Changes

  • Fixed the problem, where the onCellMouseUp hook was fired for all mouse buttons except RMB, which was not consistent with the onCellMouseDown hook. To make the changes more consistent with the native dblclick event (which is triggered only for the LMB button), the onCellDblClick and onCellCornerDblClick hooks were modified to also fire only for LMB. (#6507)
  • Updated moment, pikaday and numbro to their latest versions. (#6610)
  • Fixed a bug with numbers not being presented properly with the pt_BR culture setting. (#5569)
  • Extended the Babel config with the possibility to use private methods, optional chaining and nullish coalescing operator. (#6308)
  • Updated some of the internal configs, updated dev-dependencies, housekeeping etc. (#6560, #6609, #6612, #6629, #6574, #6565)

Older versions

The changelogs from older versions of Handsontable are available on GitHub.