{"record":{"id":"f76d1413b7177c07","repo":"angular/angular-cli","slug":"the-angular-devkit-build-angular-app-shell-buil","errorCode":null,"errorMessage":"The \"@angular-devkit/build-angular:app-shell\" builder is deprecated as part of Angular's Webpack support deprecation. Use \"@angular/build:application\" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.","messagePattern":"The \"@angular-devkit/build-angular:app-shell\" builder is deprecated as part of Angular's Webpack support deprecation\\. Use \"@angular/build:application\" instead\\. For more information, see https://angular\\.dev/tools/cli/build-system-migration\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/angular_devkit/build_angular/src/builders/app-shell/index.ts","lineNumber":165,"sourceCode":"  if (!fs.existsSync(outputPath)) {\n    throw new Error(`Could not find server output directory: ${outputPath}.`);\n  }\n\n  const re = /^main\\.(?:[a-zA-Z0-9]{16}\\.)?js$/;\n  const maybeMain = fs.readdirSync(outputPath).find((x) => re.test(x));\n\n  if (!maybeMain) {\n    throw new Error('Could not find the main bundle.');\n  }\n\n  return path.join(outputPath, maybeMain);\n}\n\nasync function _appShellBuilder(\n  options: BuildWebpackAppShellSchema,\n  context: BuilderContext,\n): Promise<BuilderOutput> {\n  context.logger.warn(\n    'The \"@angular-devkit/build-angular:app-shell\" builder is deprecated as part of Angular\\'s Webpack support deprecation. ' +\n      'Use \"@angular/build:application\" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.',\n  );\n\n  const browserTarget = targetFromTargetString(options.browserTarget);\n  const serverTarget = targetFromTargetString(options.serverTarget);\n\n  // Never run the browser target in watch mode.\n  // If service worker is needed, it will be added in _renderUniversal();\n  const browserOptions = (await context.getTargetOptions(browserTarget)) as JsonObject &\n    BrowserBuilderSchema;\n\n  const optimization = normalizeOptimization(browserOptions.optimization);\n  optimization.styles.inlineCritical = false;\n\n  const browserTargetRun = await context.scheduleTarget(browserTarget, {\n    watch: false,\n    serviceWorker: false,","sourceCodeStart":147,"sourceCodeEnd":183,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts#L147-L183","documentation":"The `@angular-devkit/build-angular:app-shell` builder is part of the legacy Webpack toolchain, which Angular is deprecating. Running it emits a deprecation warning directing users to the esbuild-based `@angular/build:application` builder and the build-system migration guide.","triggerScenarios":"Executing a build/serve target whose builder is `@angular-devkit/build-angular:app-shell` in `angular.json` (or invoking that builder programmatically via `_appShellBuilder`).","commonSituations":"Projects created before the esbuild migration that still use app-shell prerendering with the Webpack builder; apps not yet migrated during Angular version upgrades.","solutions":["Migrate to the new build system: `ng generate @angular/build:apply-build-system-migration` (or follow https://angular.dev/tools/cli/build-system-migration).","Switch `angular.json` targets from `@angular-devkit/build-angular:*` to `@angular/build:application` and use `@angular/build` prerendering/SSG for app-shell needs.","Update options to the new schema (e.g. `browser`/`server` entry points under the application builder) and re-run the build."],"exampleFix":"// before (angular.json)\n\"builder\": \"@angular-devkit/build-angular:app-shell\"\n// after\n\"builder\": \"@angular/build:application\"\n// with SSG/prerender configured via @angular/build","handlingStrategy":"validation","validationCode":"// fail CI if deprecated builders are configured\nconst arch = require('./angular.json');\nfor (const [name, t] of Object.entries(arch.projects).flatMap(([p, pr]) => Object.entries(pr.architect ?? {}).map(([t2, v]) => [`${p}:${t2}`, v]))) {\n  if (String(t.builder).startsWith('@angular-devkit/build-angular:')) throw new Error(`Migrate ${name} (${t.builder}) to @angular/build`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run the build-system migration generator when upgrading Angular.","Pin CI checks that flag `@angular-devkit/build-angular` builders.","Read the build-system migration guide before major upgrades."],"tags":["deprecation","webpack","build","angular"],"backgroundTag":"webpack-builder-deprecated","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}