{"record":{"id":"0c9bfaee855df3cc","repo":"angular/angular-cli","slug":"angular-app-engine-manifest-is-not-set-please-ens","errorCode":null,"errorMessage":"Angular app engine manifest is not set. Please ensure you are using the '@angular/build:application' builder to build your server application.","messagePattern":"Angular app engine manifest is not set\\. Please ensure you are using the '@angular/build:application' builder to build your server application\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"packages/angular/ssr/src/manifest.ts","lineNumber":198,"sourceCode":"\n/**\n * Sets the Angular app engine manifest.\n *\n * @param manifest - The engine manifest object to set.\n */\nexport function setAngularAppEngineManifest(manifest: AngularAppEngineManifest): void {\n  angularAppEngineManifest = manifest;\n}\n\n/**\n * Gets the Angular app engine manifest.\n *\n * @returns The Angular app engine manifest.\n * @throws Will throw an error if the Angular app engine manifest is not set.\n */\nexport function getAngularAppEngineManifest(): AngularAppEngineManifest {\n  if (!angularAppEngineManifest) {\n    throw new Error(\n      'Angular app engine manifest is not set. ' +\n        `Please ensure you are using the '@angular/build:application' builder to build your server application.`,\n    );\n  }\n\n  return angularAppEngineManifest;\n}\n","sourceCodeStart":180,"sourceCodeEnd":206,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular/ssr/src/manifest.ts#L180-L206","documentation":"Like the app manifest, the AngularAppEngineManifest must be registered by the build (setAngularAppEngineManifest, invoked by @angular/build:application). If it is unset when getAngularAppEngineManifest is called (e.g. by AngularAppEngine.manifest), the server bundle is incompatible with the current @angular/ssr runtime.","triggerScenarios":"Running a server bundle produced by an unsupported/legacy builder, or a version mismatch where the server bundle never registers the engine manifest before AngularAppEngine accesses it.","commonSituations":"Mixed @angular/ssr versions between server bundle and node_modules at runtime, custom bundling that tree-shakes or omits the manifest registration call, running stale dist output after upgrading.","solutions":["Rebuild the server application with '@angular/build:application' so the engine manifest is embedded","Align @angular/ssr, @angular/build, and @angular/core versions (same minor) and reinstall node_modules","Delete dist and run a clean full build (ng build) so no stale server bundle is served","Update the deployment to ship the newly built server output, not an old artifact"],"exampleFix":"// before\n\"@angular/ssr\": \"17.0.0\", \"@angular/build\": \"18.1.0\"\n// after (aligned versions)\n\"@angular/ssr\": \"18.1.0\", \"@angular/build\": \"18.1.0\"","handlingStrategy":"try-catch","validationCode":"import { getAngularAppEngineManifest } from '@angular/ssr';\ntry { getAngularAppEngineManifest(); } catch { console.error('Engine manifest missing; rebuild server bundle'); }\n","typeGuard":null,"tryCatchPattern":"try {\n  const manifest = engine.manifest;\n} catch (e) {\n  if (e instanceof Error && e.message.includes('engine manifest is not set')) {\n    console.error('Server bundle incompatible; run a clean ng build with @angular/build:application');\n    process.exit(1);\n  }\n  throw e;\n}","preventionTips":["Clean dist and rebuild after upgrading @angular/ssr or @angular/build","Verify server bundle registers the manifest (built by the application builder)","Pin matching versions of @angular/core, @angular/ssr, and @angular/build in package.json"],"tags":["ssr","manifest","builder","build"],"backgroundTag":"missing-app-manifest","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}