{"record":{"id":"7bc4e723226045bd","repo":"handsontable/handsontable","slug":"both-rowheights-and-minrowheights-are-defined","errorCode":null,"errorMessage":"Both `rowHeights` and `minRowHeights` are defined in your configuration. As one is the alias of the other, only one of them can be used at a time. `rowHeights` will be used as the row height configuration.","messagePattern":"Both `rowHeights` and `minRowHeights` are defined in your configuration\\. As one is the alias of the other, only one of them can be used at a time\\. `rowHeights` will be used as the row height configuration\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"handsontable/src/core.ts","lineNumber":3502,"sourceCode":"\n    if (isDefined(settings.rows)) {\n      throwWithCause('The \"rows\" setting is no longer supported. Do you mean startRows, minRows or maxRows?');\n    }\n    if (isDefined(settings.cols)) {\n      throwWithCause('The \"cols\" setting is no longer supported. Do you mean startCols, minCols or maxCols?');\n    }\n    if (isDefined(settings.ganttChart)) {\n      throwWithCause('Since 8.0.0 the \"ganttChart\" setting is no longer supported.');\n    }\n\n    warnAboutRemovedOptions(settings as Record<string, unknown>);\n\n    // The `columns` option (or the state its function form reads) may change in this call - drop\n    // getColHeader's index translation cache so it rebuilds against the updated settings.\n    columnsSettingIndexes = null;\n\n    if (isDefined(settings.rowHeights) && isDefined(settings.minRowHeights)) {\n      warn('Both `rowHeights` and `minRowHeights` are defined in your configuration. ' +\n        'As one is the alias of the other, only one of them can be used at a time. ' +\n        '`rowHeights` will be used as the row height configuration.');\n    }\n\n    // eslint-disable-next-line no-restricted-syntax\n    for (i in settings) {\n      if (i === 'data' || i === 'language') {\n        // Do nothing. loadData and language change will be triggered later\n\n      } else if (i === 'className') {\n        setClassName('className', settings.className);\n\n      } else if (i === 'tableClassName' && instance.table) {\n        setClassName('tableClassName', settings.tableClassName);\n\n        instance.view._wt.wtOverlays.syncOverlayTableClassNames();\n\n      } else if (Hooks.getSingleton().isRegistered(i) || Hooks.getSingleton().isDeprecated(i)) {","sourceCodeStart":3484,"sourceCodeEnd":3520,"githubUrl":"https://github.com/handsontable/handsontable/blob/2c365a3291b45a331a6de1ed10a9deba683cfbc3/handsontable/src/core.ts#L3484-L3520","documentation":"rowHeights and minRowHeights are aliases of the same row-height configuration option. Defining both in one configuration is ambiguous, so Handsontable warns that only rowHeights will take effect and minRowHeights is discarded.","triggerScenarios":"Passing an init config or updateSettings payload containing both settings.rowHeights and settings.minRowHeights with defined values.","commonSituations":"Merging config objects from multiple sources (defaults + user prefs) where one source uses the old name and the other the new one; gradual migration where both spellings were kept 'just in case'; spreading props in wrappers that carry both keys.","solutions":["Remove minRowHeights from the configuration and keep only rowHeights","If both sources must be merged, merge their values into a single rowHeights definition before passing it to Handsontable","Audit config-merging code for duplicate alias keys"],"exampleFix":"// before\nnew Handsontable(el, { rowHeights: 40, minRowHeights: 30 });\n\n// after\nnew Handsontable(el, { rowHeights: 40 });","handlingStrategy":"validation","validationCode":"if (settings.rowHeights != null && settings.minRowHeights != null) {\n  delete settings.minRowHeights; // rowHeights wins\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Standardize on one alias (rowHeights) across all config sources","Deep-merge defaults carefully so aliases never coexist","Lint or test config objects for mutually exclusive keys"],"tags":["configuration","alias-conflict","duplicate-options","rows"],"backgroundTag":"conflicting-options","analyzedSha":"2c365a3291b45a331a6de1ed10a9deba683cfbc3","analyzedAt":"2026-09-01T10:26:16.720Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}