{"record":{"id":"11a1d644e870bb09","repo":"quasarframework/quasar","slug":"the-bex-manifest-requires-a-manifest-version-pro","errorCode":null,"errorMessage":"The BEX manifest requires a \"manifest_version\" prop, which is currently missing.","messagePattern":"The BEX manifest requires a \"manifest_version\" prop, which is currently missing\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app-vite/lib/modes/bex/bex-utils.js","lineNumber":21,"sourceCode":"import { merge } from 'webpack-merge'\n\nimport { warn } from '../../utils/logger.js'\n\nexport async function createManifest(quasarConf) {\n  let json\n  const bexManifestPath = quasarConf.metaConf.bexManifestFile\n\n  try {\n    json = JSON.parse(fse.readFileSync(bexManifestPath, 'utf8'))\n  } catch (err) {\n    warn('Could not read BEX manifest. Please check its syntax.')\n    return { err }\n  }\n\n  json = merge({}, json.all || {}, json[quasarConf.ctx.targetName] || {})\n\n  if (json.manifest_version === void 0) {\n    warn(\n      'The BEX manifest requires a \"manifest_version\" prop, which is currently missing.'\n    )\n    return { err: true }\n  }\n\n  const {\n    appPkg: { productName, name, description, version }\n  } = quasarConf.ctx.pkg\n\n  if (json.name === void 0) {\n    json.name = productName || name\n  }\n  if (json.short_name === void 0) {\n    json.short_name = json.name\n  }\n  if (json.description === void 0) {\n    json.description = description\n  }","sourceCodeStart":3,"sourceCodeEnd":39,"githubUrl":"https://github.com/quasarframework/quasar/blob/4841521b5f635a971eb9e2710e5542efd194691b/app-vite/lib/modes/bex/bex-utils.js#L3-L39","documentation":"createManifest merges src-bex/manifest.json variants and validates the result. A WebExtension/BEX manifest must declare manifest_version; when the prop is missing the warning is shown and createManifest returns { err: true }, aborting the BEX build.","triggerScenarios":"src-bex/manifest.json (including the 'all' key or the target-specific key) lacks a top-level \"manifest_version\" field; merge result json.manifest_version === undefined.","commonSituations":"Hand-written or trimmed manifest that omitted manifest_version; manifest defined only under a target key (e.g. 'chrome') that doesn't exist for the current target so the merge yields no fields; upgrading Quasar to a version that enforces the prop.","solutions":["Add \"manifest_version\": 3 (or 2 for legacy) to src-bex/manifest.json, preferably under the \"all\" key.","If the manifest is split per-target, ensure the current build target key (e.g. \"chrome\") actually contains manifest_version.","Validate the JSON parses correctly (a malformed file may merge to an empty object)."],"exampleFix":"// before (src-bex/manifest.json)\n{ \"all\": { \"name\": \"My BEX\", \"version\": \"1.0.0\" } }\n// after\n{ \"all\": { \"name\": \"My BEX\", \"version\": \"1.0.0\", \"manifest_version\": 3 } }","handlingStrategy":"validation","validationCode":"// CI pre-check\nconst m = require('./src-bex/manifest.json')\nconst merged = { ...m.all, ...(m[process.env.BEX_TARGET || 'chrome'] || {}) }\nif (merged.manifest_version === undefined) {\n  throw new Error('src-bex/manifest.json must define manifest_version (2 or 3)')\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always keep \"manifest_version\" in the shared \"all\" section of src-bex/manifest.json.","Validate the manifest JSON in CI before running quasar build -m bex.","Start new extensions from the scaffold manifest the CLI generates."],"tags":["bex","manifest","validation","webextension"],"backgroundTag":"missing-manifest-field","analyzedSha":"4841521b5f635a971eb9e2710e5542efd194691b","analyzedAt":"2026-08-30T01:13:14.944Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}