angular/angular-cli · warning

The installed Angular CLI version is outdated. Installing a

Error message

The installed Angular CLI version is outdated.
Installing a temporary Angular CLI versioned ${cliVersionToInstall} to perform the update.

What it means

During `ng update`, cliVersionToInstall determines that the currently installed Angular CLI is too old to perform the update migrations. The CLI warns and instead installs a temporary newer @angular/cli (at the computed version) and re-executes the update through its binary via runTempBinary.

Source

Thrown at packages/angular/cli/src/commands/update/cli.ts:179

      })
      .strict();
  }

  async run(options: Options<UpdateCommandArgs>): Promise<number | void> {
    const { logger, packageManager } = this.context;

    // Check if the current installed CLI version is older than the latest compatible version.
    // Skip when running `ng update` without a package name as this will not trigger an actual update.
    if (!disableVersionCheck && options.packages?.length) {
      const cliVersionToInstall = await checkCLIVersion(
        options.packages,
        logger,
        packageManager,
        options.next,
      );

      if (cliVersionToInstall) {
        logger.warn(
          'The installed Angular CLI version is outdated.\n' +
            `Installing a temporary Angular CLI versioned ${cliVersionToInstall} to perform the update.`,
        );

        return runTempBinary(
          `@angular/cli@${cliVersionToInstall}`,
          packageManager,
          process.argv.slice(2),
        );
      }
    }

    const packages: npa.Result[] = [];
    for (const request of options.packages ?? []) {
      try {
        const packageIdentifier = npa(request);

        // only registry identifiers are supported

View on GitHub (pinned to bb72145f9a)

Solutions

  1. No action needed: the CLI transparently installs a temporary CLI and continues the update.
  2. To avoid the temporary install, first update the CLI itself: `ng update @angular/cli` then update the framework.
  3. Ensure your package manager (npm/yarn/pnpm/bun) can download @angular/cli@<version> from the registry (network/proxy access).
  4. Update in single-major steps (`ng update @angular/core@16 @angular/cli@16`, etc.) to keep the local CLI adequate at each step.

Example fix

// before
ng update @angular/core@19   # installed CLI is v15
// after
gn update stepwise:
ng update @angular/cli@16 @angular/core@16
ng update @angular/cli@17 @angular/core@17
# ... until target version
Defensive patterns

Strategy: validation

Validate before calling

import { execSync } from 'node:child_process';
const cliVer = JSON.parse(execSync('npm ls @angular/cli --json').toString()).dependencies['@angular/cli'].version;
const major = parseInt(cliVer.split('.')[0], 10);
const target = parseInt(process.env.TARGET_MAJOR!, 10);
if (major < target) console.warn(`Installed CLI v${major} is behind target v${target}; a temporary CLI will be installed`);

Try / catch

try {
  await ngUpdate(['@angular/core@19']);
} catch (e) {
  if (String(e.message).includes('temporary Angular CLI')) {
    // ensure registry access for @angular/cli@<ver> then retry
  }
}

Prevention

When it happens

Trigger: Running `ng update @angular/core@<newer-major>` (or with --next) when the locally installed @angular/cli version is lower than the version required to run the target's migrations; checkCLIVersion/cliVersionToInstall returns a version to install.

Common situations: Skipping multiple major versions (e.g., updating from v15 to v19); projects where the CLI was not updated alongside the framework; using --next to jump to a pre-release.

Related errors


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