{"record":{"id":"6666374a513aa68c","repo":"GoogleChrome/lighthouse","slug":"lighthouse-default-is-the-only-valid-extension-m","errorCode":null,"errorMessage":"`lighthouse:default` is the only valid extension method.","messagePattern":"`lighthouse:default` is the only valid extension method\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"core/config/config.js","lineNumber":86,"sourceCode":"  // The directory of the config path, if one was provided.\n  const configDir = configPath ? path.dirname(configPath) : undefined;\n\n  return {\n    configWorkingCopy: deepCloneConfigJson(config),\n    configPath,\n    configDir,\n  };\n}\n\n/**\n * @param {LH.Config} config\n * @return {LH.Config}\n */\nfunction resolveExtensions(config) {\n  if (!config.extends) return config;\n\n  if (config.extends !== 'lighthouse:default') {\n    throw new Error('`lighthouse:default` is the only valid extension method.');\n  }\n\n  const {artifacts, ...extensionJSON} = config;\n  const defaultClone = deepCloneConfigJson(defaultConfig);\n  const mergedConfig = mergeConfigFragment(defaultClone, extensionJSON);\n\n  mergedConfig.artifacts = mergeConfigFragmentArrayByKey(\n    defaultClone.artifacts,\n    artifacts,\n    artifact => artifact.id\n  );\n\n  return mergedConfig;\n}\n\n/**\n * Looks up the required artifact IDs for each dependency, throwing if no earlier artifact satisfies the dependency.\n *","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/GoogleChrome/lighthouse/blob/9515cd4e58ebed69f78742d932b501c2cab8ad8f/core/config/config.js#L68-L104","documentation":"Thrown by resolveExtensions in config.js. A config may declare 'extends' to build on the default Lighthouse config, but the only accepted value is the string 'lighthouse:default'. Any other extends value is unsupported and throws. Lighthouse does not support arbitrary multi-config inheritance chains.","triggerScenarios":"A custom config sets extends: 'lighthouse:full' or extends: './other-config.js' or extends: 'lighthouse:desktop'. resolveExtensions sees a non-matching value and config.js:86 throws.","commonSituations":"Assuming other preset names (e.g. 'lighthouse:full','lighthouse:perf') are valid extends targets. Trying to extend a local config file. Outdated docs suggesting extends values that were never supported.","solutions":["Set extends: 'lighthouse:default' (the only supported value) and override individual keys.","If you need another preset as a base, import that preset object and spread/merge it yourself instead of using extends.","Remove the extends key if you are providing a fully standalone config."],"exampleFix":"// before\nmodule.exports = {extends: 'lighthouse:full', audits: [...]};\n// after\nmodule.exports = {extends: 'lighthouse:default', audits: [...]};","handlingStrategy":"validation","validationCode":"if (config.extends !== undefined && config.extends !== 'lighthouse:default') {\n  throw new Error(\"config.extends may only be 'lighthouse:default'\");\n}","typeGuard":"function extendsIsValid(v) { return v === undefined || v === 'lighthouse:default'; }","tryCatchPattern":"try { const cfg = new Config(config, {configPath}); }\ncatch (e) { if (/only valid extension method/.test(e.message)) config.extends = 'lighthouse:default'; throw e; }","preventionTips":["Only use extends: 'lighthouse:default'.","To combine presets, merge objects manually instead of extending arbitrary names."],"tags":["config","lighthouse","validation","extends"],"backgroundTag":null,"analyzedSha":"9515cd4e58ebed69f78742d932b501c2cab8ad8f","analyzedAt":"2026-08-13T06:28:10.346Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}