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

  1. Update deployment/server scripts to reference the new browser output path (<base>/browser)
  2. Remove the browser: "" override and adopt the new structured outputPath
  3. 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

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


AI-assisted analysis of angular/angular-cli@bb72145f9a (2026-08-30). Data as JSON: /api/errors/51cc7cd212a2de71. Report an issue: GitHub.