{"record":{"id":"51cc7cd212a2de71","repo":"angular/angular-cli","slug":"the-output-location-of-the-browser-build-has-been-51cc7c","errorCode":null,"errorMessage":"The output location of the browser build has been updated from \"${base}\" to \"${join(base, DEFAULT_BROWSER_DIR)}\".\n          You might need to adjust your deployment pipeline.","messagePattern":"The output location of the browser build has been updated from \"(.+?)\" to \"(.+?)\"\\.\n          You might need to adjust your deployment pipeline\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/schematics/angular/ssr/index.ts","lineNumber":188,"sourceCode":"  };\n}\n\nfunction updateApplicationBuilderWorkspaceConfigRule(\n  projectSourceRoot: string,\n  options: SSROptions,\n  { logger }: SchematicContext,\n): Rule {\n  return updateWorkspace((workspace) => {\n    const buildTarget = workspace.projects.get(options.project)?.targets.get('build');\n    if (!buildTarget) {\n      return;\n    }\n\n    let outputPath = buildTarget.options?.outputPath;\n    if (outputPath && isJsonObject(outputPath)) {\n      if (outputPath.browser === '') {\n        const base = outputPath.base as string;\n        logger.warn(\n          `The output location of the browser build has been updated from \"${base}\" to \"${join(\n            base,\n            DEFAULT_BROWSER_DIR,\n          )}\".\n          You might need to adjust your deployment pipeline.`,\n        );\n\n        if (\n          (outputPath.media && outputPath.media !== DEFAULT_MEDIA_DIR) ||\n          (outputPath.server && outputPath.server !== DEFAULT_SERVER_DIR)\n        ) {\n          delete outputPath.browser;\n        } else {\n          outputPath = outputPath.base;\n        }\n      }\n    }\n","sourceCodeStart":170,"sourceCodeEnd":206,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/schematics/angular/ssr/index.ts#L170-L206","documentation":"The SSR schematic updates the workspace to the application builder, where browser output lives under a 'browser' subdirectory. If the build target's outputPath is an object with browser: \"\" (old flat-output behavior), the schematic warns that output will now go to <base>/<browser-dir> and deployment scripts may need adjusting.","triggerScenarios":"Running the SSR schematic (ssrSchematic -> updateApplicationBuilderWorkspaceConfigRule) on a project whose build target options.outputPath is a JSON object with outputPath.browser set to \"\".","commonSituations":"Projects that previously flattened output (browser: \"\") for deployment simplicity, now adding SSR and being migrated to the application builder's nested output layout.","solutions":["Update deployment/server scripts to reference the new browser output path (<base>/browser)","Remove the browser: \"\" override and adopt the new structured outputPath","Rebuild and verify the server and browser outputs resolve correctly"],"exampleFix":"// before\n\"outputPath\": { \"base\": \"dist/my-app\", \"browser\": \"\" }\n// after\n\"outputPath\": { \"base\": \"dist/my-app\" } // browser assets in dist/my-app/browser","handlingStrategy":"validation","validationCode":"// before adding SSR, inspect structured outputPath overrides\nconst op = angularJson.projects[proj].architect?.build?.options?.outputPath;\nif (op && typeof op === 'object' && op.browser === '') {\n  console.warn(`Flat output (browser: \"\") detected; output will move to ${op.base}/browser after SSR/builder migration`);\n}","typeGuard":"function isStructuredOutputPath(op) {\n  return typeof op === 'object' && op !== null && typeof op.base === 'string';\n}","tryCatchPattern":null,"preventionTips":["Avoid browser: \"\" flat-output overrides; embrace the base/browser structure","Keep deploy scripts parameterized on the build's reported output path","Test SSR + deployment after schematic runs to catch moved output directories"],"tags":["angular","schematics","ssr","application-builder","output-path"],"backgroundTag":"output-path-browser-subdirectory","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}