{"record":{"id":"7283ccc31d4d950c","repo":"handsontable/handsontable","slug":"the-pluginkey-plugin-cannot-be-used-with-the","errorCode":null,"errorMessage":"The `${pluginKey}` plugin cannot be used with the `${incompatibleSettingKey}` option. This combination is not supported. The plugin will remain disabled.","messagePattern":"The `(.+?)` plugin cannot be used with the `(.+?)` option\\. This combination is not supported\\. The plugin will remain disabled\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"handsontable/src/plugins/base/base.ts","lineNumber":251,"sourceCode":"    }\n\n    this.initialized = true;\n  }\n\n  /**\n   * Whether this plugin is blocked by a registered hard conflict (another top-level setting is truthy; for example\n   * nestedRows blocks pagination, or manualRowMove blocks dataProvider). Emits a console warning when blocked.\n   *\n   * @returns {boolean} true if the plugin must not enable.\n   */\n  isHardConflictBlocked() {\n    const pluginKey = this.constructor.PLUGIN_KEY;\n    const conflict = getHardConflict(this.hot.getSettings(), pluginKey);\n\n    if (conflict) {\n      const { incompatibleSettingKey } = conflict;\n\n      warn(toSingleLine`The \\`${pluginKey}\\` plugin cannot be used with the \\`${incompatibleSettingKey}\\` option.\\x20\n        This combination is not supported. The plugin will remain disabled.`);\n\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Enable plugin for this Handsontable instance.\n   */\n  enablePlugin(): void {\n    this.enabled = true;\n  }\n\n  /**\n   * Disable plugin for this Handsontable instance.\n   */","sourceCodeStart":233,"sourceCodeEnd":269,"githubUrl":"https://github.com/handsontable/handsontable/blob/2c365a3291b45a331a6de1ed10a9deba683cfbc3/handsontable/src/plugins/base/base.ts#L233-L269","documentation":"Plugins can declare hard conflicts with certain grid settings. When such a plugin is enabled (at init or during updateSettings), BasePlugin.isHardConflictBlocked() checks getHardConflict() against the current settings; on conflict it warns that the combination is unsupported and the plugin stays disabled instead of operating in a broken state.","triggerScenarios":"Enabling a plugin while an incompatible option is set, e.g. columnSorting with a conflicting setting per the plugin's hard-conflict map; calling updateSettings to turn on the conflicting option while the plugin is active.","commonSituations":"Turning on two features designed to be mutually exclusive (e.g. certain manual-move/fixed-rows combos, or a plugin vs nestedRows/trimRows style conflicts); copying a config that mixes incompatible options.","solutions":["Read the warning: it names the exact conflicting option key","Remove or disable the conflicting option in your settings object","Decide which feature you need — you cannot have both; restructure the config","Update Handsontable if a newer release lifted the incompatibility"],"exampleFix":"// before\nnew Handsontable(el, { rowHeaders: true, columnSorting: true, /* + conflicting option */ fixedRowsTop: 3, ... });\n// after\nnew Handsontable(el, { columnSorting: true }); // conflicting option removed","handlingStrategy":"validation","validationCode":"const HARD_CONFLICTS = { somePlugin: ['conflictingOption'] }; // see plugin docs\nconst conflicting = (HARD_CONFLICTS[pluginKey] || []).filter(k => k in settings);\nif (conflicting.length) delete settings[conflicting[0]];","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Read each plugin's docs for declared incompatible options","Keep the grid settings object minimal and intentional","After updateSettings, verify the plugin actually enabled: hot.getPlugin('x').isEnabled === true"],"tags":["plugins","configuration-conflict","settings"],"backgroundTag":"incompatible-plugin-settings","analyzedSha":"2c365a3291b45a331a6de1ed10a9deba683cfbc3","analyzedAt":"2026-09-01T10:26:16.720Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}