tag:github.com,2008:https://github.com/angular/angular-cli/releases
Release notes from angular-cli
2026-06-18T13:33:33Z
tag:github.com,2008:Repository/36891867/v22.0.3
2026-06-18T13:33:37Z
22.0.3
<h3>@schematics/angular</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/0eddea898d3bf4da8c9c5c27ec2ee79916e8be87"><img src="https://camo.githubusercontent.com/2ea67c62476c8e5a3ce69df4e8563f65ad349c9d1a2aa57c0f38437fefa52084/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3065646465613839382d6669782d677265656e" alt="fix - 0eddea898" data-canonical-src="https://img.shields.io/badge/0eddea898-fix-green" style="max-width: 100%;"></a></td>
<td>remove default workspace vscode mcp.json configuration</td>
</tr>
</tbody>
</table>
clydin
tag:github.com,2008:Repository/36891867/v22.0.2
2026-06-17T14:07:32Z
22.0.2
<h3>@angular/cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/136fc27149af74263ef519007f0a74f9f85c5b4d"><img src="https://camo.githubusercontent.com/e1a149be315022911f5d0a380b11a100440d97ac187869aa1a4d5ce97a379364/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3133366663323731342d6669782d677265656e" alt="fix - 136fc2714" data-canonical-src="https://img.shields.io/badge/136fc2714-fix-green" style="max-width: 100%;"></a></td>
<td>support registry metadata fetching under bun package manager</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/2653dd5c7d47149b61bfe6edf4ab1281347e89dd"><img src="https://camo.githubusercontent.com/57a7388f41ae4494f592f450b1ed2c989e03e03d0388e2f5fbd0f85e4c5f8b5f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3236353364643563372d706572662d6f72616e6765" alt="perf - 2653dd5c7" data-canonical-src="https://img.shields.io/badge/2653dd5c7-perf-orange" style="max-width: 100%;"></a></td>
<td>implement semaphore backpressure throttling in PackageManager</td>
</tr>
</tbody>
</table>
<h3>@angular/build</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/0b4a48add9d7218e698af0db974bd597bed8a121"><img src="https://camo.githubusercontent.com/4db005036e7ceab4c1e46aada62f2bb27b3f5e216c2eb87a4faf28ee7de17bc4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3062346134386164642d706572662d6f72616e6765" alt="perf - 0b4a48add" data-canonical-src="https://img.shields.io/badge/0b4a48add-perf-orange" style="max-width: 100%;"></a></td>
<td>implement semaphore backpressure throttling in JavaScriptTransformer</td>
</tr>
</tbody>
</table>
<h3>@angular/ssr</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/d996a27e9744b473a7db56f81871731b8bdce585"><img src="https://camo.githubusercontent.com/c1275cb99a0ef3be684b2538f4eeb141d86c9f8eaac5ef982b0f77a5d9aa815e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6439393661323765392d6669782d677265656e" alt="fix - d996a27e9" data-canonical-src="https://img.shields.io/badge/d996a27e9-fix-green" style="max-width: 100%;"></a></td>
<td>avoid caching non-SSG page lookups</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/285a34e42f1cdc512468de0041b232c7190e7d7e"><img src="https://camo.githubusercontent.com/c5137c0fecc2e1e1714cd8a9ad66cea2ab2d88693ee5e4d1380d584aff1e354c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3238356133346534322d6669782d677265656e" alt="fix - 285a34e42" data-canonical-src="https://img.shields.io/badge/285a34e42-fix-green" style="max-width: 100%;"></a></td>
<td>correct grammar in console warning for redirected location headers</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/c8088a536c2c747a273e37be682643e1b35e2f75"><img src="https://camo.githubusercontent.com/51a583bfb74cf8690d0ba8011d7a0300c51a915e267c74fa1e7c7eda813a9575/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6338303838613533362d6669782d677265656e" alt="fix - c8088a536" data-canonical-src="https://img.shields.io/badge/c8088a536-fix-green" style="max-width: 100%;"></a></td>
<td>prioritize options over environment variables in AngularNodeAppEngine</td>
</tr>
</tbody>
</table>
clydin
tag:github.com,2008:Repository/36891867/v21.2.16
2026-06-17T15:31:52Z
21.2.16
<h3>@angular/cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/77c9047acdf4b69ec6dd399af2dff7278e8014c7"><img src="https://camo.githubusercontent.com/dffd78db8d554f702eb7eb9e8116f0d19f41d79bbac0b367fc353903395bd359/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3737633930343761632d6669782d677265656e" alt="fix - 77c9047ac" data-canonical-src="https://img.shields.io/badge/77c9047ac-fix-green" style="max-width: 100%;"></a></td>
<td>update pacote to 21.5.1</td>
</tr>
</tbody>
</table>
<h3>@angular/ssr</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/d052e97dafe2e85fbc072fd11025c803ebb80ef1"><img src="https://camo.githubusercontent.com/bc1257e955e4da43353d9bc01ec3b5a1d9eb478089932bdcc5a6bbb7de4cbf2e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6430353265393764612d6669782d677265656e" alt="fix - d052e97da" data-canonical-src="https://img.shields.io/badge/d052e97da-fix-green" style="max-width: 100%;"></a></td>
<td>prioritize options over environment variables in AngularNodeAppEngine</td>
</tr>
</tbody>
</table>
clydin
tag:github.com,2008:Repository/36891867/v20.3.29
2026-06-17T14:54:35Z
20.3.29
<h3>@angular/cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/5f7c0328c3fe1a003ade44861d9aac98f485f014"><img src="https://camo.githubusercontent.com/e73bde9cd51682ead448fef3ad5afd3e3d60811bf7d31c41c5077d67a3b5f95f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3566376330333238632d6669782d677265656e" alt="fix - 5f7c0328c" data-canonical-src="https://img.shields.io/badge/5f7c0328c-fix-green" style="max-width: 100%;"></a></td>
<td>update pacote to 21.5.1</td>
</tr>
</tbody>
</table>
<h3>@angular/ssr</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/a75d78e681b10436971d8071450b8cfd93b2d72a"><img src="https://camo.githubusercontent.com/298e5f9dd514c54ffa6f32b0bc97dc9592e589a28694054dcc672b763f042d83/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6137356437386536382d6669782d677265656e" alt="fix - a75d78e68" data-canonical-src="https://img.shields.io/badge/a75d78e68-fix-green" style="max-width: 100%;"></a></td>
<td>prioritize options over environment variables in AngularNodeAppEngine</td>
</tr>
</tbody>
</table>
clydin
tag:github.com,2008:Repository/36891867/v22.1.0-next.0
2026-06-11T16:42:57Z
22.1.0-next.0
<h3>@angular/cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/7932caaf987c5692d6624f6af23e65ce3f6d27fd"><img src="https://camo.githubusercontent.com/4b6fef1fa3e27f1634c3706a6cbc8d3353ce76895989ec1de52581c422875b39/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3739333263616166392d6669782d677265656e" alt="fix - 7932caaf9" data-canonical-src="https://img.shields.io/badge/7932caaf9-fix-green" style="max-width: 100%;"></a></td>
<td>robustly parse npm manifest from array</td>
</tr>
</tbody>
</table>
<h3>@schematics/angular</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/89d7f59cd7cc5d821ac0e81b1fee50e27877c976"><img src="https://camo.githubusercontent.com/5e3fc84db7d887b1d736d2bb424b1278e8f651686ae5d63d9630f882bd21c280/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3839643766353963642d666561742d626c7565" alt="feat - 89d7f59cd" data-canonical-src="https://img.shields.io/badge/89d7f59cd-feat-blue" style="max-width: 100%;"></a></td>
<td>update ai-config to include Angular MCP server config</td>
</tr>
</tbody>
</table>
<h3>@angular-devkit/core</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/fd336d365dbfe8f558db177a8da24790914a541b"><img src="https://camo.githubusercontent.com/c118548a9ae1faaa9a57cad9b077a160b49dbfca1d7a4003321e5ee67e56996d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6664333336643336352d7265666163746f722d79656c6c6f77" alt="refactor - fd336d365" data-canonical-src="https://img.shields.io/badge/fd336d365-refactor-yellow" style="max-width: 100%;"></a></td>
<td>deprecate stringToFileBuffer and fileBufferToString</td>
</tr>
</tbody>
</table>
<h3>@angular/ssr</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/ddcef9d484e205c5fcfd93d184425c1c1af19c34"><img src="https://camo.githubusercontent.com/84ac235dc91118439c3fa6759de48b988cdcefb966ec524eee7dfd37dc18a11e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6464636566396434382d6669782d677265656e" alt="fix - ddcef9d48" data-canonical-src="https://img.shields.io/badge/ddcef9d48-fix-green" style="max-width: 100%;"></a></td>
<td>correct grammar in console warning for redirected location headers</td>
</tr>
</tbody>
</table>
<h2>Deprecations</h2>
<h3>@angular-devkit/core</h3>
<ul>
<li>
<p><code>stringToFileBuffer</code> and <code>fileBufferToString</code> are deprecated. Use standard Web APIs (<code>TextEncoder</code> and <code>TextDecoder</code>) instead.</p>
<p>Internal usages within the repository have been removed and replaced with standard Web APIs. The public API golden file for <code>@angular-devkit/core</code> has been updated to reflect the deprecations.</p>
</li>
</ul>
alan-agius4
tag:github.com,2008:Repository/36891867/v21.2.15
2026-06-11T15:54:56Z
21.2.15
<h3>@angular/cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/42ac0ed0ff8b98862b9df1cef048f463ddc2cd85"><img src="https://camo.githubusercontent.com/b6c627f191e70c0beadebc9c2b0a5ad3a8f01d61539e6c36eb0ce7e7f7189f6e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3432616330656430662d6669782d677265656e" alt="fix - 42ac0ed0f" data-canonical-src="https://img.shields.io/badge/42ac0ed0f-fix-green" style="max-width: 100%;"></a></td>
<td>remove forceAuth and unscoped credential parsing</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/c7a7f1955619717ca775f730d67e3311047537f8"><img src="https://camo.githubusercontent.com/825943d24396131ca611f9be228908d600e8c625f42f9b3d673d0c67dc8afe13/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6337613766313935352d6669782d677265656e" alt="fix - c7a7f1955" data-canonical-src="https://img.shields.io/badge/c7a7f1955-fix-green" style="max-width: 100%;"></a></td>
<td>support registry metadata fetching under bun package manager</td>
</tr>
</tbody>
</table>
dgp1130
tag:github.com,2008:Repository/36891867/v20.3.28
2026-06-11T16:37:13Z
20.3.28
<h3>@angular/cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/e3d5646679215d9b73a72e04d87aa7848f2c01d2"><img src="https://camo.githubusercontent.com/add162191651f3b8626447448c067ab688876662ae8d419b6c29570331fb1cb4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6533643536343636372d6669782d677265656e" alt="fix - e3d564667" data-canonical-src="https://img.shields.io/badge/e3d564667-fix-green" style="max-width: 100%;"></a></td>
<td>fallback to deprecated versions when resolving ranges if no non-deprecated version is found</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/f12e17025a262f9432afd58971c47aec7dbfab25"><img src="https://camo.githubusercontent.com/6301d95fcaedc5e2564fb4a0f18257d1166cd86374382db342e3c8fd43fefc8b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6631326531373032352d6669782d677265656e" alt="fix - f12e17025" data-canonical-src="https://img.shields.io/badge/f12e17025-fix-green" style="max-width: 100%;"></a></td>
<td>remove forceAuth and unscoped credential parsing</td>
</tr>
</tbody>
</table>
alan-agius4
tag:github.com,2008:Repository/36891867/v22.0.1
2026-06-10T22:58:32Z
22.0.1
<h3>@schematics/angular</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/c8001229453211b37cd7bb12ed26a2deb9257fd5"><img src="https://camo.githubusercontent.com/f8a9a1993643db93501600d7d59b781f378d90d33c162a0e96a06014beda4d59/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6338303031323239342d6669782d677265656e" alt="fix - c80012294" data-canonical-src="https://img.shields.io/badge/c80012294-fix-green" style="max-width: 100%;"></a></td>
<td>fix browserMode option mapping in refactor-jasmine-vitest</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/a9b6bd9042d6b859c384a6fc782541fca30dfb68"><img src="https://camo.githubusercontent.com/d94e449b4199ac6362fa69f28ed341bc0601fb2fa895b922511f82e2c8173843/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6139623662643930342d6669782d677265656e" alt="fix - a9b6bd904" data-canonical-src="https://img.shields.io/badge/a9b6bd904-fix-green" style="max-width: 100%;"></a></td>
<td>safely comment out multiline statements in refactor-jasmine-vitest</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/12199df00f2e3e8436ada13e04799e5825eb3f7b"><img src="https://camo.githubusercontent.com/ac33919337c8459fad76fc16f09a5997aa72fe3d09a45c9dd06894ce5fed6995/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3132313939646630302d6669782d677265656e" alt="fix - 12199df00" data-canonical-src="https://img.shields.io/badge/12199df00-fix-green" style="max-width: 100%;"></a></td>
<td>use null objects and callbacks in karma-to-vitest migration</td>
</tr>
</tbody>
</table>
<h3>@angular/cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/b54e9a549d30871f6017b1db4cf7a4ab5f3e02db"><img src="https://camo.githubusercontent.com/8dfa7fde88ec823cac51bde3dec7f149ebfff1f4178d8e8af695b4ef1d4e9cde/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6235346539613534392d6669782d677265656e" alt="fix - b54e9a549" data-canonical-src="https://img.shields.io/badge/b54e9a549-fix-green" style="max-width: 100%;"></a></td>
<td>do not sort migrations of the same version alphabetically</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/d333116123c7d3d5e87713b7baac048b78f28517"><img src="https://camo.githubusercontent.com/0ad80027978ddd31f6449df4339a4dd139643bc1036ca75b57c02b1ac267d13b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6433333331313631322d6669782d677265656e" alt="fix - d33311612" data-canonical-src="https://img.shields.io/badge/d33311612-fix-green" style="max-width: 100%;"></a></td>
<td>fallback to local package.json for schematic detection on first run</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/918102a9373085394c41f10d9f5df3e3c17b263f"><img src="https://camo.githubusercontent.com/e5889915936891f57bc895e60e8ff38f07eacc355fd75cb48ec6a7d18eb41e69/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3931383130326139332d6669782d677265656e" alt="fix - 918102a93" data-canonical-src="https://img.shields.io/badge/918102a93-fix-green" style="max-width: 100%;"></a></td>
<td>isolate temporary package installation from parent pnpm workspace</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/b048b5f4a83d7b20095d79654b849808e7d58fdb"><img src="https://camo.githubusercontent.com/949c45177012ca5a17ba5f8c18ac064e181af95473ec6eb861a30be16662be26/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6230343862356634612d6669782d677265656e" alt="fix - b048b5f4a" data-canonical-src="https://img.shields.io/badge/b048b5f4a-fix-green" style="max-width: 100%;"></a></td>
<td>remove forceAuth and unscoped credential parsing</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/277934035138c5af803e8daeebc2313f0a4cb5b3"><img src="https://camo.githubusercontent.com/952addb42015ffa036bb2e0f417a004011ca5e76b0620b2d501d13c5daadf7df/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3237373933343033352d6669782d677265656e" alt="fix - 277934035" data-canonical-src="https://img.shields.io/badge/277934035-fix-green" style="max-width: 100%;"></a></td>
<td>validate registry option is a valid URL in ng add</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/4510dae021ab25bb852eeed6415dbd52cfabfce5"><img src="https://camo.githubusercontent.com/efc4d78d6eeabbbb503cb2fe3faa575131d6f21338118cc7a666bb6ff9144f55/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3435313064616530322d706572662d6f72616e6765" alt="perf - 4510dae02" data-canonical-src="https://img.shields.io/badge/4510dae02-perf-orange" style="max-width: 100%;"></a></td>
<td>optimize update schematic registry query counts by fetching package metadata lazily</td>
</tr>
</tbody>
</table>
<h3>@angular/build</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/89d1be979f388d85e9c428bbf1df4e7fb4036dce"><img src="https://camo.githubusercontent.com/03c2deb3e5cd579e407865c058be8bf256752efc0e6338b0fffc18e32e828cd2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3839643162653937392d6669782d677265656e" alt="fix - 89d1be979" data-canonical-src="https://img.shields.io/badge/89d1be979-fix-green" style="max-width: 100%;"></a></td>
<td>allow disabling Vitest isolation from builder</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/d45b84be9a607e49b391cb216cb6de7eca274931"><img src="https://camo.githubusercontent.com/8c4598a80e75b429d06a76f17b56cc71d229df372b3ac669f99a45e71e1703e0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6434356238346265392d6669782d677265656e" alt="fix - d45b84be9" data-canonical-src="https://img.shields.io/badge/d45b84be9-fix-green" style="max-width: 100%;"></a></td>
<td>exclude JSON imports from Vite dependency optimization</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/e3cab4dddade2538125e8a2f345f42c95e26aeae"><img src="https://camo.githubusercontent.com/adb2676f6c057d59838954a682db8b0a58b08a05af5454f5eb30712735df882d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6533636162346464642d6669782d677265656e" alt="fix - e3cab4ddd" data-canonical-src="https://img.shields.io/badge/e3cab4ddd-fix-green" style="max-width: 100%;"></a></td>
<td>prevent concurrent stylesheet bundling esbuild context leaks</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/bd413b0eb156184ea432cbb7d4e6d7f6f70813ab"><img src="https://camo.githubusercontent.com/871b6ea547ab19889804ed05e4e949885679ddb659a1ced82040dc2c85dd2290/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6264343133623065622d6669782d677265656e" alt="fix - bd413b0eb" data-canonical-src="https://img.shields.io/badge/bd413b0eb-fix-green" style="max-width: 100%;"></a></td>
<td>restrict application builder output paths to output directory</td>
</tr>
</tbody>
</table>
dgp1130
tag:github.com,2008:Repository/36891867/v22.0.0
2026-06-03T14:09:47Z
22.0.0
<h3>@schematics/angular</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/be60a63b7b8fdea26bfd3329ce54d321334db2d2"><img src="https://camo.githubusercontent.com/148baa763d5aa02bc000d6f780b577b2f6e9a7641c77034ebaa62754d899cfa5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6265363061363362372d666561742d626c7565" alt="feat - be60a63b7" data-canonical-src="https://img.shields.io/badge/be60a63b7-feat-blue" style="max-width: 100%;"></a></td>
<td>add migrate-karma-to-vitest update migration</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/43505066e2350ca875051bb0f9991da8003c9247"><img src="https://camo.githubusercontent.com/2560cf3649f47d97b9fc73f77dbb3bf2dd55636360d8e2f84dd3de51705511a8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3433353035303636652d666561742d626c7565" alt="feat - 43505066e" data-canonical-src="https://img.shields.io/badge/43505066e-feat-blue" style="max-width: 100%;"></a></td>
<td>add migration to add istanbul-lib-instrument</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/b2f7a038b4a321e4e1b0b340cd09425f948c77ad"><img src="https://camo.githubusercontent.com/103f1a9d6b4fcde3fa3a25e5a46593f578cb1de86a8f93e2d47c9d22ed5e7c75/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6232663761303338622d666561742d626c7565" alt="feat - b2f7a038b" data-canonical-src="https://img.shields.io/badge/b2f7a038b-feat-blue" style="max-width: 100%;"></a></td>
<td>conditionally install istanbul coverage provider for Vitest migration</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/d227e6985ef5540e0eea2571577ee2b9be0d3c64"><img src="https://camo.githubusercontent.com/a89deba99384710cb7a6fabafd79d8dbe0c9b587baca548dd6b2c63d70257e5d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6432323765363938352d666561742d626c7565" alt="feat - d227e6985" data-canonical-src="https://img.shields.io/badge/d227e6985-feat-blue" style="max-width: 100%;"></a></td>
<td>migrate fake async to Vitest fake timers</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/d2aa9ede55a3e16b61ce6ae60dba6c8ea8954358"><img src="https://camo.githubusercontent.com/c2b5ee0e8cc4ee305293002e647383073906d97b2ff57ae2d2e5cef893e5d4ce/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6432616139656465352d666561742d626c7565" alt="feat - d2aa9ede5" data-canonical-src="https://img.shields.io/badge/d2aa9ede5-feat-blue" style="max-width: 100%;"></a></td>
<td>migrate fakeAsync's flush behavior when used in beforeEach</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/f98cc82eb0f46986e61b4f94b57dcd36e4eaf215"><img src="https://camo.githubusercontent.com/aff38f6bf67c0413295619762d453553456248c3af50b6d2c3d62cb2fee152e5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6639386363383265622d666561742d626c7565" alt="feat - f98cc82eb" data-canonical-src="https://img.shields.io/badge/f98cc82eb-feat-blue" style="max-width: 100%;"></a></td>
<td>rely on strict template default in generated workspaces</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/c9f4081533f6f114846b88a152a9d5dc7363d680"><img src="https://camo.githubusercontent.com/1cc169450b26160ce7f671ba1a3344eff08c64540be3e002d3fbf87c53481fce/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6339663430383135332d666561742d626c7565" alt="feat - c9f408153" data-canonical-src="https://img.shields.io/badge/c9f408153-feat-blue" style="max-width: 100%;"></a></td>
<td>set up fake timers in beforeEach instead of beforeAll</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/de630c2fcee22622942478c98117d8f473d8c894"><img src="https://camo.githubusercontent.com/197a1e7f7625118c5117a88ed4f500cee90f22ba9e021c8992554def223758e7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6465363330633266632d666561742d626c7565" alt="feat - de630c2fc" data-canonical-src="https://img.shields.io/badge/de630c2fc-feat-blue" style="max-width: 100%;"></a></td>
<td>stabilize refactor-jasmine-vitest schematic</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/8d0805dd1750cb16af620811dc01b40e46ad030e"><img src="https://camo.githubusercontent.com/74d58511e6743706004a71d48f2a35ebfb36d63a15bbd52510ffc0a16854aaab/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3864303830356464312d666561742d626c7565" alt="feat - 8d0805dd1" data-canonical-src="https://img.shields.io/badge/8d0805dd1-feat-blue" style="max-width: 100%;"></a></td>
<td>update TSConfig globals during karma to vitest migration</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/470e1f937492e73971dea9c39af83368caf74e42"><img src="https://camo.githubusercontent.com/7011617f02e230135d2bce261180e81d33bfc854a98fffce633131ec3eef787f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3437306531663933372d6669782d677265656e" alt="fix - 470e1f937" data-canonical-src="https://img.shields.io/badge/470e1f937-fix-green" style="max-width: 100%;"></a></td>
<td>add istanbul-lib-instrument to application/library generator dependencies</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/dc1238e5a4c9ab5902735e3d74bc7c5cc57553bd"><img src="https://camo.githubusercontent.com/814e631911f05ce50486cab798bdac4cc6230d5c914ff5a8f601aecfb06484c6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6463313233386535612d6669782d677265656e" alt="fix - dc1238e5a" data-canonical-src="https://img.shields.io/badge/dc1238e5a-fix-green" style="max-width: 100%;"></a></td>
<td>add trusted-proxy-headers migration</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/6572a69443356ff0022e6ce162915125fee0e3bb"><img src="https://camo.githubusercontent.com/5e07d18dfc7777b865fc5539e1bee7d31e42a31c9054e1e078abb6f08a3dc4ff/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3635373261363934342d6669782d677265656e" alt="fix - 6572a6944" data-canonical-src="https://img.shields.io/badge/6572a6944-fix-green" style="max-width: 100%;"></a></td>
<td>default components to OnPush change detection</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/aed407db8be6bc7591fb82f10c79586cbd072a8a"><img src="https://camo.githubusercontent.com/c55772d17de0c0f2e7525a2abb2b78dd1345b20d36aacea1baa30da62b249c8d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6165643430376462382d6669782d677265656e" alt="fix - aed407db8" data-canonical-src="https://img.shields.io/badge/aed407db8-fix-green" style="max-width: 100%;"></a></td>
<td>defer karma config deletion in Karma to Vitest migration</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/4fbc6089174142623fbd28cc68cede181074fab5"><img src="https://camo.githubusercontent.com/c8f0c19ca19b178332ca88e9deaa5711baa1ad9d5bdae03d6f83b28603fa3f68/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3466626336303839312d6669782d677265656e" alt="fix - 4fbc60891" data-canonical-src="https://img.shields.io/badge/4fbc60891-fix-green" style="max-width: 100%;"></a></td>
<td>preserve Jasmine stub-by-default semantics for bare spies</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/b3d838dfdb2adc3bd035b495f7f9457d742d73a4"><img src="https://camo.githubusercontent.com/ccec34d01154cb3b34a36c4616c06ac033f0133fe46285342742c00a54cfde72/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6233643833386466642d6669782d677265656e" alt="fix - b3d838dfd" data-canonical-src="https://img.shields.io/badge/b3d838dfd-fix-green" style="max-width: 100%;"></a></td>
<td>replace deprecated <code>ChangeDetectionStrategy.Default</code> with <code>Eager</code></td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/a7ac8e5f0a268994a8fcfebbf56f76e994b6207d"><img src="https://camo.githubusercontent.com/b9bc3b6515d53c7822433b9cb4f0dac2773d1d11e52b17a18941905c7828ba18/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6137616338653566302d6669782d677265656e" alt="fix - a7ac8e5f0" data-canonical-src="https://img.shields.io/badge/a7ac8e5f0-fix-green" style="max-width: 100%;"></a></td>
<td>support spy call arguments migration in refactor-jasmine-vitest</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/7fb59eaa65a8d7e880b6f44d715b2aeaff9301ca"><img src="https://camo.githubusercontent.com/48fe2297cdb4c49f78c370b40a5636e85a165d489037bf9c4dcb8ca683a4307f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3766623539656161362d6669782d677265656e" alt="fix - 7fb59eaa6" data-canonical-src="https://img.shields.io/badge/7fb59eaa6-fix-green" style="max-width: 100%;"></a></td>
<td>use service decorator in ng generate</td>
</tr>
</tbody>
</table>
<h3>@angular/cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/58c0978f658ee5fa7232abd8e2eb7f146e4eb6bb"><img src="https://camo.githubusercontent.com/77f51d1ae52e49f62eaa56f34fbd02d6f4b89e195cebf1a6f75f17b0d0d36a4d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3538633039373866362d666561742d626c7565" alt="feat - 58c0978f6" data-canonical-src="https://img.shields.io/badge/58c0978f6-feat-blue" style="max-width: 100%;"></a></td>
<td>add support for Node.js 26.0.0</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/a5c7c0b5fda4ae0c00351ba34e5f39dab2c6baee"><img src="https://camo.githubusercontent.com/40e215ab75074c538f23de2f923a740ef8fe48c5135ebbd1b1db8ec4b81589cd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6135633763306235662d6669782d677265656e" alt="fix - a5c7c0b5f" data-canonical-src="https://img.shields.io/badge/a5c7c0b5f-fix-green" style="max-width: 100%;"></a></td>
<td>reflect new minimum supported Node version in ng.js</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/a5e1e48db759e9ffcaa89f04504f5f93a1afdda4"><img src="https://camo.githubusercontent.com/9590b69833fb83fad1b651a8ccd1fa2e7ce047f738b645b5555a90aaa386b7ee/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6135653165343864622d6669782d677265656e" alt="fix - a5e1e48db" data-canonical-src="https://img.shields.io/badge/a5e1e48db-fix-green" style="max-width: 100%;"></a></td>
<td>update odd-numbered Node.js version warning condition for future releases</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/93c3eb8fb2a0d531f18779152b0a62e9b73dbb23"><img src="https://camo.githubusercontent.com/2ed2d2181635728f306e7597966152a3369ae0edb2f3546dc83e0b8c4298f042/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3933633365623866622d6669782d677265656e" alt="fix - 93c3eb8fb" data-canonical-src="https://img.shields.io/badge/93c3eb8fb-fix-green" style="max-width: 100%;"></a></td>
<td>update zoneless migration tool to handle <code>ChangeDetectionStrategy.Eager</code></td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/a39a33128fb56e9c65ea89e06c4f127252d3b220"><img src="https://camo.githubusercontent.com/552d14b3726f90dc1c5d4025b03ccf3650b465e7b1aca9b68857df99a930570d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6133396133333132382d706572662d6f72616e6765" alt="perf - a39a33128" data-canonical-src="https://img.shields.io/badge/a39a33128-perf-orange" style="max-width: 100%;"></a></td>
<td>cache root manifest and resolve restricted package exports in ng add</td>
</tr>
</tbody>
</table>
<h3></h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/d0e9e81639be33c453f1ef66c7c1c8ea4fe543c2"><img src="https://camo.githubusercontent.com/79b873594583f112d53d8a0a4704f854e9ea36a6653868832bab7242f18ca5f9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6430653965383136332d6275696c642d79656c6c6f77" alt="build - d0e9e8163" data-canonical-src="https://img.shields.io/badge/d0e9e8163-build-yellow" style="max-width: 100%;"></a></td>
<td>update minimum supported Node.js versions</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/1f21e89d99c191642627df6842402644a1bf26ee"><img src="https://camo.githubusercontent.com/1a562a8c7c8305fb5ecc46c32d987fd4c36cd8f772d8506be389b088f5a309df/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3166323165383964392d7265666163746f722d79656c6c6f77" alt="refactor - 1f21e89d9" data-canonical-src="https://img.shields.io/badge/1f21e89d9-refactor-yellow" style="max-width: 100%;"></a></td>
<td>remove <code>@angular-devkit/architect-cli</code> package</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/b4885b851226709ae4146070122806e14a3d5eb9"><img src="https://camo.githubusercontent.com/590593989cdcebedc5002daed98a47802befb0164c9bb98cbfd124e18ccf2ed6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6234383835623835312d7265666163746f722d79656c6c6f77" alt="refactor - b4885b851" data-canonical-src="https://img.shields.io/badge/b4885b851-refactor-yellow" style="max-width: 100%;"></a></td>
<td>remove experimental Jest and Web Test Runner builders</td>
</tr>
</tbody>
</table>
<h3>@angular-devkit/build-angular</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/b7940dbcb40291be4de5b31e8a8001165459a7d4"><img src="https://camo.githubusercontent.com/984ec5e49e23f062b8c2ba61c1844d5960be46a8e55f19609bf6b864c4e14a31/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6237393430646263622d7265666163746f722d79656c6c6f77" alt="refactor - b7940dbcb" data-canonical-src="https://img.shields.io/badge/b7940dbcb-refactor-yellow" style="max-width: 100%;"></a></td>
<td>deprecate Webpack builders</td>
</tr>
</tbody>
</table>
<h3>@angular-devkit/build-webpack</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/3d5daa45e3ade025c1bc0df35d2766563ccf7c03"><img src="https://camo.githubusercontent.com/f81db95ac3486dfdcc788057a170833d76d66a334f02494866f1c59267feff7a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3364356461613435652d7265666163746f722d79656c6c6f77" alt="refactor - 3d5daa45e" data-canonical-src="https://img.shields.io/badge/3d5daa45e-refactor-yellow" style="max-width: 100%;"></a></td>
<td>deprecate webpack and webpack-dev-server builders</td>
</tr>
</tbody>
</table>
<h3>@angular/build</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/e9aa7967ba391e429ec1c04473efb4a2d38a62bf"><img src="https://camo.githubusercontent.com/2815e862365d881441126614b9159dd9f19fb33318b554fb7d352fbd2eb65bba/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6539616137393637622d666561742d626c7565" alt="feat - e9aa7967b" data-canonical-src="https://img.shields.io/badge/e9aa7967b-feat-blue" style="max-width: 100%;"></a></td>
<td>add isolate option to unit-test builder</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/fe720cab64bbc8bcc2db583188e32ad938e63a23"><img src="https://camo.githubusercontent.com/5a6f7de8292add812771adb60e7d9a18d526f50532a95f92212d75ed23e72ee3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6665373230636162362d666561742d626c7565" alt="feat - fe720cab6" data-canonical-src="https://img.shields.io/badge/fe720cab6-feat-blue" style="max-width: 100%;"></a></td>
<td>add process.env.PORT support to the dev server</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/0781f74986e773d143b9bdf5d3f0747de0df6b0a"><img src="https://camo.githubusercontent.com/2b9b9ba8071ead39bdf9da1ee33c65dcbee3cc59a0e1760ba34359deb7db0867/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3037383166373439382d666561742d626c7565" alt="feat - 0781f7498" data-canonical-src="https://img.shields.io/badge/0781f7498-feat-blue" style="max-width: 100%;"></a></td>
<td>add quiet option to suppress build noise in unit tests</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/cd2ad3c1958d9adadc214045b5e59c0c8f8b4499"><img src="https://camo.githubusercontent.com/2c86a0ed8a87378c42317d79c4e49662702cf1f4ef358e6a796119a01e3ed99e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6364326164336331392d666561742d626c7565" alt="feat - cd2ad3c19" data-canonical-src="https://img.shields.io/badge/cd2ad3c19-feat-blue" style="max-width: 100%;"></a></td>
<td>enable chunk optimization by default with heuristics</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/3007f46b7e077227b17d8bb1090edd2f8ff19ae3"><img src="https://camo.githubusercontent.com/13a6a93325017195feb2a19e3ba22158aaa62c63b53525bdb3855b8886215a51/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3330303766343662372d666561742d626c7565" alt="feat - 3007f46b7" data-canonical-src="https://img.shields.io/badge/3007f46b7-feat-blue" style="max-width: 100%;"></a></td>
<td>move istanbul-lib-instrument to optional peer dependency</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/af2c7e9444fba81d3b1fd2d37dc4412f8305b5ed"><img src="https://camo.githubusercontent.com/2844feecb4118b9d5d6e05ff9d2db6d1b6bb0d167cdfb176774f3cd9e3b3cdf7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6166326337653934342d666561742d626c7565" alt="feat - af2c7e944" data-canonical-src="https://img.shields.io/badge/af2c7e944-feat-blue" style="max-width: 100%;"></a></td>
<td>rename <code>experimentalPlatform</code> to <code>platform</code> in application builder</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/58c7c7a9d80fc6af5cf8b82a6d87f1d3cf3808c6"><img src="https://camo.githubusercontent.com/1115a0503fa7d9996e78e17b77e0fddb7371b452ec1a79eae97748eec0399929/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3538633763376139642d666561742d626c7565" alt="feat - 58c7c7a9d" data-canonical-src="https://img.shields.io/badge/58c7c7a9d-feat-blue" style="max-width: 100%;"></a></td>
<td>subresource integrity validation for dynamically loaded modules</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/73233dc5f41b570f5ac095b255a46de6cbfb54b7"><img src="https://camo.githubusercontent.com/b0141d1a37fe3dc25536f30bcf3e88a6b1f1718ba5822a4bbc83c7cb321c5ed1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3733323333646335662d666561742d626c7565" alt="feat - 73233dc5f" data-canonical-src="https://img.shields.io/badge/73233dc5f-feat-blue" style="max-width: 100%;"></a></td>
<td>support Istanbul coverage in Vitest runner</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/414320d02a090b7b36720051569cba7563bf9ac6"><img src="https://camo.githubusercontent.com/1ac5523f7c7b53686a8ff3a5b537c0be1375b0917476afb6186c29fbab5332d2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3431343332306430322d666561742d626c7565" alt="feat - 414320d02" data-canonical-src="https://img.shields.io/badge/414320d02-feat-blue" style="max-width: 100%;"></a></td>
<td>support runtime Zone.js detection in Vitest unit test runner</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/b85ec6798b5c74f778a69a657729e446a2156261"><img src="https://camo.githubusercontent.com/788f6b4dd333129d1e3c242d1598d7cb82c9b30fb883b07df51e79790fd08717/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6238356563363739382d6669782d677265656e" alt="fix - b85ec6798" data-canonical-src="https://img.shields.io/badge/b85ec6798-fix-green" style="max-width: 100%;"></a></td>
<td>allow configuring Access-Control-Allow-Origin via headers option</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/edfa782d52fd971aebead8b96b6ca470a3f5123e"><img src="https://camo.githubusercontent.com/777d0de41c4221c8f5e737b06b28e860afe331e4eb5622dca7c392aebf05976c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6564666137383264352d6669782d677265656e" alt="fix - edfa782d5" data-canonical-src="https://img.shields.io/badge/edfa782d5-fix-green" style="max-width: 100%;"></a></td>
<td>use dynamic TestComponentRenderer for Vitest</td>
</tr>
</tbody>
</table>
<h3>@angular/ssr</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/5adc92541433be23fc2246db5a199cf5c0dc9e67"><img src="https://camo.githubusercontent.com/748f9346110c105d6526489837ea1d36a2215c3634d789a984f03bad9d0af9a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3561646339323534312d6669782d677265656e" alt="fix - 5adc92541" data-canonical-src="https://img.shields.io/badge/5adc92541-fix-green" style="max-width: 100%;"></a></td>
<td>enforce explicit opt-in for proxy headers</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/f8534392552f4896ee9449939cdc705010331e3d"><img src="https://camo.githubusercontent.com/bf536373abe3b689e6834517e327174b9b6e89e1ab2519c25e9e41dd46a1d4a1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6638353334333932352d6669782d677265656e" alt="fix - f85343925" data-canonical-src="https://img.shields.io/badge/f85343925-fix-green" style="max-width: 100%;"></a></td>
<td>support all X-Forwarded-* headers when trustProxyHeaders is true</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/8471ba63433d87ba3e59af622ed9cfa89b732cd9"><img src="https://camo.githubusercontent.com/11e89b01f08b5679ee0031e9009bc7a65e25b12a00365bfb2cf1ea8d70cfd335/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3834373162613633342d6669782d677265656e" alt="fix - 8471ba634" data-canonical-src="https://img.shields.io/badge/8471ba634-fix-green" style="max-width: 100%;"></a></td>
<td>support server-side rendering configuration options</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/50b16a65b1be1f9c2ec11d578240a8884518d517"><img src="https://camo.githubusercontent.com/5834fdf6abc82fea74cbdaeb6a1c81a00cff38e4315bc18c78c70fcec32dc60a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3530623136613635622d7265666163746f722d79656c6c6f77" alt="refactor - 50b16a65b" data-canonical-src="https://img.shields.io/badge/50b16a65b-refactor-yellow" style="max-width: 100%;"></a></td>
<td>deprecate CommonEngine APIs</td>
</tr>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/27cd355619aad140dfc221c6bd161f4a981e0f3b"><img src="https://camo.githubusercontent.com/7a12b97946366035a06be8124e32fe48b0ecd2ff86fd6c5b4d931d0e7dca4833/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3237636433353536312d7265666163746f722d79656c6c6f77" alt="refactor - 27cd35561" data-canonical-src="https://img.shields.io/badge/27cd35561-refactor-yellow" style="max-width: 100%;"></a></td>
<td>remove CSR fallback for invalid hosts</td>
</tr>
</tbody>
</table>
<h3>@ngtools/webpack</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/547ca515b707c283489a3f088d86fc84807d830d"><img src="https://camo.githubusercontent.com/418e76917d7fdbd8b78a7f5411e25d672f26128f544489e8ebfe51d24857f698/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3534376361353135622d7265666163746f722d79656c6c6f77" alt="refactor - 547ca515b" data-canonical-src="https://img.shields.io/badge/547ca515b-refactor-yellow" style="max-width: 100%;"></a></td>
<td>deprecate @ngtools/webpack loader and plugin</td>
</tr>
</tbody>
</table>
<h2>Breaking Changes</h2>
<h3></h3>
<ul>
<li>Node.js v20 is no longer supported. The minimum supported Node.js versions are now v22.22.0 and v24.13.1.</li>
<li>The <code>@angular-devkit/architect-cli</code> package is no longer available. The <code>architect</code> CLI tool has been moved to the <code>@angular-devkit/architect</code> package.</li>
<li>The experimental <code>@angular-devkit/build-angular:jest</code> and <code>@angular-devkit/build-angular:web-test-runner</code> builders have been removed.</li>
</ul>
<h3>@angular/build</h3>
<ul>
<li>The <code>@angular/build:dev-server (ng serve)</code> now assigns the highest priority to the <code>PORT</code> environment variable. This value will override any port configurations specified in <code>angular.json</code> or via the <code>--port</code> command-line flag. This includes the default port 4200.</li>
<li><code>istanbul-lib-instrument</code> is now an optional peer dependency.<br>
Projects using karma with code coverage enabled will need to ensure that istanbul-lib-instrument is installed. Note: <code>ng update</code> will automatically add this dependency during the update process.</li>
</ul>
<h3>@angular/ssr</h3>
<ul>
<li>The server no longer falls back to Client-Side Rendering (CSR) when a request fails host validation. Requests with unrecognized 'Host' headers will now return a 400 Bad Request status code. Users must ensure all valid hosts are correctly configured in the 'allowedHosts' option.</li>
</ul>
<h2>Deprecations</h2>
<h3>@angular-devkit/build-angular</h3>
<ul>
<li>Webpack builders in build-angular are deprecated. Use @angular/build builders instead.</li>
</ul>
<h3>@angular-devkit/build-webpack</h3>
<ul>
<li>Webpack builders in build-webpack are deprecated. Use @angular/build builders instead.</li>
</ul>
<h3>@angular/ssr</h3>
<ul>
<li>CommonEngine APIs are deprecated in favor of AngularNodeAppEngine or AngularAppEngine.</li>
</ul>
<h3>@ngtools/webpack</h3>
<ul>
<li>@ngtools/webpack loader and plugin are deprecated. Use @angular/build instead.</li>
</ul>
alan-agius4
tag:github.com,2008:Repository/36891867/v21.2.14
2026-06-03T12:32:38Z
21.2.14
<h3>@angular/cli</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/aed448748451b6b87c20e7bd9b3b1f822067f681"><img src="https://camo.githubusercontent.com/665723eb4d56051d613c1160dff1cad8a500bc08c208fede571f7e7c3721c2d1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6165643434383734382d6669782d677265656e" alt="fix - aed448748" data-canonical-src="https://img.shields.io/badge/aed448748-fix-green" style="max-width: 100%;"></a></td>
<td>expand package groups for newly added peer dependencies in update schematic</td>
</tr>
</tbody>
</table>
<h3>@angular/build</h3>
<table>
<thead>
<tr>
<th>Commit</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/angular/angular-cli/commit/d46c082fb994138327eb36882373f63daeec8bc1"><img src="https://camo.githubusercontent.com/805a33cd9c9a1bb2580a6ea4e1c3ce15ff0d5b62ce0d71c3268ce7fa58790986/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6434366330383266622d6669782d677265656e" alt="fix - d46c082fb" data-canonical-src="https://img.shields.io/badge/d46c082fb-fix-green" style="max-width: 100%;"></a></td>
<td>prevent esbuild service child process leakage</td>
</tr>
</tbody>
</table>
alan-agius4