tag:github.com,2008:https://github.com/angular/angular/releases Release notes from angular 2026-03-12T19:12:48Z tag:github.com,2008:Repository/24195339/v22.0.0-next.3 2026-03-12T19:12:52Z 22.0.0-next.3 <h3>compiler</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/78dea55351fb305b33a919c43a6b363137eca166"><img src="https://camo.githubusercontent.com/ce2e6b7d50f2dd6b12c5d46b2e057fe70183af645c9a99bca45fa68c280b05eb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f373864656135353335312d6669782d677265656e" alt="fix - 78dea55351" data-canonical-src="https://img.shields.io/badge/78dea55351-fix-green" style="max-width: 100%;"></a></td> <td>disallow translations of iframe src</td> </tr> </tbody> </table> <h3>core</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/999c14eaab981d12bf2b1d9b1fd6766157f7b1cc"><img src="https://camo.githubusercontent.com/ab47c941302e9aef9eb5ec2d69679ddbe61f7982bfe0bdffdf08c6affdaaa993/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f393939633134656161622d6669782d677265656e" alt="fix - 999c14eaab" data-canonical-src="https://img.shields.io/badge/999c14eaab-fix-green" style="max-width: 100%;"></a></td> <td>reverts "feat(core): add support for nested animations"</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/de0eb4c6566011e1a34d529a273ec3d5b6bf17d5"><img src="https://camo.githubusercontent.com/93c4ff818f42c17b79b02e9a6d246b74b2f1884aec16955d816bee4f86bc6fd5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646530656234633635362d6669782d677265656e" alt="fix - de0eb4c656" data-canonical-src="https://img.shields.io/badge/de0eb4c656-fix-green" style="max-width: 100%;"></a></td> <td>sanitize translated form attributes</td> </tr> </tbody> </table> mattrbeck tag:github.com,2008:Repository/24195339/v21.2.4 2026-03-12T18:58:05Z 21.2.4 <h3>compiler</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/ed2d324f9cc12aab6cfa0569ef10b73243a62c65"><img src="https://camo.githubusercontent.com/3efad9bf71806f5938528c14b06315499ad3d7307e4056ba9fef472d07e35e08/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f656432643332346639632d6669782d677265656e" alt="fix - ed2d324f9c" data-canonical-src="https://img.shields.io/badge/ed2d324f9c-fix-green" style="max-width: 100%;"></a></td> <td>disallow translations of iframe src</td> </tr> </tbody> </table> <h3>core</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/abbd8797bbd3ae53a10033c39bd895b5b85a4fae"><img src="https://camo.githubusercontent.com/3a9eaa63dad52990db02bade9b0ccd6287dff210d54f993e574b77d43f835f6c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f616262643837393762622d6669782d677265656e" alt="fix - abbd8797bb" data-canonical-src="https://img.shields.io/badge/abbd8797bb-fix-green" style="max-width: 100%;"></a></td> <td>reverts "feat(core): add support for nested animations"</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/d1dcd16c5b40291aa3fa2dc84d22842cd657b201"><img src="https://camo.githubusercontent.com/4577915af0bd5fcb114ebc4bcb2942f08b34afabd24b135c137e400a4df113ed/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f643164636431366335622d6669782d677265656e" alt="fix - d1dcd16c5b" data-canonical-src="https://img.shields.io/badge/d1dcd16c5b-fix-green" style="max-width: 100%;"></a></td> <td>sanitize translated form attributes</td> </tr> </tbody> </table> mattrbeck tag:github.com,2008:Repository/24195339/v20.3.18 2026-03-12T19:22:42Z 20.3.18 <h3>compiler</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/02fbf08890ec6ac2efb6c2ec4f17e56497cb81d2"><img src="https://camo.githubusercontent.com/c3593e160671e051c64dd5531c6c924246d493a809560d7006f8308696cec8d6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f303266626630383839302d6669782d677265656e" alt="fix - 02fbf08890" data-canonical-src="https://img.shields.io/badge/02fbf08890-fix-green" style="max-width: 100%;"></a></td> <td>disallow translations of iframe src</td> </tr> </tbody> </table> <h3>core</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/72126f9a08c185a9b93461bab67841c4e84c9b17"><img src="https://camo.githubusercontent.com/64431abed3beaa44732a0d0a904cfabe4b73e5bf374cf6faa734714608e07d88/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f373231323666396130382d6669782d677265656e" alt="fix - 72126f9a08" data-canonical-src="https://img.shields.io/badge/72126f9a08-fix-green" style="max-width: 100%;"></a></td> <td>sanitize translated attribute bindings with interpolations</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/626bc8bc20e485cad2094c4a5d9417fb9a71dda8"><img src="https://camo.githubusercontent.com/14a33470204c81d7c5c560ae311570d6e635fe19c6f12f64dbb1bd4b5df444b7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f363236626338626332302d6669782d677265656e" alt="fix - 626bc8bc20" data-canonical-src="https://img.shields.io/badge/626bc8bc20-fix-green" style="max-width: 100%;"></a></td> <td>sanitize translated form attributes</td> </tr> </tbody> </table> mattrbeck tag:github.com,2008:Repository/24195339/v19.2.20 2026-03-12T20:42:44Z 19.2.20 <h3>compiler</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/5be912eb55fe88e8621e2ce82470d51b7d950ceb"><img src="https://camo.githubusercontent.com/e66e2cb485344a6093c5a2e17331b97e04b4ca63e9ec9bb1fe1cf08a8fcc81a5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f356265393132656235352d6669782d677265656e" alt="fix - 5be912eb55" data-canonical-src="https://img.shields.io/badge/5be912eb55-fix-green" style="max-width: 100%;"></a></td> <td>disallow translations of iframe src</td> </tr> </tbody> </table> <h3>core</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/b89b0a83a4d21bbb6f8534bbf56aece12af24595"><img src="https://camo.githubusercontent.com/96b6297f23f0b1cd18a322a3bbd192c093d93deb3f66df88ad40af6666f97b1e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f623839623061383361342d6669782d677265656e" alt="fix - b89b0a83a4" data-canonical-src="https://img.shields.io/badge/b89b0a83a4-fix-green" style="max-width: 100%;"></a></td> <td>sanitize translated attribute bindings with interpolations</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/621c7071adffbe5dd45a5c954b6b6138e0870844"><img src="https://camo.githubusercontent.com/72ebb9095e290df7aa92a0f028df6c02766ff4154620ca3d157606918c9ba2dc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f363231633730373161642d6669782d677265656e" alt="fix - 621c7071ad" data-canonical-src="https://img.shields.io/badge/621c7071ad-fix-green" style="max-width: 100%;"></a></td> <td>sanitize translated form attributes</td> </tr> </tbody> </table> josephperrott tag:github.com,2008:Repository/24195339/vsix-21.2.3 2026-03-11T21:10:18Z VSCode Extension: 21.2.3 <p>This release contains internal refactorings only.</p> atscott tag:github.com,2008:Repository/24195339/v22.0.0-next.2 2026-03-11T20:10:40Z 22.0.0-next.2 <h3>core</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/b918beda323eefef17bf1de03fde3d402a3d4af0"><img src="https://camo.githubusercontent.com/528a77c09ad59f0b95ffde3a1872075d9dee3f11387df671800b6fafe003a12e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f623931386265646133322d666561742d626c7565" alt="feat - b918beda32" data-canonical-src="https://img.shields.io/badge/b918beda32-feat-blue" style="max-width: 100%;"></a></td> <td>allow debouncing signals</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/f9ede9ec98ad233c4bbddf268cce8a647333ebfc"><img src="https://camo.githubusercontent.com/71d341be4c3b721ae8050af35cc0c0f2234b0e35adefd06fa9c66ce20da15288/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f663965646539656339382d6669782d677265656e" alt="fix - f9ede9ec98" data-canonical-src="https://img.shields.io/badge/f9ede9ec98-fix-green" style="max-width: 100%;"></a></td> <td>ensure definitions compile</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/b401c18674f16bceeaf7c9babcb4b4d70f29be4f"><img src="https://camo.githubusercontent.com/f36134d5870c6495327b11b6f3fdf674628a78ac436efd1cec5002ac2184278e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f623430316331383637342d6669782d677265656e" alt="fix - b401c18674" data-canonical-src="https://img.shields.io/badge/b401c18674-fix-green" style="max-width: 100%;"></a></td> <td>include signal debug names in their <code>toString()</code> representation</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/8630319f74c9575a21693d875cc7d5252516146d"><img src="https://camo.githubusercontent.com/44368fc354e1ef5acf625ea02775fdf6694eeb7727fda64a7f9b2f60ed059208/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f383633303331396637342d6669782d677265656e" alt="fix - 8630319f74" data-canonical-src="https://img.shields.io/badge/8630319f74-fix-green" style="max-width: 100%;"></a></td> <td>sanitize translated attribute bindings with interpolations</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/36936872c962b2073c8f44080684701068866691"><img src="https://camo.githubusercontent.com/1d7617aa653bb1f2f5c50ec65dc59c69d85fb9d029eb4e5a5a283c7994e0a15b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f333639333638373263392d7265666163746f722d79656c6c6f77" alt="refactor - 36936872c9" data-canonical-src="https://img.shields.io/badge/36936872c9-refactor-yellow" style="max-width: 100%;"></a></td> <td>remove <code>createNgModuleRef</code></td> </tr> </tbody> </table> <h3>forms</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/3e7ce0dafcf1c0b9ed7a8c528f7120f5c796a668"><img src="https://camo.githubusercontent.com/c18181fd8c66268d3ba9aecd0fdb55a868d8c7e9da6810f9954c8998f8d24ed9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f336537636530646166632d6669782d677265656e" alt="fix - 3e7ce0dafc" data-canonical-src="https://img.shields.io/badge/3e7ce0dafc-fix-green" style="max-width: 100%;"></a></td> <td>restrict <code>SignalFormsConfig</code> to a readonly API</td> </tr> </tbody> </table> <h3>language-service</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/5a6d88626b604db937287a501cb723c088412a7e"><img src="https://camo.githubusercontent.com/31491dc8f9a9f75bfc80f38ef670a20ec35fbeaad34ca730df91eb6270510d56/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f356136643838363236622d666561742d626c7565" alt="feat - 5a6d88626b" data-canonical-src="https://img.shields.io/badge/5a6d88626b-feat-blue" style="max-width: 100%;"></a></td> <td>add angular template inlay hints support</td> </tr> </tbody> </table> <h2>Breaking Changes</h2> <h3>core</h3> <ul> <li><code>createNgModuleRef</code> was removed, use <code>createNgModule</code> instead</li> </ul> atscott tag:github.com,2008:Repository/24195339/v21.2.3 2026-03-11T19:03:17Z 21.2.3 <h3>core</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1"><img src="https://camo.githubusercontent.com/da9949a8ab305aca2d2af25084b772ef33d3cfb3d39fb052b0d7a4904dd98ef6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f363261393766376534622d6669782d677265656e" alt="fix - 62a97f7e4b" data-canonical-src="https://img.shields.io/badge/62a97f7e4b-fix-green" style="max-width: 100%;"></a></td> <td>ensure definitions compile</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259"><img src="https://camo.githubusercontent.com/08572faaa35d2cc57adc911399cd23fbc29ed0337b5a364ffda5b4cc770a282e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f323162316333623265652d6669782d677265656e" alt="fix - 21b1c3b2ee" data-canonical-src="https://img.shields.io/badge/21b1c3b2ee-fix-green" style="max-width: 100%;"></a></td> <td>include signal debug names in their <code>toString()</code> representation</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187"><img src="https://camo.githubusercontent.com/7d02e61bcff4414426d3b274fd8e2935d51c6db8d64fcdd3e3798300a9f988b9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f323234653630656362312d6669782d677265656e" alt="fix - 224e60ecb1" data-canonical-src="https://img.shields.io/badge/224e60ecb1-fix-green" style="max-width: 100%;"></a></td> <td>sanitize translated attribute bindings with interpolations</td> </tr> </tbody> </table> atscott tag:github.com,2008:Repository/24195339/v21.2.2 2026-03-09T18:11:47Z 21.2.2 <h3>compiler</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f"><img src="https://camo.githubusercontent.com/9685b099e5ffe6dc1f1f3fdfd29c4c4ac9b2d9ccc9daf425f80605a4ec66a73d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f316466313639376336652d6669782d677265656e" alt="fix - 1df1697c6e" data-canonical-src="https://img.shields.io/badge/1df1697c6e-fix-green" style="max-width: 100%;"></a></td> <td>prevent mutation of children array in RecursiveVisitor</td> </tr> </tbody> </table> <h3>compiler-cli</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3"><img src="https://camo.githubusercontent.com/b84cc5b7638fc8ac6d7840be446097ef95820aaf53675e953da2c6fa75801fd4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f633832326266386537362d6669782d677265656e" alt="fix - c822bf8e76" data-canonical-src="https://img.shields.io/badge/c822bf8e76-fix-green" style="max-width: 100%;"></a></td> <td>always parenthesize object literals in TCB</td> </tr> <tr> <td><a href="https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9"><img src="https://camo.githubusercontent.com/92094636a41d791b2796f153ca2c6a38d71932f258fdb7a83edf317e66c2cca6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f303564303232643565362d6669782d677265656e" alt="fix - 05d022d5e6" data-canonical-src="https://img.shields.io/badge/05d022d5e6-fix-green" style="max-width: 100%;"></a></td> <td>ignore generated ngDevMode signal branch for code coverage</td> </tr> </tbody> </table> <h3>forms</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3"><img src="https://camo.githubusercontent.com/9d38e5be15a13b75566e3a9944bddec5ab6d8b34226bf0e6534d0f984655af16/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f363730643136363063342d666561742d626c7565" alt="feat - 670d1660c4" data-canonical-src="https://img.shields.io/badge/670d1660c4-feat-blue" style="max-width: 100%;"></a></td> <td>add 'blur' option to debounce rule</td> </tr> </tbody> </table> atscott tag:github.com,2008:Repository/24195339/v22.0.0-next.1 2026-03-05T18:20:20Z 22.0.0-next.1 <h3>compiler</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b"><img src="https://camo.githubusercontent.com/720c61993b8534bb1e456cfe2397e4f8eb8cf957ac7ccd38bf5a2607c00c03a0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f373261313761666166332d6669782d677265656e" alt="fix - 72a17afaf3" data-canonical-src="https://img.shields.io/badge/72a17afaf3-fix-green" style="max-width: 100%;"></a></td> <td>prevent mutation of children array in RecursiveVisitor</td> </tr> </tbody> </table> <h3>compiler-cli</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4"><img src="https://camo.githubusercontent.com/1f535806d31ed2546aa6ae96c279d6ed3016398032a0026654368b030c9956d1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646334636636343962362d6669782d677265656e" alt="fix - dc4cf649b6" data-canonical-src="https://img.shields.io/badge/dc4cf649b6-fix-green" style="max-width: 100%;"></a></td> <td>ignore generated ngDevMode signal branch for code coverage</td> </tr> </tbody> </table> <h3>forms</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8"><img src="https://camo.githubusercontent.com/125bc2b0444feb082d816da61115dee18f8297a8ead27e9d015311c8ccc8084c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f633736376436373863662d666561742d626c7565" alt="feat - c767d678cf" data-canonical-src="https://img.shields.io/badge/c767d678cf-feat-blue" style="max-width: 100%;"></a></td> <td>add 'blur' option to debounce rule</td> </tr> </tbody> </table> <h3>migrations</h3> <table> <thead> <tr> <th>Commit</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7"><img src="https://camo.githubusercontent.com/1b716c3cb11532635b950e7157d49bfb0d0a27e76be008ced31f04e953952e1d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f663031393031643736362d6669782d677265656e" alt="fix - f01901d766" data-canonical-src="https://img.shields.io/badge/f01901d766-fix-green" style="max-width: 100%;"></a></td> <td>avoid generating invalid code in ChangeDetectionStrategy.Eager migration</td> </tr> </tbody> </table> atscott tag:github.com,2008:Repository/24195339/vsix-21.2.2 2026-03-04T20:41:11Z VSCode Extension: 21.2.2 <ul> <li>fix(extension): bundle TypeScript 5.9 internally (<a href="https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39">da57d1af73</a>)</li> </ul> atscott