{"record":{"id":"ebb954da9abd2d41","repo":"angular/angular-cli","slug":"the-following-packages-to-update-are-configured-to","errorCode":null,"errorMessage":"The following packages to update are configured to use `catalog:`:\n${updatesList}\n\nBecause catalogs are shared across the monorepo, 'ng update' cannot modify them directly.\nPlease perform the following steps to update:\n  1. Manually update the versions for these packages in your catalog configuration file (e.g., pnpm-workspace.yaml or .yarnrc.yml).\n  2. Run '${installCmd}' to install the updated versions.\n  3. Run the following command(s) from the workspace root to execute the migration schematics:\n${migrationCommands}","messagePattern":"The following packages to update are configured to use `catalog:`:\n\\$\\{updatesList\\}\n\nBecause catalogs are shared across the monorepo, 'ng update' cannot modify them directly\\.\nPlease perform the following steps to update:\n  1\\. Manually update the versions for these packages in your catalog configuration file \\(e\\.g\\., pnpm-workspace\\.yaml or \\.yarnrc\\.yml\\)\\.\n  2\\. Run '\\$\\{installCmd\\}' to install the updated versions\\.\n  3\\. Run the following command\\(s\\) from the workspace root to execute the migration schematics:\n\\$\\{migrationCommands\\}","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/angular/cli/src/commands/update/update-resolver.ts","lineNumber":850,"sourceCode":"  }\n\n  if (catalogUpdates.length > 0) {\n    const packageManagerName = options.packageManager ?? 'your package manager';\n    const installCmd = packageManagerName === 'yarn' ? 'yarn install' : 'pnpm install';\n\n    const updatesList = catalogUpdates\n      .map((pkg) => `  - ${pkg.name} (${pkg.specifier}) -> Target version: ${pkg.target}`)\n      .join('\\n');\n\n    const migrationCommands = catalogUpdates\n      .map((pkg) => {\n        const fromVer = pkg.current === 'unknown' ? '<current-version>' : pkg.current;\n\n        return `  ng update ${pkg.name} --migrate-only --from ${fromVer}`;\n      })\n      .join('\\n');\n\n    throw new Error(\n      `The following packages to update are configured to use \\`catalog:\\`:\\n` +\n        `${updatesList}\\n\\n` +\n        `Because catalogs are shared across the monorepo, 'ng update' cannot modify them directly.\\n` +\n        `Please perform the following steps to update:\\n` +\n        `  1. Manually update the versions for these packages in your catalog configuration file ` +\n        `(e.g., pnpm-workspace.yaml or .yarnrc.yml).\\n` +\n        `  2. Run '${installCmd}' to install the updated versions.\\n` +\n        `  3. Run the following command(s) from the workspace root to execute the migration schematics:\\n` +\n        `${migrationCommands}`,\n    );\n  }\n}\n\nexport async function resolveUserUpdatePlan(\n  options: UpdateResolverOptions,\n  packageManager: PackageManager,\n  logger: logging.LoggerApi,\n): Promise<UpdatePlan> {","sourceCodeStart":832,"sourceCodeEnd":868,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular/cli/src/commands/update/update-resolver.ts#L832-L868","documentation":"Thrown by the update resolver when packages targeted for update are declared with `catalog:` protocol versions (pnpm catalogs / yarn catalog feature). Because catalog versions are centralized in a shared workspace file, the CLI refuses to rewrite them and instead prints the manual steps and the migration schematics commands to run afterwards.","triggerScenarios":"Running `ng update` in a pnpm/yarn monorepo where one or more target packages use `catalog:` as their version range in package.json; the resolver detects catalog references in the updates list and aborts instead of editing package.json.","commonSituations":"Modern pnpm workspaces using pnpm-workspace.yaml catalogs; Yarn 4 catalogs configured in yarnrc.yml; teams adopting catalogs for version centralization while still using ng update.","solutions":["Manually bump the package versions in the catalog definition (pnpm-workspace.yaml or .yarnrc.yml).","Run the workspace install command (e.g. `pnpm install`) to apply new versions.","Run the printed migration commands, e.g. `ng update <pkg> --migrate-only --from <current-version>`, from the workspace root.","Alternatively, temporarily replace `catalog:` with an explicit version, run ng update, then restore the catalog reference."],"exampleFix":"// before (pnpm-workspace.yaml)\ncatalog:\n  '@angular/core': 17.0.0\n// after\ncatalog:\n  '@angular/core': 18.0.0\n# then: pnpm install && ng update @angular/core --migrate-only --from 17.0.0","handlingStrategy":"try-catch","validationCode":"const usesCatalog = Object.values({...pkg.dependencies, ...pkg.devDependencies})\n  .some(v => v === 'catalog:');\nif (usesCatalog) {\n  console.warn('Packages use catalog: versions; update the catalog file manually, then run --migrate-only schematics.');\n}","typeGuard":null,"tryCatchPattern":"try {\n  await ngUpdate(packages);\n} catch (e) {\n  if (e.message.includes('catalog:')) {\n    // parse the listed packages from e.message, update pnpm-workspace.yaml / .yarnrc.yml,\n    // run install, then run the printed `ng update <pkg> --migrate-only --from <ver>` commands\n  }\n}","preventionTips":["When adopting pnpm/yarn catalogs, plan ng update flows around manual catalog edits.","Keep catalog entries updated in the same PR as version bumps.","Document the three-step process (edit catalog, install, migrate-only schematics) for the team.","Consider temporarily pinning explicit versions when you need fully automated ng update."],"tags":["angular-cli","pnpm","yarn","catalog","monorepo"],"backgroundTag":"catalog-protocol-unsupported","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}