What changed in angular-cli from 21 to 22

13 releases numbered after v21.2.23 up to and including v22.1.7, stable releases only. v21.2.23 and v22.1.7 are the newest stable releases of 21 and 22 we track; this page follows them as new ones ship.

97 changes across 13 releases

Added 8

v22.1.0

  • update ai-config to include Angular MCP server config
  • add built-in SQLite cache store fallback
  • emit debug ids for stable subresource integrity hashes
  • enable chunk optimization for server builds
  • migrate advanced optimization Babel plugins to oxc-parser and magic-string
  • migrate i18n inliner to oxc-parser and magic-string
  • share persistent build cache across git worktrees
  • support the standard Forwarded header
Changed 12

v22.1.6

  • Batch prerender routes and share in-memory server bundles

v22.1.5

  • Traverse AST with iterative post-order walker in i18n inliner

v22.1.4

  • avoid eager module loading during global bootstrap
  • avoid encoding the inline source map before remapping
  • batch last_accessed updates in sqlite cache store
  • hash the i18n inline cache key options once per locale
  • optimize template string size calculation in server manifest
  • share i18n translations with the inliner workers by reference
  • use Map for chunk asset size lookups in budget calculator

v22.1.3

  • release build resources early in non-watch mode
  • avoid buffering request body when sanitizing headers

v22.0.8

  • skip semantic affected-file walk when type checking is disabled
Fixed 75

v22.1.7

  • isolate temporary package installations from parent Yarn workspace
  • add splitting option to unit-test builder
  • enable code splitting for vitest browser tests
  • fail build and exclude routes when prerendering fails
  • keep dev-server Vite cache worktree-local
  • preserve binary values in the SQLite cache store
  • decode pathname when constructing server asset path
  • ensure public directory containment in CommonEngine

v22.1.6

  • Ignore side-effect annotations in unit test builds
  • Abort web request signal when node request is aborted

v22.1.5

  • Transform fail() to expect.fail() in refactor-jasmine-vitest
  • Enforce MCP roots in get_best_practices tool
  • Handle errors from isAllowedWorkspacePath in best-practices tool
  • Throw on out-of-roots workspace in best-practices tool
  • Correct misleading error message for top-level await
  • Disable code splitting for unit test builds
  • Preserve integrity and crossorigin in autoCsp loader

v22.1.4

  • generate CLAUDE.md for Claude Code instead of AGENTS.md
  • import UrlSegment instead of subPath in guard generator
  • disable searching current directory for bare executable names on Windows
  • serialize configuration as a single argv token in run_target strategies
  • count statically imported chunks in the initial total
  • normalize setupFiles paths to POSIX for vitest runner
  • prevent syntax corruption for Crockford-style enum IIFE
  • prevent syntax corruption in oxc transform
  • return direct file contents for non-Angular TypeScript files
  • return only lowest version per target engine
  • set target for Rolldown dependency prebundling in Vite dev server
  • destroy platform when response stream is cancelled

v22.1.3

  • always install package during ng add to inspect manifest on disk for schematics
  • correctly report available package updates during bare ng update
  • discover migrations from installed packages when omitted by registry metadata
  • normalize Windows drive-letter casing for process.cwd
  • prevent build process hang on unhandled error
  • retain watch files on error in load result cache
  • support case-insensitive and alternative license file names
  • settle writeResponseToNodeResponse when client disconnects

v22.1.2

  • add packages with built-in schematics to devDependencies only
  • prevent IIFE wrapper interleaving for adjacent classes in minified files

v22.1.1

  • support npm 12 metadata array and error formats
  • rewrite paths from sandboxed execroots when running under Bazel

v22.1.0

  • abort and guide manual mitigation when updating catalog packages
  • prevent Yarn registry environment variable override
  • remove algoliasearch dependency and support latest docs versions
  • resolve correct registry name when using npm alias syntax during update
  • respect client-side release age settings during update resolution
  • revert package.json changes if installation tasks fail during update
  • robustly parse npm manifest from array
  • remove unused spec tsconfig outDir
  • add bounded timeout to vitest executor disposal
  • anchor debug ID comment matching and make injection idempotent
  • prevent esbuild service hang on internal component stylesheet builds

v22.0.9

  • declare devserver_start and devserver_stop as isReadOnly:false
  • safeguard Karma builder stream controller against closed state

v22.0.8

  • batch Prettier invocations during migration formatting
  • update MCP devserver tool names to conform to spec regex
  • canonicalize drive letter casing for workspace root on Windows
  • ensure import map integrity keys are valid URL-like specifiers
  • favor istanbul coverage provider when browser testing is enabled
  • preserve custom config options in runnerConfig for vitest
  • remap metafile paths when workspace root is a symlink or junction

v22.0.7

  • copy packageManager field and yarn config for temp installs
  • support resolving subproject dependencies in pnpm workspaces

v22.0.6

  • fallback to build target preserveSymlinks option in karma runner
  • prevent externalizing builder-injected i18n locale data
  • strip all vite id prefixes from minified code with external dependencies
  • replace all route parameters when resolving relative redirects

v22.0.5

  • Remove unused app tsconfig outDir
  • Gracefully handle package manager errors in command handler
  • Respect release age policy in update bootstrapping logic
  • Auto-inject localize/init in library unit tests
  • Inherit preserveSymlinks option from build target in unit-test builder
  • Load zone.js dynamically for library unit tests
  • Scope createRequire module resolution using paths to prevent parent paths
  • Preserve response headers during redirect
Deprecated 1

v22.1.0

  • stringToFileBuffer and fileBufferToString are deprecated; use standard Web APIs (TextEncoder and TextDecoder) instead
Security 1

v22.0.5

  • Prevent OS command injection in ssr-dev-server builder

Original release notes, newest first

The list above is our reading of these notes; the originals from angular-cli are here, one fold per release.

v22.1.722.1.7
@angular/cli
CommitDescription
fix - e9db85c0fisolate temporary package installations from parent Yarn workspace
@angular/build
CommitDescription
fix - 1c9b1af61add splitting option to unit-test builder
fix - 4b861f458enable code splitting for vitest browser tests
fix - f1fd82381fail build and exclude routes when prerendering fails
fix - a84906fe3keep dev-server Vite cache worktree-local
fix - fcf883ef1preserve binary values in the SQLite cache store
@angular/ssr
CommitDescription
fix - baf1ca189decode pathname when constructing server asset path
fix - 70748ca8eensure public directory containment in CommonEngine

View originalPermalink

v22.1.622.1.6
@angular/build
CommitDescription
fix - 3f132eaa97ignore side-effect annotations in unit test builds
perf - 5b1028936fbatch prerender routes and share in-memory server bundles
@angular/ssr
CommitDescription
fix - 76818cb811abort web request signal when node request is aborted

View originalPermalink

v22.1.522.1.5
@schematics/angular
CommitDescription
fix - ba2b0e4c2transform fail() to expect.fail() in refactor-jasmine-vitest
@angular/cli
CommitDescription
fix - e672271f8enforce MCP roots in get_best_practices tool
fix - a14916cc4handle errors from isAllowedWorkspacePath in best-practices tool
fix - d6e1cddffthrow on out-of-roots workspace in best-practices tool
@angular/build
CommitDescription
fix - cba72902dcorrect misleading error message for top-level await
fix - b4679998cdisable code splitting for unit test builds
fix - ff1d3565epreserve integrity and crossorigin in autoCsp loader
perf - 1fc1fb05ctraverse AST with iterative post-order walker in i18n inliner

View originalPermalink

v22.1.422.1.4
@schematics/angular
CommitDescription
fix - d4a48e3abgenerate CLAUDE.md for Claude Code instead of AGENTS.md
fix - d451f15b2import UrlSegment instead of subPath in guard generator
@angular/cli
CommitDescription
fix - 67a29899bdisable searching current directory for bare executable names on Windows
fix - 1b0ba5c17serialize configuration as a single argv token in run_target strategies (#33657)
perf - 9440432d2avoid eager module loading during global bootstrap
@angular/build
CommitDescription
fix - 46fcb29d6count statically imported chunks in the initial total
fix - 796b57684normalize setupFiles paths to POSIX for vitest runner
fix - c805e5cfbprevent syntax corruption for Crockford-style enum IIFE
fix - cc6c17716prevent syntax corruption in oxc transform
fix - a142f6f83return direct file contents for non-Angular TypeScript files
fix - 956c6578dreturn only lowest version per target engine
fix - 689b5b116set target for Rolldown dependency prebundling in Vite dev server
perf - 70461f6edavoid encoding the inline source map before remapping
perf - 22cce7563batch last_accessed updates in sqlite cache store
perf - ab2ed18d5hash the i18n inline cache key options once per locale
perf - 34516ff73optimize template string size calculation in server manifest
perf - 712971c37share i18n translations with the inliner workers by reference
perf - 78f8c5fefuse Map for chunk asset size lookups in budget calculator
@angular/ssr
CommitDescription
fix - 2331c1047destroy platform when response stream is cancelled

View originalPermalink

v22.1.322.1.3
@angular/cli
CommitDescription
fix - f837b788c6always install package during ng add to inspect manifest on disk for schematics (#33718)
fix - 72ae93638dcorrectly report available package updates during bare ng update
fix - a949e06568discover migrations from installed packages when omitted by registry metadata (#33718)
fix - 1d9122fd50normalize Windows drive-letter casing for process.cwd
@angular/build
CommitDescription
fix - a4860d505aprevent build process hang on unhandled error (#33715)
fix - 7686d66cabretain watch files on error in load result cache
fix - 25b7cf7504support case-insensitive and alternative license file names
perf - 4fd81402cerelease build resources early in non-watch mode (#33715)
@angular/ssr
CommitDescription
fix - 6af906cb94settle writeResponseToNodeResponse when client disconnects
perf - 917d3b2254avoid buffering request body when sanitizing headers

View originalPermalink

v22.1.222.1.2
@angular/cli
CommitDescription
fix - 57db27ea91add packages with built-in schematics to devDependencies only
@angular/build
CommitDescription
fix - baed978885prevent IIFE wrapper interleaving for adjacent classes in minified files

View originalPermalink

v22.1.122.1.1
@angular/cli
CommitDescription
fix - ab971a8543support npm 12 metadata array and error formats
@angular/build
CommitDescription
fix - db24220fb8rewrite paths from sandboxed execroots when running under Bazel

View originalPermalink

v22.1.022.1.0
@angular/cli
CommitDescription
fix - f59bcf529abort and guide manual mitigation when updating catalog packages
fix - 48f90f5d5prevent Yarn registry environment variable override
fix - c963ecbecremove algoliasearch dependency and support latest docs versions
fix - 6859d25c3resolve correct registry name when using npm alias syntax during update
fix - 3a2589dacrespect client-side release age settings during update resolution
fix - 5c3101bffrevert package.json changes if installation tasks fail during update
fix - 7932caaf9robustly parse npm manifest from array
@schematics/angular
CommitDescription
feat - 89d7f59cdupdate ai-config to include Angular MCP server config
fix - b345bb54dremove unused spec tsconfig outDir
@angular-devkit/core
CommitDescription
refactor - fd336d365deprecate stringToFileBuffer and fileBufferToString
@angular/build
CommitDescription
feat - 34d558c3cadd built-in SQLite cache store fallback
feat - 0c18dc0f6emit debug ids for stable subresource integrity hashes
feat - 51f69276fenable chunk optimization for server builds
feat - 10dc30f9cmigrate advanced optimization Babel plugins to oxc-parser + magic-string
feat - 917393a4cmigrate i18n inliner to oxc-parser + magic-string
feat - 52ae7f862share persistent build cache across git worktrees
fix - 95510511dadd bounded timeout to vitest executor disposal
fix - 62b11e316anchor debug ID comment matching and make injection idempotent
fix - 6d9b360e5prevent esbuild service hang on internal component stylesheet builds
fix - 291caab61prevent stripping nested sourceMappingURL comments
fix - 0e3ca3dfbsupport hyphens and underscores when stripping chunk hash in chunk optimizer
perf - 585d08af8default chunk optimization to use Rolldown
perf - 09d0a11a8enable fast-path AST printing with sourcemaps in AotCompilation
@angular/ssr
CommitDescription
feat - 7ef9ed24dsupport the standard Forwarded header
Deprecations
@angular-devkit/core
  • stringToFileBuffer and fileBufferToString are deprecated. Use standard Web APIs (TextEncoder and TextDecoder) instead.

    Internal usages within the repository have been removed and replaced with standard Web APIs. The public API golden file for @angular-devkit/core has been updated to reflect the deprecations.

View originalPermalink

v22.0.922.0.9
@angular/cli
CommitDescription
fix - 9ee8f9b669declare devserver_start and devserver_stop as isReadOnly:false
@angular/build
CommitDescription
fix - d0c776d461safeguard Karma builder stream controller against closed state

View originalPermalink

v22.0.822.0.8
@angular/cli
CommitDescription
fix - 41c356256batch Prettier invocations during migration formatting
fix - bc87c85c3update MCP devserver tool names to conform to spec regex
@angular/build
CommitDescription
fix - 5724bf632canonicalize drive letter casing for workspace root on Windows
fix - b8bdbaa1eensure import map integrity keys are valid URL-like specifiers
fix - 212a7bb21favor istanbul coverage provider when browser testing is enabled
fix - bc760b005preserve custom config options in runnerConfig for vitest
fix - 19cda7415remap metafile paths when workspace root is a symlink or junction
perf - fdcc98c79skip semantic affected-file walk when type checking is disabled

View originalPermalink

v22.0.722.0.7
@angular/cli
CommitDescription
fix - e85c10ccbcopy packageManager field and yarn config for temp installs
fix - b87cafec0support resolving subproject dependencies in pnpm workspaces

View originalPermalink

v22.0.622.0.6
@angular/build
CommitDescription
fix - df49966c6fallback to build target preserveSymlinks option in karma runner
fix - 9906add5bprevent externalizing builder-injected i18n locale data
fix - 070155f6estrip all vite id prefixes from minified code with external dependencies
@angular/ssr
CommitDescription
fix - c9aa354b1replace all route parameters when resolving relative redirects

View originalPermalink

v22.0.522.0.5
@schematics/angular
CommitDescription
fix - 862a38069remove unused app tsconfig outDir
@angular/cli
CommitDescription
fix - f099e641cgracefully handle package manager errors in command handler
fix - cf033ec48respect release age policy in update bootstrapping logic
@angular-devkit/build-angular
CommitDescription
fix - f75085f4bprevent OS command injection in ssr-dev-server builder
@angular/build
CommitDescription
fix - dfee1e7b1auto-inject localize/init in library unit tests
fix - aba718403inherit preserveSymlinks option from build target in unit-test builder
fix - 7c0d9f03cload zone.js dynamically for library unit tests
fix - 4288e4452scope createRequire module resolution using paths to prevent parent paths
@angular/ssr
CommitDescription
fix - 5f774f891preserve response headers during redirect

View originalPermalink