tag:github.com,2008:https://github.com/angular/angular-cli/releases Release notes from angular-cli 2026-03-11T13:08:45Z tag:github.com,2008:Repository/36891867/v22.0.0-next.1 2026-03-11T13:08:48Z 22.0.0-next.1 <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/598a690a0baea5cd54af5cea38e673c33605a627"><img src="https://camo.githubusercontent.com/cf03608ef90a6e6ce137a4240fa956cf8667c8baab456483d4084152756133a5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3539386136393061302d6669782d677265656e" alt="fix - 598a690a0" data-canonical-src="https://img.shields.io/badge/598a690a0-fix-green" style="max-width: 100%;"></a></td> <td>conditionally quote package names when adding dependencies based on host requirements</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/b5fb457e157fa78b61565eaba6b88e9f80b3b288"><img src="https://camo.githubusercontent.com/ca3fb4727109d66ca3de58026fe7b8a52a245bd8fb957dec80229c94c5c70382/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6235666234353765312d6669782d677265656e" alt="fix - b5fb457e1" data-canonical-src="https://img.shields.io/badge/b5fb457e1-fix-green" style="max-width: 100%;"></a></td> <td>preserve exact version in ng add when requested</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/ad0fd5f41fc6ee5d920fb3c725f09f17d86d2ab4"><img src="https://camo.githubusercontent.com/e1edfabc4dff1b79615582f15a9a0df649f05b5b4dc306798d119054863cd53b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6164306664356634312d706572662d6f72616e6765" alt="perf - ad0fd5f41" data-canonical-src="https://img.shields.io/badge/ad0fd5f41-perf-orange" style="max-width: 100%;"></a></td> <td>avoid redundant package version resolution in ng add</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>@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/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> </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/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/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/6324133c282f5e04ee6e9e46fc5f387cbbefad8e"><img src="https://camo.githubusercontent.com/2f28329d1cdb64e8e894b85cc6ffb29f4f836b2239b36aa83a343741ec9579b8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3633323431333363322d6669782d677265656e" alt="fix - 6324133c2" data-canonical-src="https://img.shields.io/badge/6324133c2-fix-green" style="max-width: 100%;"></a></td> <td>normalize line endings for CSP hash generation</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/839c725c234b2c1c3e44d52e3a1442ad1b538be9"><img src="https://camo.githubusercontent.com/904edd024e6f67fb1303e3d1d1084533e4a074903a86c0a8744abd4664cc334d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3833396337323563322d6669782d677265656e" alt="fix - 839c725c2" data-canonical-src="https://img.shields.io/badge/839c725c2-fix-green" style="max-width: 100%;"></a></td> <td>pass process environment variables to prerender workers</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/f30f8900efb8ad9a835630f57e3667346926dc4d"><img src="https://camo.githubusercontent.com/e498248fea4b9bc80b2341cf7203c1e2c1c5169d7ddcc4a9c6733cee48007b56/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6633306638393030652d6669782d677265656e" alt="fix - f30f8900e" data-canonical-src="https://img.shields.io/badge/f30f8900e-fix-green" style="max-width: 100%;"></a></td> <td>resolve assets correctly during i18n prerendering</td> </tr> </tbody> </table> <h2>Breaking Changes</h2> <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> </ul> alan-agius4 tag:github.com,2008:Repository/36891867/v21.2.2 2026-03-11T13:03:54Z 21.2.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/8447d913280a8fa09a842d11193ce77527d0f7a6"><img src="https://camo.githubusercontent.com/173bfa40309faccb231cf0043e3854b3a4d04ed28f70fd4694a51213e9fddd89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3834343764393133322d6669782d677265656e" alt="fix - 8447d9132" data-canonical-src="https://img.shields.io/badge/8447d9132-fix-green" style="max-width: 100%;"></a></td> <td>conditionally quote package names when adding dependencies based on host requirements</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/d2f209823a524a6effde4910017547675c7a6166"><img src="https://camo.githubusercontent.com/5ea22aa277d875abb244bc1b8a0ff8f31c7a07d53579ab0d62aed771f4e8bb95/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6432663230393832332d6669782d677265656e" alt="fix - d2f209823" data-canonical-src="https://img.shields.io/badge/d2f209823-fix-green" style="max-width: 100%;"></a></td> <td>preserve exact version in ng add when requested</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/28f4d684ae12f0e0860bf0ace8851fdddad1c068"><img src="https://camo.githubusercontent.com/7b3445e844ee84148f19339b989b3a92cca0f5e96cf866770c736d7a7c0e86a7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3238663464363834612d706572662d6f72616e6765" alt="perf - 28f4d684a" data-canonical-src="https://img.shields.io/badge/28f4d684a-perf-orange" style="max-width: 100%;"></a></td> <td>avoid redundant package version resolution in ng add</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/06010294f8fe7a4843f802aafba51703ce810f61"><img src="https://camo.githubusercontent.com/d7c5fc91367b6f7867a966eb7e6160b9a6060f120f8535849d763c35169e49ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3036303130323934662d6669782d677265656e" alt="fix - 06010294f" data-canonical-src="https://img.shields.io/badge/06010294f-fix-green" style="max-width: 100%;"></a></td> <td>allow any <code>CHROME_BIN</code> for vitest playwright provider</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/8dec0c62ba40af339f4fd0fa34f20cbed545cd71"><img src="https://camo.githubusercontent.com/eb74234b5c72d5221762b1abb3d79b6b46a6b90c7cba037c63905b0d645d751e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3864656330633632622d6669782d677265656e" alt="fix - 8dec0c62b" data-canonical-src="https://img.shields.io/badge/8dec0c62b-fix-green" style="max-width: 100%;"></a></td> <td>normalize line endings for CSP hash generation</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/58688ebd727fe295adcb538a33b525867caf82bd"><img src="https://camo.githubusercontent.com/10e4ef6c4799b825a167838b5098ff1b3d9919b14dc3f179b593c6d19bc4f6fc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3538363838656264372d6669782d677265656e" alt="fix - 58688ebd7" data-canonical-src="https://img.shields.io/badge/58688ebd7-fix-green" style="max-width: 100%;"></a></td> <td>pass process environment variables to prerender workers</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/4ca61647f208ec0ab9bc06f64583696b0619c259"><img src="https://camo.githubusercontent.com/784edc7f2543bb5bc60aeeb485ed97907955ab0148b2af741cac813dbd8c088d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3463613631363437662d6669782d677265656e" alt="fix - 4ca61647f" data-canonical-src="https://img.shields.io/badge/4ca61647f-fix-green" style="max-width: 100%;"></a></td> <td>resolve assets correctly during i18n prerendering</td> </tr> </tbody> </table> alan-agius4 tag:github.com,2008:Repository/36891867/v20.3.20 2026-03-11T12:57:50Z 20.3.20 <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/0fd6823af0adec23f7c3f1d531f45f6432afe555"><img src="https://camo.githubusercontent.com/b4600be65e7819db6fdc4b62cb242c8e9d6554b5839905871b758e6522d5ab4b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3066643638323361662d6669782d677265656e" alt="fix - 0fd6823af" data-canonical-src="https://img.shields.io/badge/0fd6823af-fix-green" style="max-width: 100%;"></a></td> <td>pass process environment variables to prerender workers</td> </tr> </tbody> </table> alan-agius4 tag:github.com,2008:Repository/36891867/v22.0.0-next.0 2026-03-05T19:29:37Z 22.0.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/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> </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/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/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/f190263a4010a4f7b9ae85806b5d70a16b57b9fa"><img src="https://camo.githubusercontent.com/07be276b40a8fc4c33b790575b4a65d8da8674069ca9cf4adcdd95789dfb2c4a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6631393032363361342d6669782d677265656e" alt="fix - f190263a4" data-canonical-src="https://img.shields.io/badge/f190263a4-fix-green" style="max-width: 100%;"></a></td> <td>allow any <code>CHROME_BIN</code> for vitest playwright provider</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/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> <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/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> alan-agius4 tag:github.com,2008:Repository/36891867/v21.2.1 2026-03-05T11:16:03Z 21.2.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/72d466aa04d4d0cc4d654410bcb6dd44f0de3357"><img src="https://camo.githubusercontent.com/cfe62f1664fa609890963f39a293efca3eb6e56c283d559b8d64657e448c2f73/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3732643436366161302d6669782d677265656e" alt="fix - 72d466aa0" data-canonical-src="https://img.shields.io/badge/72d466aa0-fix-green" style="max-width: 100%;"></a></td> <td>prevent adding test dependencies when minimal option is enabled</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/ae4c28d0083d948489f4ba38c571b7f955400226"><img src="https://camo.githubusercontent.com/92e4c22a42b16afc7de25e7962b15d2502b4d09dbeaa055dc0dc7a49bcced1ec/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6165346332386430302d6669782d677265656e" alt="fix - ae4c28d00" data-canonical-src="https://img.shields.io/badge/ae4c28d00-fix-green" style="max-width: 100%;"></a></td> <td>correct dev dependency detection logic in <code>ng add</code></td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/465073bc1b2b0e9fa594698651a9e0afe747a74a"><img src="https://camo.githubusercontent.com/f60be7370043a1313eb30bd1d6d547a066733fcbe4e373f8ea8e355d58bb3654/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3436353037336263312d6669782d677265656e" alt="fix - 465073bc1" data-canonical-src="https://img.shields.io/badge/465073bc1-fix-green" style="max-width: 100%;"></a></td> <td>disable npm update notifier in package manager host</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/36270634f6ff5ab15896a8c2b345659511a8a276"><img src="https://camo.githubusercontent.com/0cb4eba25ae068561e791a69efbcbc62516077dabb462f00180fcd1878b33ca9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3336323730363334662d6669782d677265656e" alt="fix - 36270634f" data-canonical-src="https://img.shields.io/badge/36270634f-fix-green" style="max-width: 100%;"></a></td> <td>ensure group members are updated to targeted version</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/d87dba6af1116de0838d8683cd69fd31ed9811fd"><img src="https://camo.githubusercontent.com/253823106938b951b1fb7efaa635b65930eb796c87b90369430ce74054b7c4c7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6438376462613661662d6669782d677265656e" alt="fix - d87dba6af" data-canonical-src="https://img.shields.io/badge/d87dba6af-fix-green" style="max-width: 100%;"></a></td> <td>ignore unknown files when formatting schematic changes</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/0019d1c8e1494295a754063dbf936e1cd40d05bd"><img src="https://camo.githubusercontent.com/67859f62be3855538b0fad377fc7e6e4199ad85f062c0855638e3e3c3db667c8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3030313964316338652d6669782d677265656e" alt="fix - 0019d1c8e" data-canonical-src="https://img.shields.io/badge/0019d1c8e-fix-green" style="max-width: 100%;"></a></td> <td>update copy-webpack-plugin to v14.0.0</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/6ad8608636ad48ae140cc7299a32e0358c761fcc"><img src="https://camo.githubusercontent.com/1d84da307d955c9e020d69b57d020477fa17a254a05405ef8786012aa22154f0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3661643836303836332d6669782d677265656e" alt="fix - 6ad860863" data-canonical-src="https://img.shields.io/badge/6ad860863-fix-green" style="max-width: 100%;"></a></td> <td>bundle polyfills to preserve execution order in dev server</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/d1739737564fbcc3e4c5a6c3369046cccf0f6120"><img src="https://camo.githubusercontent.com/87036c9d0b16ad46ca2f3dde53f3d072eb2fcaeeeed5776c2b9c7c187260f944/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6431373339373337352d6669782d677265656e" alt="fix - d17397375" data-canonical-src="https://img.shields.io/badge/d17397375-fix-green" style="max-width: 100%;"></a></td> <td>conditionally allow <code>vi.mock</code> for non-relative imports</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/0d49f86edf5592f0266c6d6689ab4d55b27b2d8d"><img src="https://camo.githubusercontent.com/ddf60e7b145d2bd53583e46f2bfefda52f6112fa1146d6c0ba878fe4d061ab64/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3064343966383665642d6669782d677265656e" alt="fix - 0d49f86ed" data-canonical-src="https://img.shields.io/badge/0d49f86ed-fix-green" style="max-width: 100%;"></a></td> <td>resolve style include paths relative to <code>ng-package.json</code> in unit-test builder</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/584f6a2d95ac4bdd9f20d918c6700ea79227cc92"><img src="https://camo.githubusercontent.com/d6b58fb7c885cbf459952a1d52fd1ce139dd0f6d0b0c97cae1a20890f489d6b0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3538346636613264392d6669782d677265656e" alt="fix - 584f6a2d9" data-canonical-src="https://img.shields.io/badge/584f6a2d9-fix-green" style="max-width: 100%;"></a></td> <td>treat empty browsers array as undefined in unit-test builder</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/6699cdc9bfbabc3de2ff0cf03acfd6989dc5596c"><img src="https://camo.githubusercontent.com/df34fd09fbf0a5bb4e807747501a95e3814b891ae1d9b87eaf2b1af7f1cbd6cb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3636393963646339622d706572662d6f72616e6765" alt="perf - 6699cdc9b" data-canonical-src="https://img.shields.io/badge/6699cdc9b-perf-orange" style="max-width: 100%;"></a></td> <td>fix memory leak in <code>ng serve</code> with i18n</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/43a9dfa663c386217c9a654f0e80af74823fcf6a"><img src="https://camo.githubusercontent.com/2e7da2e852bd67d6f9fae817337f6401be6e9354219f202d8514952ea647681d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3433613964666136362d6669782d677265656e" alt="fix - 43a9dfa66" data-canonical-src="https://img.shields.io/badge/43a9dfa66-fix-green" style="max-width: 100%;"></a></td> <td>improve header validation logic</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/dee3717b3faae9ea75d0a5e53c925f915949b8d0"><img src="https://camo.githubusercontent.com/31e9c7fa21ab5eec0c4dd69ef6166ceadee5f4896ceb94351b4afbbd7996a452/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6465653337313762332d6669782d677265656e" alt="fix - dee3717b3" data-canonical-src="https://img.shields.io/badge/dee3717b3-fix-green" style="max-width: 100%;"></a></td> <td>introduce DI token to signal route discovery process</td> </tr> </tbody> </table> alan-agius4 tag:github.com,2008:Repository/36891867/v20.3.19 2026-03-04T18:52:14Z 20.3.19 <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/0299b4d1aca13f11a06e2e92c593fe3e20906d23"><img src="https://camo.githubusercontent.com/5a632995469ba62e9ce58456b5b0d8416794ed41bdb18ce0697af642606300b9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3032393962346431612d6669782d677265656e" alt="fix - 0299b4d1a" data-canonical-src="https://img.shields.io/badge/0299b4d1a-fix-green" style="max-width: 100%;"></a></td> <td>update copy-webpack-plugin to v14.0.0</td> </tr> </tbody> </table> clydin tag:github.com,2008:Repository/36891867/v20.3.18 2026-02-26T21:13:09Z 20.3.18 <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/39596d529f831f72a2134bc3c9ac163867ff5702"><img src="https://camo.githubusercontent.com/62a4b638fe3709cfb73afcf8b978c88e2fcd1d6e6261a91f157f967459915afb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3339353936643532392d6669782d677265656e" alt="fix - 39596d529" data-canonical-src="https://img.shields.io/badge/39596d529-fix-green" style="max-width: 100%;"></a></td> <td>update <code>ajv</code> to <code>8.18.0</code></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/f668e2778c4c4dbecc8a1c6831c092f5512d1ec1"><img src="https://camo.githubusercontent.com/2369b01214e67ca9524d748c8dde29e5655d8b9fd1de3f7f2311fabed1d27063/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6636363865323737382d6669782d677265656e" alt="fix - f668e2778" data-canonical-src="https://img.shields.io/badge/f668e2778-fix-green" style="max-width: 100%;"></a></td> <td>update rollup to 4.59.0</td> </tr> </tbody> </table> dgp1130 tag:github.com,2008:Repository/36891867/v19.2.22 2026-02-26T19:46:11Z 19.2.22 <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/0a01aecd92a5dfa1a254429481906a88be725c5e"><img src="https://camo.githubusercontent.com/03f94631b8a39aab4f2dd70cc19b8e354a019492a61030b4f1fdb33646fda413/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3061303161656364392d6669782d677265656e" alt="fix - 0a01aecd9" data-canonical-src="https://img.shields.io/badge/0a01aecd9-fix-green" style="max-width: 100%;"></a></td> <td>update <code>ajv</code> to <code>8.18.0</code></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/79f59412a17eeabd2ad5df1d614ed634354d1eee"><img src="https://camo.githubusercontent.com/4ab1a08822ba2b8037930e658b6f1d031b014ee2991f969502406cf0dc91b398/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3739663539343132612d6669782d677265656e" alt="fix - 79f59412a" data-canonical-src="https://img.shields.io/badge/79f59412a-fix-green" style="max-width: 100%;"></a></td> <td>update rollup to 4.59.0</td> </tr> </tbody> </table> dgp1130 tag:github.com,2008:Repository/36891867/v21.2.0 2026-02-25T22:05:44Z 21.2.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/aa7381efd213eff70a8004731a7e2b06a60cb8c2"><img src="https://camo.githubusercontent.com/da6ac6b5560b73a43916ae3184bd70f120f4e68c51fec3cf2110393aa9b6c6e0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6161373338316566642d666561742d626c7565" alt="feat - aa7381efd" data-canonical-src="https://img.shields.io/badge/aa7381efd-feat-blue" style="max-width: 100%;"></a></td> <td>add a '.prettierrc' file to generated workspaces and add Prettier as dev dependency</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/f80db6fb714aa326f6ed03a8a51090ca59ad0955"><img src="https://camo.githubusercontent.com/a8bfd2a83ff14c580746fb8d0966c1a797d1293cc4283be49bb3c64c4157b61e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6638306462366662372d666561742d626c7565" alt="feat - f80db6fb7" data-canonical-src="https://img.shields.io/badge/f80db6fb7-feat-blue" style="max-width: 100%;"></a></td> <td>add ng-add support for Vitest browser providers</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/5d1df50d8b84b453570ae5fd9ab6f949bbc11649"><img src="https://camo.githubusercontent.com/f6bcab4f4b501c9da30fb0a8f18470ae118905745b1c6b3bfe2f74fad15551c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3564316466353064382d6669782d677265656e" alt="fix - 5d1df50d8" data-canonical-src="https://img.shields.io/badge/5d1df50d8-fix-green" style="max-width: 100%;"></a></td> <td>add actionable feedback to vitest-browser schematic</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/0dd04f289e555a4a8af7bdadabe300da74701e3b"><img src="https://camo.githubusercontent.com/4a676a46d746fd74dd75c3421538a4b6d88ce55f3353c8c3984cd638a7f72073/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3064643034663238392d666561742d626c7565" alt="feat - 0dd04f289" data-canonical-src="https://img.shields.io/badge/0dd04f289-feat-blue" style="max-width: 100%;"></a></td> <td>add markdown files to Prettier's formatting list</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/fbae1b6ab384186ae69e804c54815cea80e6a600"><img src="https://camo.githubusercontent.com/ce6a23c97890056b4516b61dc57a8f3ada14b3c5c20c444967f165a1fa8f1187/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6662616531623661622d666561742d626c7565" alt="feat - fbae1b6ab" data-canonical-src="https://img.shields.io/badge/fbae1b6ab-feat-blue" style="max-width: 100%;"></a></td> <td>automatic formatting files modified by schematics</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/91b9d281fc88a242aa6e5dd5495e275990d926ef"><img src="https://camo.githubusercontent.com/6a96708c0948905e964dfc505ca4e696f17c86c31f3ee2dc463259b3a5eeec27/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3931623964323831662d666561742d626c7565" alt="feat - 91b9d281f" data-canonical-src="https://img.shields.io/badge/91b9d281f-feat-blue" style="max-width: 100%;"></a></td> <td>integrate file formatting into update migrations</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/98a24d0401f36f484dc9c4d8b0f5284ffa524f19"><img src="https://camo.githubusercontent.com/4eade639a7fda8114df3c860fb5ae037e96085ba93004d4ba210fcb2dbc51651/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3938613234643034302d666561742d626c7565" alt="feat - 98a24d040" data-canonical-src="https://img.shields.io/badge/98a24d040-feat-blue" style="max-width: 100%;"></a></td> <td>standardize MCP tools around workspace/project options</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/d9cd609c5d13fe492b1f31973d9be518f8529387"><img src="https://camo.githubusercontent.com/9267a65c4be61b0fb75c3215c7978a5ca3f62d4443b1fde8527324d10e746313/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6439636436303963352d6669782d677265656e" alt="fix - d9cd609c5" data-canonical-src="https://img.shields.io/badge/d9cd609c5-fix-green" style="max-width: 100%;"></a></td> <td>correctly parse scoped packages in yarn classic list output</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/5b05f25005621828565585692b1d7a67c5f0fec8"><img src="https://camo.githubusercontent.com/f90e1f07c02cf69fdda2a25c9ca3838091174552ce8808b962b86431d3927382/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3562303566323530302d6669782d677265656e" alt="fix - 5b05f2500" data-canonical-src="https://img.shields.io/badge/5b05f2500-fix-green" style="max-width: 100%;"></a></td> <td>enable shell option for Prettier execution on Windows platforms</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/25b8a157df70fb0d2c4e6c5438a50ec12e3abc0c"><img src="https://camo.githubusercontent.com/7a04e0e3fd855f957b6ca2b54103e0a62894e612955f15519006bcf333ad65c1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3235623861313537642d6669782d677265656e" alt="fix - 25b8a157d" data-canonical-src="https://img.shields.io/badge/25b8a157d-fix-green" style="max-width: 100%;"></a></td> <td>quote complex range specifiers in package manager</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/6f29a8c35abb8928d4e7ea01958192dd2a83491d"><img src="https://camo.githubusercontent.com/b133a01df0a0d55055108ff8f219f66b2f6bf172b209e6746426605ac984f881/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3666323961386333352d6669782d677265656e" alt="fix - 6f29a8c35" data-canonical-src="https://img.shields.io/badge/6f29a8c35-fix-green" style="max-width: 100%;"></a></td> <td>renamed files by their new path in the schematic workflow</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/201a036f204a6940f70a36a507a4a53d144b5768"><img src="https://camo.githubusercontent.com/5270446f57afb75802b7892ba92bfa537dc7083e5c25bd95f6a69ca5263aa2e1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3230316130333666322d6669782d677265656e" alt="fix - 201a036f2" data-canonical-src="https://img.shields.io/badge/201a036f2-fix-green" style="max-width: 100%;"></a></td> <td>simplify Angular version compatibility checks and add special handling for local builds of new major versions</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/cdd26bb66d8ab334f76323c2b5cae1aa8ce815f6"><img src="https://camo.githubusercontent.com/7cda54760bfc2882686c879030b149fcb65538535ab9aaf907b5a12e507c100f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6364643236626236362d6669782d677265656e" alt="fix - cdd26bb66" data-canonical-src="https://img.shields.io/badge/cdd26bb66-fix-green" style="max-width: 100%;"></a></td> <td>validate package manager version using <code>semver.valid</code> and throw an error if invalid</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/bc363af8bc40f117a4e35ec9eb7eedf69f5b5b37"><img src="https://camo.githubusercontent.com/e8ebca8bfce670d3e06b38b3af24286ad219f8c8a6d4b5fb8b1832e08d560c77/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6263333633616638622d706572662d6f72616e6765" alt="perf - bc363af8b" data-canonical-src="https://img.shields.io/badge/bc363af8b-perf-orange" style="max-width: 100%;"></a></td> <td>optimize package manager discovery with stat-based probing</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/ece30f2359c2dc794b0c9272447f623a121e88b0"><img src="https://camo.githubusercontent.com/db5a4b75bb97608dc497de24aa7b1039628c70c8de6f4f3588083c5f03c4c156/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6563653330663233352d666561742d626c7565" alt="feat - ece30f235" data-canonical-src="https://img.shields.io/badge/ece30f235-feat-blue" style="max-width: 100%;"></a></td> <td>add headless option to unit-test builder</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/cad7a7c0ff3778f04820a99ad0aa9d74f1067fd5"><img src="https://camo.githubusercontent.com/0e39a62eb43140d3a9bfe06fa259c73696ae1018c0c519103211472787338c5a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6361643761376330662d666561742d626c7565" alt="feat - cad7a7c0f" data-canonical-src="https://img.shields.io/badge/cad7a7c0f-feat-blue" style="max-width: 100%;"></a></td> <td>run vitest browser with playwright with OS theme</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/0b4982720e111bf5029bcf97f7e0ce2658c42d43"><img src="https://camo.githubusercontent.com/7cdea5fe7395c9bda73c10870f41f9692612bc0317af377e950068e0f9d99baa/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3062343938323732302d6669782d677265656e" alt="fix - 0b4982720" data-canonical-src="https://img.shields.io/badge/0b4982720-fix-green" style="max-width: 100%;"></a></td> <td>adjust sourcemap sources when Vitest wrapper is bypassed</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/1f114a9e8b9bddd53e01016a2d7cb211a04eee48"><img src="https://camo.githubusercontent.com/70b558f8cf2d23bf45f495c8336e8ddd3846c6a3bf4809637d5e6385ccefcdd6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3166313134613965382d6669782d677265656e" alt="fix - 1f114a9e8" data-canonical-src="https://img.shields.io/badge/1f114a9e8-fix-green" style="max-width: 100%;"></a></td> <td>bundle setup files in unit-test builder for Vitest</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/fd5cb28c8082417288a896b89bde659bb0dc92e2"><img src="https://camo.githubusercontent.com/e7f1d9ff72257eb7d00b1b49e93df6cf40a509c117d0be824a1d1165e9b3115d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6664356362323863382d6669782d677265656e" alt="fix - fd5cb28c8" data-canonical-src="https://img.shields.io/badge/fd5cb28c8-fix-green" style="max-width: 100%;"></a></td> <td>explicitly fail when using Vitest runtime mocking</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/dc899e8a530979de8e9579f2281b681e6f737a62"><img src="https://camo.githubusercontent.com/c9501678f4bd8efb69401770072af50407f0ce7b846e773fdfba5259c317e134/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6463383939653861352d6669782d677265656e" alt="fix - dc899e8a5" data-canonical-src="https://img.shields.io/badge/dc899e8a5-fix-green" style="max-width: 100%;"></a></td> <td>normalize <code>allowedHosts</code> in dev-server</td> </tr> <tr> <td><a href="https://github.com/angular/angular-cli/commit/26bbea12f872c18e59de05d3c51cc11dd0a09cda"><img src="https://camo.githubusercontent.com/205549478bef47b16db7f65a5fed9b03f1460850d647733600ab9a330c202760/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3236626265613132662d6669782d677265656e" alt="fix - 26bbea12f" data-canonical-src="https://img.shields.io/badge/26bbea12f-fix-green" style="max-width: 100%;"></a></td> <td>serve extensionless assets without transformation</td> </tr> </tbody> </table> dgp1130 tag:github.com,2008:Repository/36891867/v21.2.0-rc.2 2026-02-24T10:43:38Z 21.2.0-rc.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/201a036f204a6940f70a36a507a4a53d144b5768"><img src="https://camo.githubusercontent.com/5270446f57afb75802b7892ba92bfa537dc7083e5c25bd95f6a69ca5263aa2e1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f3230316130333666322d6669782d677265656e" alt="fix - 201a036f2" data-canonical-src="https://img.shields.io/badge/201a036f2-fix-green" style="max-width: 100%;"></a></td> <td>simplify Angular version compatibility checks and add special handling for local builds of new major versions</td> </tr> </tbody> </table> alan-agius4