JavaScript Data Grid Release notes

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

12.4.0

Released on May 23, 2023.

For more information on this release, see:

Added

Fixed

12.3.3

Released on March 28, 2023.

For more information on this release, see:

Added

Fixed

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

Removed

Fixed

12.3.0

Released on December 14, 2022.

For more information on this release, see:

Added

Fixed

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 (opens new window)

Deprecated

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

Removed

Fixed

12.1.3

Released on September 22, 2022.

For more information on this release, see:

Removed

Fixed

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 (opens new window)
  • 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 (opens new window)

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 (opens new window)

12.1.0

Released on June 28, 2022.

For more information on this release, see:

Added

Changed

Deprecated

Fixed

12.0.1

Released on May 16, 2022.

For more information on this release, see:

Fixed

12.0.0

Released on April 28, 2022.

For more information on this release, see:

Added

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 (opens new window) [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 (opens new window) [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 (opens new window) [migration guide]
  • Breaking change: Changed the order of execution for two hooks: now, beforeKeyDown is properly fired before afterDocumentKeyDown. #6236 (opens new window) [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 (opens new window) [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 (opens new window) [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 (opens new window) #9364 (opens new window) #9365 (opens new window) [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 (opens new window)
  • 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 (opens new window)
  • Changed the version of the HyperFormula optional dependency from ^1.2.0 to ^2.0.0. #9411 (opens new window)
  • 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 (opens new window)

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 (opens new window) [migration guide]
  • Breaking change: Removed the Shift + Page Up/Page Down keyboard shortcuts from the cell editing context. #9401 (opens new window) [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 (opens new window)
  • React: Removed the enzyme dependency from the React wrapper. #9151 (opens new window)

Fixed

11.1.0

Released on January 13, 2022

For more information on this release, see:

Added

Changed

Fixed

11.0.1

Released on November 17, 2021.

For more information on this release, see:

Fixed

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 (opens new window)
  • Breaking change (Vue): Added support for modularization to the Vue wrapper. #8820 (opens new window)
  • Breaking change (React): Added support for modularization to the React wrapper. #8819 (opens new window)
  • Breaking change (Angular): Added support for modularization to the Angular wrapper. #8818 (opens new window)
  • 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 (opens new window)
  • Added a new locale option, to properly handle locale-based data. #8897 (opens new window)
  • Added a GitHub Actions workflow that covers testing Handsontable and the wrappers. #8652 (opens new window)
  • Added new direction helpers (internal API) that lay ground for future RTL support. #8868 (opens new window)

Changed

Fixed

10.0.0

Released on September 29, 2021.

For more information on this release, see:

Changed

Fixed

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 (opens new window)
  • Fixed column header sizes not being updated on updateSettings calls containing columns. #7689 (opens new window)
  • Fixed functional keys' behavior to prevent unexpected editing. #7838 (opens new window)
  • Fixed missing collapsible indicator on IE. #8028 (opens new window)
  • Fixed support for row and column headers in the parseTable utility. #8041 (opens new window)
  • Fixed a bug where not providing a data object with the NestedRows plugin enabled crashed the table. #8171 (opens new window)
  • 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 (opens new window)
  • Vue: Fixed a problem in the Vue wrapper, where destroying the underlying Handsontable instance caused it to throw errors and crash. #8311 (opens new window)
  • React: Fixed a problem in the React wrapper, where destroying the underlying Handsontable instance caused it to throw errors and crash. #8311 (opens new window)
  • Angular: Fixed a problem in the Angular wrapper, where destroying the underlying Handsontable instance caused it to throw errors and crash. #8311 (opens new window)

Added

9.0.1

Released on June 17, 2021.

For more information on this release, see:

Removed

Fixed

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

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 (opens new window))
  • Breaking change: Changed the afterAutofill and beforeAutofill hooks' signatures. (#7987 (opens new window))
  • Upgraded eslint and eslint-related modules. (#7531 (opens new window))
  • Added fit & fdescribe to restricted globals in test files. (#8088 (opens new window))

Deprecated

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

Removed

Fixed

8.4.0

Released on May 11, 2021.

For more information on this release, see:

Added

Fixed

Changed

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

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 (opens new window))
  • Added a custom ESLint rule which allows restricting specified modules from loading by import or re-exporting. (#7473 (opens new window))

Fixed

8.3.1

Released on February 10, 2021.

For more information on this release, see:

Fixed

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 (opens new window))
  • 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 (opens new window))
  • Added a new workflow for managing and generating changelogs. (#7405 (opens new window))

Fixed

Changed

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

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 (opens new window))
  • Added an external dependency, DOMPurify, to add HTML sanitization that should minimize the risk of inserting insecure code using Handsontable built-in functionalities. (#7292 (opens new window))

Fixed

  • Fixed an issue where the container was not updated after trimming rows. (#7241 (opens new window))
  • Fixed an issue where the htmlToGridSettings helper threw an error if a <table> with no rows was passed. (#7311 (opens new window))
  • Fixed an issue where the sorting indicator moved incorrectly when a column was added. (#6397 (opens new window))
  • 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 (opens new window))
  • Fixed an issue where the hidden columns plugin caused unintended scrolling when some cells were hidden. (#7322 (opens new window))
  • Fixed an issue where an error was thrown while hovering over row/column headers. (#6926 (opens new window))
  • Fixed an issue where table validation caused incorrect data rendering if the hidden rows/column plugin was enabled. (#7301 (opens new window))
  • Fixed an issue where adding 0 rows to the table ended with doubled entries in index mappers' collections. (#7326 (opens new window))
  • Fixed a problem with the inconsistent behavior of the Context Menu's "Clear column" disabled status. (#7003 (opens new window))
  • Fixed an issue with parsing multiline cells on pasting text/html mime-type. (#7369 (opens new window))

8.1.0

Released on October 1, 2020.

For more information on this release, see:

Added

Changed

Fixed

  • Fixed an issue where the value did not show if the first part of the merged area was hidden. (#6871 (opens new window))
  • Fixed an issue where after selecting the top-left element, resizing the row range was not possible. (#7162 (opens new window))
  • Fixed a bug introduced within (#6871 (opens new window))
  • Fixed an issue where column headers were cut off after hiding and revealing the columns with the HiddenColumns plugin. (#6395 (opens new window))
  • Fixed an issue where a redundant row was added during copy/paste operations in some cases. (#5961 (opens new window))
  • Fixed an issue where too many values were pasted after a column was hidden. (#6743 (opens new window))
  • Fixed a bug where an attempt to move collapsed parent rows, with the NestedRows plugin enabled, resulted in an error. (#7132 (opens new window))
  • Fixed an issue where, after column or row alteration, Handsontable threw an error if ColumnSummary was enabled without defined row ranges. (#7174 (opens new window))
  • Fixed an issue where using updateSettings was breaking column sorting in specific cases. (#7228 (opens new window))
  • Fixed an issue where, if fixedColumnsLeft was defined, rows had their left borders missing after disabling the row headers using updateSettings. (#5735 (opens new window))
  • 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 (opens new window))
  • 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 (opens new window))
  • Fixed an issue with adding an unnecessary extra empty line in cells on Safari. (#7262 (opens new window))
  • Fixed an issue with clipped column headers when they were changed before or within usage of updateSettings. (#6004 (opens new window))

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 (opens new window).
  • 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 (opens new window)).
  • 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 (opens new window).
  • Changed the argument structure in collapsibleColumns' toggleCollapsibleSection method: #6193 (opens new window).
  • The following sublist shows changes related to the refactor of HiddenColumns and CollapsibleColumns. They will be compatible with upcoming IndexMappers #5945 (opens new window) along with other adjustments #6547 (opens new window):
    • 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 (opens new window).
    • CollapsibleColumns will no longer use HiddenColumns plugin to work. #6204 (opens new window).
    • Adjusted HiddenColumns to be compatible with upcoming IndexMappers. #6547 (opens new window).
    • 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 (opens new window).
  • Changes related to adjusting HiddenRows to new IndexMapper architecture are #6177 (opens new window):
  • 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 (opens new window).
  • 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 (opens new window)
  • The right mouse button (RMB) click on the corner when there is no data will show all options disabled. #6547 (opens new window).
  • Left mouse button (LMB) click on the top left corner will now select all cells along with their headers. #6547 (opens new window).
  • Removed the experimental GanttChart plugin. #7022 (opens new window).
  • Adding properties which were not defined on initialization or by updateSettings to the source data is possible only by the usage of setSourceDataAtCell. #6664 (opens new window).
  • 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 (opens new window).

New features

Deprecations

Changelog

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

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 (opens new window))
  • Fixed an issue where white lines appeared at the bottom of cell headers. (#6459 (opens new window))
  • Fixed a bug, where resizing the window (while using Angular) would result in Handsontable not stretching properly and throwing an error. (#6710 (opens new window))

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

Older versions

The release notes about older versions of Handsontable are available on GitHub (opens new window).