{"record":{"id":"9e9746385ffd0959","repo":"quasarframework/quasar","slug":"could-not-read-bex-manifest-please-check-its-synt","errorCode":null,"errorMessage":"Could not read BEX manifest. Please check its syntax.","messagePattern":"Could not read BEX manifest\\. Please check its syntax\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app-vite/lib/modes/bex/bex-utils.js","lineNumber":14,"sourceCode":"import fse from 'fs-extra'\nimport { join } from 'node:path'\nimport { 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","sourceCodeStart":1,"sourceCodeEnd":32,"githubUrl":"https://github.com/quasarframework/quasar/blob/4841521b5f635a971eb9e2710e5542efd194691b/app-vite/lib/modes/bex/bex-utils.js#L1-L32","documentation":"createManifest reads the raw source BEX manifest JSON (src-bex/manifest.json) and merges its all/target sections. If the file cannot be read or parsed as JSON, this warning is emitted and an { err } object is returned so the BEX build can stop early.","triggerScenarios":"fse.readFileSync or JSON.parse throws on the manifest file at quasarConf.metaConf.bexManifestFile: file missing, empty, invalid JSON syntax, or wrong encoding/BOM.","commonSituations":"Missing src-bex/manifest.json in a fresh BEX project; trailing comma or comment left in the JSON; file saved as UTF-16 by an editor; manifest accidentally deleted or renamed.","solutions":["Open the BEX manifest file (default src-bex/manifest.json) and fix the JSON syntax error (the companion `err` names the exact parse issue)","Validate the file with a JSON linter or `node -e \"JSON.parse(require('fs').readFileSync('src-bex/manifest.json','utf8'))\"`","Restore the default manifest from the Quasar BEX template if it was deleted","Re-save the file as UTF-8 without BOM if your editor changed the encoding"],"exampleFix":"// before (src-bex/manifest.json)\n{ \"manifest_version\": 3, \"name\": \"app\", }\n// after\n{\n  \"manifest_version\": 3,\n  \"name\": \"app\"\n}","handlingStrategy":"validation","validationCode":"const fs = require('fs')\ntry {\n  JSON.parse(fs.readFileSync('src-bex/manifest.json', 'utf8'))\n  console.log('BEX manifest is valid JSON')\n} catch (err) {\n  console.error('Fix manifest before building:', err.message)\n}","typeGuard":null,"tryCatchPattern":"try {\n  JSON.parse(fs.readFileSync(manifestPath, 'utf8'))\n} catch (err) {\n  console.error('Manifest unreadable at ' + manifestPath + ':', err.message)\n}","preventionTips":["Add a JSON lint step for src-bex/manifest.json in CI or a pre-commit hook","Never leave trailing commas or comments in the manifest JSON","Keep the file UTF-8 without BOM","Start BEX projects from the official Quasar template so the manifest exists"],"tags":["bex","manifest","json-parse"],"backgroundTag":"invalid-json-manifest","analyzedSha":"4841521b5f635a971eb9e2710e5542efd194691b","analyzedAt":"2026-08-30T01:13:14.944Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}