{"record":{"id":"50af1f2f8d7de44c","repo":"slidevjs/slidev","slug":"slidev-addon-name-requires-slidev-version-r","errorCode":null,"errorMessage":"[slidev] addon \"${name}\" requires Slidev version range \"${engines.slidev}\" but found \"${version}\"","messagePattern":"\\[slidev\\] addon \"(.+?)\" requires Slidev version range \"(.+?)\" but found \"(.+?)\"","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/slidev/node/integrations/addons.ts","lineNumber":21,"sourceCode":"import { satisfies } from 'verkit'\nimport { version } from '../../package.json'\nimport { createResolver, getRoots } from '../resolver'\n\nexport async function resolveAddons(addonsInConfig: string[]) {\n  const { userRoot, userPkgJson } = await getRoots()\n  const resolved: string[] = []\n\n  const resolveAddonNameAndRoot = createResolver('addon', {})\n\n  async function resolveAddon(name: string, parent: string) {\n    const [, pkgRoot] = await resolveAddonNameAndRoot(name, parent)\n    if (!pkgRoot)\n      return\n    resolved.push(pkgRoot)\n    const { slidev = {}, engines = {} } = JSON.parse(await fs.readFile(resolve(pkgRoot, 'package.json'), 'utf-8'))\n\n    if (engines.slidev && !satisfies(version, engines.slidev, { includePrerelease: true }))\n      throw new Error(`[slidev] addon \"${name}\" requires Slidev version range \"${engines.slidev}\" but found \"${version}\"`)\n\n    if (Array.isArray(slidev.addons))\n      await Promise.all(slidev.addons.map((addon: string) => resolveAddon(addon, pkgRoot)))\n  }\n\n  if (Array.isArray(addonsInConfig))\n    await Promise.all(addonsInConfig.map((addon: string) => resolveAddon(addon, userRoot)))\n  if (Array.isArray(userPkgJson.slidev?.addons))\n    await Promise.all(userPkgJson.slidev.addons.map((addon: string) => resolveAddon(addon, userRoot)))\n\n  return resolved\n}\n","sourceCodeStart":3,"sourceCodeEnd":34,"githubUrl":"https://github.com/slidevjs/slidev/blob/0d798ace5828966d9f77f62094d5f7a971ad98f7/packages/slidev/node/integrations/addons.ts#L3-L34","documentation":"Each addon's package.json may declare engines.slidev as a semver range. Slidev checks its own running version against that range with satisfies(..., { includePrerelease: true }); a mismatch throws.","triggerScenarios":"Loading an addon whose engines.slidev does not include the running Slidev version, e.g. addon pinned to ^0.48 while Slidev 0.50 is installed.","commonSituations":"Upgrading Slidev without upgrading addons, using a pre-release Slidev with an addon pinned to stable only, or an addon that hasn't been republished for the current major.","solutions":["Upgrade the addon to a version whose engines.slidev includes your Slidev version","Pin Slidev to a version the addon supports","Check the addon's package.json engines.slidev field and align versions"],"exampleFix":"// before\n\"slidev/addon-x\": \"^1.0.0\"  (engines.slidev ^0.48)\nslidev@0.50\n// after\n\"slidev/addon-x\": \"^2.0.0\"  (engines.slidev ^0.50)","handlingStrategy":"validation","validationCode":"import { satisfies } from 'verkit'\nfor (const addon of addonList) {\n  const pkg = JSON.parse(await fs.readFile(resolve(addonRoot, 'package.json'), 'utf-8'))\n  if (pkg.engines?.slidev && !satisfies(slidevVersion, pkg.engines.slidev, { includePrerelease: true })) {\n    throw new Error(`Addon ${addon} needs Slidev ${pkg.engines.slidev}`)\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Lock addon versions in lockfiles to ones matching your Slidev range","Run a preflight satisfies() check before loading addons","After upgrading Slidev, audit every addon's engines.slidev"],"tags":["addon","version","semver","engines"],"backgroundTag":null,"analyzedSha":"0d798ace5828966d9f77f62094d5f7a971ad98f7","analyzedAt":"2026-08-12T17:10:56.221Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}