quasarframework/quasar · error

The BEX manifest requires a "manifest_version" prop, which i

Error message

The BEX manifest requires a "manifest_version" prop, which is currently missing.

What it means

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.

Source

Thrown at app-vite/lib/modes/bex/bex-utils.js:21

import { merge } from 'webpack-merge'

import { warn } from '../../utils/logger.js'

export async function createManifest(quasarConf) {
  let json
  const bexManifestPath = quasarConf.metaConf.bexManifestFile

  try {
    json = JSON.parse(fse.readFileSync(bexManifestPath, 'utf8'))
  } catch (err) {
    warn('Could not read BEX manifest. Please check its syntax.')
    return { err }
  }

  json = merge({}, json.all || {}, json[quasarConf.ctx.targetName] || {})

  if (json.manifest_version === void 0) {
    warn(
      'The BEX manifest requires a "manifest_version" prop, which is currently missing.'
    )
    return { err: true }
  }

  const {
    appPkg: { productName, name, description, version }
  } = quasarConf.ctx.pkg

  if (json.name === void 0) {
    json.name = productName || name
  }
  if (json.short_name === void 0) {
    json.short_name = json.name
  }
  if (json.description === void 0) {
    json.description = description
  }

View on GitHub (pinned to 4841521b5f)

Solutions

  1. Add "manifest_version": 3 (or 2 for legacy) to src-bex/manifest.json, preferably under the "all" key.
  2. If the manifest is split per-target, ensure the current build target key (e.g. "chrome") actually contains manifest_version.
  3. Validate the JSON parses correctly (a malformed file may merge to an empty object).

Example fix

// before (src-bex/manifest.json)
{ "all": { "name": "My BEX", "version": "1.0.0" } }
// after
{ "all": { "name": "My BEX", "version": "1.0.0", "manifest_version": 3 } }
Defensive patterns

Strategy: validation

Validate before calling

// CI pre-check
const m = require('./src-bex/manifest.json')
const merged = { ...m.all, ...(m[process.env.BEX_TARGET || 'chrome'] || {}) }
if (merged.manifest_version === undefined) {
  throw new Error('src-bex/manifest.json must define manifest_version (2 or 3)')
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of quasarframework/quasar@4841521b5f (2026-08-30). Data as JSON: /api/errors/11a1d644e870bb09. Report an issue: GitHub.