{"record":{"id":"c94eb01304c68516","repo":"quasarframework/quasar","slug":"quasar-app-extension-is-missing","errorCode":null,"errorMessage":"Quasar App Extension is missing...","messagePattern":"Quasar App Extension is missing\\.\\.\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app-vite/lib/app-extension/AppExtensionInstance.js","lineNumber":296,"sourceCode":"    this.#appExtJson.remove(this.extId)\n\n    if (skipPkgUninstall !== true) {\n      await this.#uninstallPackage()\n    }\n\n    this.logger.log('Removed App Extension')\n\n    if (hooks && hooks.exitLog.length !== 0) {\n      hooks.exitLog.forEach(msg => {\n        console.log(msg)\n      })\n      console.log()\n    }\n  }\n\n  async run() {\n    if (!this.isInstalled) {\n      this.logger.warn('Quasar App Extension is missing...')\n      process.exit(1)\n    }\n\n    const script = await this.#getScript('index', true)\n\n    const api = new IndexAPI(\n      {\n        ctx: this.#ctx,\n        extId: this.extId,\n        prompts: this.getPrompts(),\n        packageDir: dirname(fileURLToPath(this.#packageParentUrl))\n      },\n      this.#appExtJson\n    )\n\n    this.logger.log('Running...')\n    await script(api)\n","sourceCodeStart":278,"sourceCodeEnd":314,"githubUrl":"https://github.com/quasarframework/quasar/blob/4841521b5f635a971eb9e2710e5542efd194691b/app-vite/lib/app-extension/AppExtensionInstance.js#L278-L314","documentation":"AppExtensionInstance.run() executes the extension's index script (its hooks/IndexAPI surface). If the extension's npm package is not installed, it warns and calls process.exit(1), terminating the Quasar CLI command — the extension cannot be invoked at all without its package.","triggerScenarios":"An extension listed in quasar.config's extensions (or .quasar/app-ext.json) but its npm package is missing from node_modules when `quasar ext run`/invoke-related commands call run().","commonSituations":"Fresh clone without `pnpm install`; extension removed from package.json but still referenced in quasar.config; private/registry package failing to install (auth or network); dependency installed under a different workspace than the one running the CLI.","solutions":["Install the extension: quasar ext add <ext-id> or pnpm add -D <ext-package>","Remove the stale extension from quasar.config (extensions) / `quasar ext remove` if you no longer want it","Check package manager output for why the package failed to install (registry auth, network, peer conflicts)","Verify node_modules contains the package before re-running the command"],"exampleFix":"// before (quasar.config.js) referencing uninstalled ext\nextensions: ['icon-genie'] // not in package.json\n// after: install it first\n// pnpm add -D @quasar/quasar-app-extension-icon-genie\nextensions: ['icon-genie']","handlingStrategy":"validation","validationCode":"// before invoking ext commands, verify each configured extension is installed\nconst fs = require('fs')\nconst cfg = require('./quasar.config.js')\nfor (const ext of cfg.extensions ?? []) {\n  const dir = `node_modules/@quasar/quasar-app-extension-${ext}`\n  if (!fs.existsSync(dir)) {\n    console.error(`Missing extension package: ${ext} — run: quasar ext add ${ext}`)\n    process.exit(1)\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run `pnpm install` (or npm install) after cloning before any quasar CLI command","Add extensions only through `quasar ext add` so package.json and config stay in sync","Remove extensions with `quasar ext remove` instead of editing config alone","Check CI images install dependencies (not just cache quasar CLI) before ext commands"],"tags":["app-extension","missing-package","cli-exit"],"backgroundTag":"extension-not-installed","analyzedSha":"4841521b5f635a971eb9e2710e5542efd194691b","analyzedAt":"2026-08-30T01:13:14.944Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}