angular/angular-cli · warning
The output location of the browser build has been updated fr
Error message
The output location of the browser build has been updated from "${base}" to "${join(base, DEFAULT_BROWSER_DIR)}".
You might need to adjust your deployment pipeline. What it means
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.
Source
Thrown at packages/schematics/angular/ssr/index.ts:188
};
}
function updateApplicationBuilderWorkspaceConfigRule(
projectSourceRoot: string,
options: SSROptions,
{ logger }: SchematicContext,
): Rule {
return updateWorkspace((workspace) => {
const buildTarget = workspace.projects.get(options.project)?.targets.get('build');
if (!buildTarget) {
return;
}
let outputPath = buildTarget.options?.outputPath;
if (outputPath && isJsonObject(outputPath)) {
if (outputPath.browser === '') {
const base = outputPath.base as string;
logger.warn(
`The output location of the browser build has been updated from "${base}" to "${join(
base,
DEFAULT_BROWSER_DIR,
)}".
You might need to adjust your deployment pipeline.`,
);
if (
(outputPath.media && outputPath.media !== DEFAULT_MEDIA_DIR) ||
(outputPath.server && outputPath.server !== DEFAULT_SERVER_DIR)
) {
delete outputPath.browser;
} else {
outputPath = outputPath.base;
}
}
}
View on GitHub (pinned to bb72145f9a)
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
Example fix
// before
"outputPath": { "base": "dist/my-app", "browser": "" }
// after
"outputPath": { "base": "dist/my-app" } // browser assets in dist/my-app/browser Defensive patterns
Strategy: validation
Validate before calling
// before adding SSR, inspect structured outputPath overrides
const op = angularJson.projects[proj].architect?.build?.options?.outputPath;
if (op && typeof op === 'object' && op.browser === '') {
console.warn(`Flat output (browser: "") detected; output will move to ${op.base}/browser after SSR/builder migration`);
} Type guard
function isStructuredOutputPath(op) {
return typeof op === 'object' && op !== null && typeof op.base === 'string';
} Prevention
- 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
When it happens
Trigger: Running the SSR schematic (ssrSchematic -> updateApplicationBuilderWorkspaceConfigRule) on a project whose build target options.outputPath is a JSON object with outputPath.browser set to "".
Common situations: Projects that previously flattened output (browser: "") for deployment simplicity, now adding SSR and being migrated to the application builder's nested output layout.
Related errors
- outputPath for ${projectName} ${target} target is not a stri
- The output location of the browser build has been updated fr
- Cannot find "${configFilePath}".
- Cannot find the "provideServerRendering" function call in "$
- Server schematic requires a project type of "application".
AI-assisted analysis of angular/angular-cli@bb72145f9a (2026-08-30).
Data as JSON: /api/errors/51cc7cd212a2de71.
Report an issue: GitHub.