>`, since n... [TRUNCATED]",scope: types,2024-12-24T10:51:56Z,2025-03-19T03:39:00Z,1
vuejs/core,2755042227,Memory leak,"### Vue version
3.5.12
### Link to minimal reproduction
none
### Steps to reproduce
Regarding the issue of memory leakage in obtaining focus for input boxes, it has been determined that it is a bug in Chrome. Is there a temporary solution to solve this leak? Our project relies on browsers and has already been launched for customer use. Currently, memory leaks often cause crashes, and we do not know when Chrome will fix this bug. We hope to provide a temporary solution. Thank you!
### What is expected?
Resolve memory leaks
### What is actually happening?
Memory leak on input focus
### System Info
_No response_
### Any additional comments?
_No response_",,2024-12-23T01:55:39Z,2024-12-23T03:02:26Z,1
vuejs/core,2752371621,tsx中使用指令传递数组对象的时候指令编译出来的结果不对,"### Vue version
3.5.13
### Link to minimal reproduction
https://play.vuejs.org/#eNp9UstOwzAQ/BVrTyCVVG3hUiWVAPUAB0DADSNkJUua4tiWH6FSlH9nnVBopbY3787s7OzILVwbkzQBYQ6px9pI4XHBFWNta1EVaLtut5rGMh3vMKl0ua2MZ1KoMuPg3YYDc+iDITjXynk2DLOMnZ2zbMHaKGmJYRVLi6phzYUIfpW1bxwmHEa/NA5TDu/dIh0Th7Ro9b7gdF9xgAQ1D+kc2yn2FqTj4RqqYES3kOZnVSZrpxVF1K/hkOvaVBLto/EV7eQwHwxETEipv+/7nrcBR9t+vsL860B/HeOa0+PJokPbIPneYl7YEv0AL18ecEPvP7DWRZDEPgE+o9MyRI8D7Saogmzv8Hq3d7XR1leqfHXLjUfltkdFo5HZ9XwO9E9uT5z+b3eWXPZzFCml+NGgjZoU4Cy5SiYz6H4AbRLNEw==
### Steps to reproduce
将下列 tsx 代码编译之后的到的结果即可查看到差异
` ""2""]}>
` 和 `const a = [""1"", () => ""2""]
return
` 编译的结果不一样
```ts
{{render}}
{{render2}}
```
编译结果
```ts
/* Analyzed bindings: {
""render"": ""setup-const"",
""render2"": ""setup-const""
} */
import { defineComponent as _defineComponent, resolveDirective as _resolveDirective, createVNode as _createVNode, withDirectives as _withDirectives } from 'vue';
const __sfc__ = /*@__PURE__*/_defineComponent({
__name: 'App',
setup(__props, {
expose: __expose
}) {
__expose();
const render = () => {
return _withDirectives(_createVNode(""div"", null, null), [[_resolveDirective(""auth""), ""1"", () => ""2""]]);
};... [TRUNCATED]",,2024-12-20T09:56:39Z,2024-12-23T01:52:04Z,2
vuejs/core,2752049926,Error reported due to esbuild@0.24.1 version issue after project creation,"### Vue version
3.5.13
### Link to minimal reproduction
https://stackblitz.com/edit/vitejs-vite-7e6aek9b?file=package.json&terminal=dev
### Steps to reproduce
1. 使用 pnpm create vue@latest 创建项目
2. 安装依赖
3. 启动项目
### What is expected?
normal operation
目前是 esbuild@0.24.1 更新到此版本。导致项目报错,换一个低版本0.24.0就正常运行
### What is actually happening?
### System Info
```shell
System:
OS: macOS 15.1
CPU: (10) arm64 Apple M2 Pro
Memory: 69.50 MB / 16.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 18.16.0 - /usr/local/bin/node
Yarn: 1.22.19 - /usr/local/bin/yarn
npm: 8.19.2 - /usr/local/bin/npm
pnpm: 8.5.0 - /usr/local/bin/pnpm
Watchman: 2023.10.23.00 - /opt/homebrew/bin/watchman
Browsers:
Chrome: 131.0.6778.205
Edge: 131.0.2903.112
Safari: 18.1
npmPackages:
vue: ^3.5.13 => 3.5.13
```
### Any additional comments?
_No response_",,2024-12-20T06:36:15Z,2024-12-20T08:09:27Z,2
vuejs/core,2749447702,KeepAlive includeremovedeactive component应该从 keep-alive storageContainer 中删除组件,"### Vue version
3.5.13
### Link to minimal reproduction
https://play.vuejs.org/#eNqNVMGO2jAQ/RXL6oGVdhNBe6IBdUs5bA9t1eVW9+AmE+LFsSPHDkiIf+/YCQksLO0t9rw382bmOXv6WFVR44BOaVKnRlSW1GBdNWdKlJU2luyJgfyeKNjZlUg35EByo0vCKLIY/djjFrqsxsdYFIejz/waMznHTHoMUxKweqG3baqZLzyyxsEdRn1MqFS6DLrIL0YDkNF7zBZyMfrbY5nKnUqt0IqkBVdreMakozuyZ4oMBaKGS+eT5VzWgLTDBe+pLXikdvV7YqfAl0U66Wc0QsJs3nII4RKMHW0AqkcpGljwtIAvoonSQshsKaEEZRfaKXvn8QffACpJ4nYduAg8WCgryS3giZDkj7MWNX5KJRabMTo0yejc90dSlEUmSdwib7G6FpFooNQNEC/0gXulIcv4PMnKcFWLMCLFS8A0OfdsUurMn7SzD0LhmVcVcBNISDtJOu2miODuC2u3MAS2q28eRI7xflWYLz7HTBADuLb+PomHGq3UeNCKF0ncz5Det2t75XsEwS7YNIOcO4nWD0vFNqeDwXA5uKBb2ynG84BNYvy6Vjg8i/PC/Vt7+5n9S5t/B/6u9FaC7OjZS1cGh6HRAjoDjoZvUN0JYytUprfRhWXR8rYQdfQOZFRxg77t7Nsn/M/ZoKmuzMbWqVa5WEcvtVY4n6AGfYoEgW/oe+VXWTM6PepklEupt1/Dnf9RhJYCp4B0c+X+pd75O0Z/GKjBNDjaPma5WYNtw8vnbzi1kyDa20lE3wj+hFpL5zW2sM9OZSj7BBfUPoVVC7Ve1cudBXRo15QXOiwmLN7P6q3WB7nvow+Bh+Onh7/L4/OJ
### Steps to reproduce
类似的问题 #5258
在这个的基础上如果keepalive被Transition包裹则还是会导致无法回收
点击show comp2按钮显示comp2
单击remove keep-alive comp1按钮comp1从保持活动状态中删除
KeepAlive 的 storageContainer 仍然有 comp1.element
### What is expected?
储存容器移除 comp1.element
### What is actually happening?
存储容器仍有 comp1.element
### System Info
_No response_
### Any additional comments?
_No response_",,2024-12-19T07:10:54Z,2024-12-19T08:37:43Z,1
vuejs/core,2742265099,vue 3.4.15及以上版本中发现 compiler-sfc.cjs.js 引用magic-string^0.30.11,6小时前magic-string更新导致报错,"### Vue version
3.4.15
### Link to minimal reproduction
https://github.com/vuejs/core/issues/new?assignees=&labels=&projects=&template=bug_report.yml
### Steps to reproduce
更新导致 ES 模块和 CommonJS 模块的兼容性
### What is expected?
magic-string引用更新导致 ES 模块和 CommonJS 模块的兼容性问题,导致新install的包运行时直接报错
### What is actually happening?
magic-string引用更新导致 ES 模块和 CommonJS 模块的兼容性问题,导致新install的包运行时直接报错
### System Info
_No response_
### Any additional comments?
_No response_","need more info,can't reproduce",2024-12-16T12:31:17Z,2024-12-20T00:09:48Z,1
vuejs/core,2740739842,watch with deep: true incorrectly collects parent dependencies,"### Vue version
3.5.13
### Link to minimal reproduction
https://play.vuejs.org/#eNq1kk1PwzAMhv+KldOQqk4ITmWbBGgHOAACxCmX0npdR5pESbpNqvrfcVy2AZomceCW2K/txx+duLY2XbcoMjHxhattAI+htTOp68YaF6CDTR6KZQIO8yLUa4QeFs40IAXFSXEltdSF0T6AeV/BdK8bdaDRBywzyrEwJoNzCu3POIBzjqQGGJ3BdBZD00GdkjRhh8bNW65aTMCokl8s7aITIJY0ClNlqpEUnI/q/Y7ICDM5Yo8UAL3U/4NTItphbn9n4modxBQZBNfSwHeYByyaMxce5kohPQsm42GJtD76BGysygMOv/GPr0hE8AS9qKt05Y2mA+CEUhSmsbVC92hDTU1JQfsbepQiV8ps7tkWyRiVY5ZYfByxr/w22qR4cujRrele9r6QuwrD4J6/POCW3ntnY8pWkfqE8xlp4G1kHGQ3rS4J+5uOae/4jGtdvfr5NqD2u6Yi6GHgfM23J1o/4F6kl1/H04v+EyfJFQA=
### Steps to reproduce
```js
const obj = reactive({ nested: { foo: 1 } });
watch(
() => obj.nested.foo,
(newValue, oldValue) => {
console.log(""watch triggered newValue, oldValue: "", newValue, oldValue);
}
);
watch(
() => obj.nested.foo,
(newValue, oldValue) => {
console.log(""watch deep triggered newValue, oldValue: "", newValue, oldValue);
},
{ deep: true }
);
obj.nested = {
foo: 1,
};
```
When using watch with the deep: true option, the getter execution triggers dependency collection for the entire object tree, including parent properties, instead of only the target property. This causes the callback to be triggered when a parent property (e.g., obj.nested) is modified, even though the target property (e.g., obj.nested.foo) itself has not changed.
### What is expected?
The callback should only be triggered when obj.nested.foo changes, not when the parent ... [TRUNCATED]",,2024-12-15T16:11:54Z,2024-12-16T03:24:39Z,1
vuejs/core,2738498830,Vue flags not working correctly,"### Vue version
3.5.13
### Link to minimal reproduction
https://github.com/rstoenescu/vue-flags-bug
### Steps to reproduce
Please see the reproduction repo (a barebones Vitejs project folder): /vite.config.js for flags configuration and /src/App.vue for an Options API component.
```
define: {
// No effect, it's still included
__VUE_OPTIONS_API__: 'false',
// Has the opposite effect: devtools will be enabled for prod builds!
// Commenting this out will disable devtools in prod builds.
__VUE_PROD_DEVTOOLS__: 'false',
// Has the opposite effect: mismatch details will be included in prod builds!
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false'
},
```
1. Run `yarn build` then serve the /dist folder. App.vue, which is an Options API component runs fine and executes its Options API definition.
2. Run `yarn build` with vite.config.js > `__VUE_PROD_DEVTOOLS__: 'false',`. Serve the /dist folder and notice that Vue Devtools is available and running. Then again with the vite.config.js `__VUE_PROD_DEVTOOLS__` line commented out. Notice that Vue Devtools is not available.
### What is expected?
1. Options API to not be included when define > `__VUE_OPTIONS_API__` is set to false.
2. Vue Devtools not to be available for production builds when define > `__VUE_PROD_DEVTOOLS__` is set to false.
3. Hydration mismatches will still be available in production builds when define > `__VUE_PROD_HYDRATION_MISMATCH_DETAILS__` is set to false.
... [TRUNCATED]",,2024-12-13T14:14:42Z,2024-12-16T00:48:57Z,2
vuejs/core,2737661676,incorrect default value of boolean prop in defineProps ,"### Vue version
3.5.13
### Link to minimal reproduction
https://play.vuejs.org/#eNqFUstOwzAQ/JWVLwWpSg5wqtIiQD3AASrg6EuabIOLY1t+lEoh/87aoQ8kaG87O7P27NgduzUm2wRkE1a4ygrjwaEPBmSpmiln3nE240q0RlsP97o1sLK6hVGWRxBHR1xxVeTDNGkJeGyNLD0SAijSVE51kR8RbEyHV1qtRJOtnVbkoItyzirSC4n22XihFRmYQGIiV0qpPx9Tz9uA412/esfq44/+2m1jj7OFRYd2g5ztOV/aBv1Az1+fcEv1nmx1HSSpT5Av6LQM0eMguwuqJttHuuT2IWUnVPPm5luPyu2Wikajsk96zijLGNV/qx/sXmXXaY6rnlLcvcOZJ6SonQdjtXEwhRpXQuEioiLdUN5MwHlLNpObJUEV2iXaBCuCS60llirh+oDhC2jvdFxNhmYXl6d/Qy02qQDouh87PW1CTD5Qv39J/w0r/uD7
### Steps to reproduce
define props like:
```ts
const props = defineProps<{
a?: string,
b?: number,
c?: boolean,
d?: boolean | undefined
}>()
```
got the result:
```
{ ""c"": false, ""d"": false }
```
### What is expected?
default value of (not required) boolean props should be undefined
### What is actually happening?
got false
### System Info
_No response_
### Any additional comments?
_No response_",,2024-12-13T07:29:45Z,2024-12-13T07:33:59Z,1
vuejs/core,2735339893,Hydration mismatch with non-printable characters,"### Vue version
3.5.13
### Link to minimal reproduction
https://play.vuejs.org/#__SSR__eNp9kUFLxDAQhf9KnMteli5SvSxVUFlQDyoqeAlIacfaNU1CMqmF0v/uJGW1B9nc8t6byTeTEa6szfqAsIXCV661JDxSsJdSV0Z7EoQDiQuxukWljHgzTtUnUrqV1MVmLuAoXwg7q0pCvglRxHrBZxznBtOU5E3Ui80iC2sgzy99tE2290YzxxijEirT2Vahe7TUMomErUhO9Epm+b5PGrmA64NefWL19Y++90PUJDw59Oh6lPDrUekapNnevTww7cLsTB0Up4+Yz+iNCpFxjl0HXTP2Ipdo7zprHLW6efW7gVD7w1ARNCanlJfAn3FzZPQ/3Dw7S3VST7zF9x5d7MkLzLPz7DSH6Qet+5ud
### Steps to reproduce
1) Open the reproduction
2) Look into the console
### What is expected?
No hydration mismatch should occur since Vue should recognize that by retrieving the content of an HTML element from the DOM, it will not receive these characters.
### What is actually happening?
When Vue renders a string with non-printable characters on the server, a hydration mismatch appears on the client.
For example:
```ts
const text = 'Hello World!\r'
```
_Edit: Actually, it seems that only `\r` is causing problems based on my testing._
### System Info
_No response_
### Any additional comments?
_No response_",":hammer: p3-minor-bug,scope:hydration",2024-12-12T09:21:50Z,2024-12-12T10:41:24Z,1
vuejs/core,2733970230,Typescript error: required named v-model props passed in camelCase but expected in kebab-case,"### Vue version
3.5.13
### Link to minimal reproduction
https://play.vuejs.org/#eNqVUl1PwjAU/StNX9AERhB9QTABwoMmfkR9bGLGdoFiaWvbIWbZf/e2kw0ETHzaes69t+eenpwOtY7WGdAe7TtYaRE7uGGSkH6y4CJtJWqllQTpyLq1UimInjZKg3FfrXjAqIHZkNFDblpyI+TaOK7f3pmNR5sYrh2x4DJNRCznWO4so8hyvM84khNsJwWZGbUiDRTYuK64sVc2roSVJVH7l2C/lW9iMlHSOj9vSAb+c9Y5R7xCRz/ohUf77VIbKqFN1IRVMz6PllZJtCj3zjDq7+ACzKN2HKcw2iOB8VwshPq8C5gzGTS3eLKA5P0IvrQbjzH6ZMCCWQOjFediMwdX0pOXB9jgf0Wi45nA6j/IZ7BKZF5jWTbKZIqyd+qC2ttgK5fzVzvZOJB2u9SeUOsMT4IYD3u0CByjaLR/jVOO1Ft0o8vQx2SB5h55r4MU5jnZZmpICmzcg0YB+ke4yjevJw5ICjMu4d6n96xRR7vRDAn8yLiBtNyYFHVqagGnJkxPTthP2NsajPcbN+9GV1GnS4tvs5I37Q==
### Steps to reproduce
I'm not sure why in the linked project I don't have any type errors, but I get them locally when running the same code example. If you have a named `defineModel` with `required: true` and try to pass it via kebab case to the child component, typescript complains that `property-a` isn't being passed. It does say that `propertyA` is being passed. I noticed that only the v-model props are being expected in kebab-case, the others are expected in camelcase.
I was also having additional runtime problems with kebab casing, but these were resolved in version 3.5.12. It seems the typescript issue is a lingering problem.

### What is expected?
I called `defineModel` with the string `property-a` and I ex... [TRUNCATED]",scope: types,2024-12-11T20:45:30Z,2025-02-25T14:25:48Z,0
vuejs/core,2732236231,子组件直接作为父组件根元素时,父组件的事件会传递到子组件,类似事件冒泡,"### Vue version
3.5.13
### Link to minimal reproduction
https://play.vuejs.org/#eNqtU8tO6zAQ/RXLm6RSlS7uXUFa8VAXIPEQsMMsImdaDMk48qNUqvrvjB1SQkkRCzaW533m+HjDT5smW3ngRzy30qjGMQvONzOBqm60cey2MIDuXJOFdGELo2uWZJM9f2iSCFx4lE5pZJVepqONQMakRqsryIInaWJVMjoWuBWYT9qZNI0MB3VTFQ7IYizfn3tC9VPB6RR8lu+Pp5p80mvAx9xZmrxQy+zFaqT9IhjBJZWoCsxNE3BawY9YjIRYUVX67TL6nPEw7vzyGeTrgP/FroNP8FsDFswKBN/FXGGW4Nrw/P4a1nTfBWtd+oqyfwjeAbHmA8Y27cxjSbB7eRHtRXwlhcsHO187QNstFYCGzG3MF5zeJ7B1aPVPuP+y/7GOXohYHHjmw1rZMI1X2qODcsyo3bk3ofoCrStQAtu26olgBCcNfNTda/wusL7zQ11BSo6prt10YEYapCVwhyNNR9PZQR2Ou15RkKMowx802YdEGvxifhfg/gJ/yFtLBNTKWWKhhIVCmAcrfUxov+Qp7PN3bNEHGqJq4LNHSGnE8Is/XqpVvLRXdiIrJV+7T85mfQLzSZfc3b7SvX0HaRytMg==
### Steps to reproduce
点击子元素
### What is expected?
控制台不该有任何输出
### What is actually happening?
控制台输出了 'parent'
### System Info
_No response_
### Any additional comments?
不清楚是不是就是这样设计的",,2024-12-11T08:32:33Z,2024-12-11T08:39:57Z,1
vuejs/core,2730398601,怎样定义方法暴露给JCEF(Chrominu内核)调用,"### Vue version
3.5.1
### Link to minimal reproduction
无
### Steps to reproduce
如果是 javascript,只要定义方法,直接可以被 jcef 的 executeJavaScript 调用。
function fnAlert(){....}
jcef调用:executeJavaScript('fnAlert();','',0)
但在vue3中,使用setup模式定义方法,在jcef中调用提示 Uncaught ReferenceError: fnAlert is not defined
vue3中定义
`
`
在vue3中如何像javascript把方法暴露出来给chromium内核浏览器执行 executeJavaScript 来调用方法。
### What is expected?
向浏览器暴露方法
### What is actually happening?
...
### System Info
_No response_
### Any additional comments?
_No response_",,2024-12-10T15:08:52Z,2024-12-10T15:12:26Z,0
vuejs/core,2729672988,@vue/compat传递组件未声明的props,没有作为attrs穿透,"### Vue version
3.5.13
### Link to minimal reproduction
https://play.vuejs.org/#eNp9UsFuwjAM/ZUolxapgsN2qmDShjiwA5s2tFMuVWogEJIocRlSxb/PSSmrpm252e/Zfnl2yx+dG58a4CWfBumVQxYAG/cgjDo665G1NWyUgbml0IDBYldIDxXCx8rWcGEbb49McOohuDDSmoBsDWdkM/ajMm+FYV373HnrQtFWiD5cRgmgF6uthrG227ztKFfGlcA8VXvD8tHsYZdntTplRRanZYlxESZSexlLE0jFQG0eqUWcJnUVQpkhBMwKiq2ZayUPZWzcDmVkMuahzka35sJMJ51X5BIFCEenaQRFjE1l/11WqjATnEQIPiFsOhkQecEx0JyN2o73wRryP5kgeKxXGvyLQ0U6BC/Z1R7BK63t53PKoW8gCk95uQN5+CW/D+eYE/zVQwB/ohXdMKz8FrCDF+8rMmYAHm3daGL/A74BedREjR3tqTE1yR7wktpluiJltuuwOCOY0H8qCk07S/x0QPFS/vr6t9y78X2/a375Aun37qM=
### Steps to reproduce
如以上repo
### What is expected?
在vue中,class 和 onClick都会作为attrs被传递,因为并没有在组件的props中声明
### What is actually happening?
在@vue/compat中,props和attrs中都没有class 和 onClick 属性。
此行为导致vant组件库大量组件无法使用
### System Info
_No response_
### Any additional comments?
_No response_",,2024-12-10T10:18:46Z,2024-12-11T01:17:16Z,2
vuejs/core,2726585872,多次切换checkbox,vnode没有释放,"### Vue version
latest
### Link to minimal reproduction
https://play.vuejs.org/#eNqNU8tu2zAQ/JUtL06AVILQnlLZ6CuH9tAWTY68KPLKZkKRBB+KA8P/niUZyXEeRm7kzJC7wx1u2TdjiiEgO2e1a60wHhz6YBZcid5o62ELFjvYQWd1DzOSzibqh+7NI16UcRNvmn054KsDQTUquGq1clRsre/SNfNY5sTbgKd7tl03aoXEnZzCfAFbrmA6UQyNDJH7cIhwtYsX1GW2Q0Zo47E3svFIO4D6OnivFXxtpWhv55zlMpwt8qIusyCLU3fDR9GRcKzEGZR7tiIapcOE1eWTWuyMeUdWOrEqbpxW9MrJA5Wkc0Ki/Wu8IKucnWd3kWuk1He/Exbf42zE2zW2t6/gN24TMc7+WXRoB3Iycb6xK/SZvrj8gxtaT2Svl0GS+gj5H52WIfaYZd+DWlLbT3Sp219p4EKtrtzFxqNyo6nYaFTukp4zGn98sres79v9VHxO52ic9IpjuF7E9NiYl2JIi5zDqkpgmdHnY5rC+cpHOPIVKMkAY1ZpOrj8ib1+DHPXUCgoze/qEWqhTPDg7w2mSNJt15oGS+GiUaAcwVyCwvq2nd0DcQVLGQ==
### Steps to reproduce
重复切换/勾选多少次就会出现多少个vnode
https://github.com/user-attachments/assets/1537f206-c147-4595-9d31-c236cf691c15
### What is expected?
销毁掉
### What is actually happening?
没有销毁
### System Info
_No response_
### Any additional comments?
_No response_",,2024-12-09T10:12:16Z,2024-12-09T12:41:32Z,1
vuejs/core,2725006087,Reactivity is lost when using `Reactive Props Destructure` on props with default values specified using `withDefaults`.,"### Vue version
v3.5.13
### Link to minimal reproduction
https://play.vuejs.org/#eNq1U0uP0zAQ/itTX9KVSqJV4VLSSjxWAg6wWpC4WEJRMmm9OHZkT7JFUf47Y2dTCiy9cfN83zy+eXgQr9o27TsUG5H70qmWwCN17U4a1bTWEQzgsIYRamcbSNg1OVFvbNM+4mkWjJApeSlNaY0naPwetiF6mbxDrS18tU5Xi+RKmjybinEZNgibVheEbAHkh+vdMMTgccwztiKqTNsR9M8aW6HeSsG8FJBNZBSyYeg3Is/OEouVIM+6arVP77013PAQYqUoOVhpdJ9aUqxbig1EJnAFy374EDFyHa5mvDxg+f0J/N4fAybFrUOPrkcpThwVbo800TefP+KR3yeS2+o0e18g79Bb3QWNk9vrzlQs+8wvqn0fd6PM/ou/ORIaPzcVhAbPMfpLwbsKc/tX67/krtPnMU6akac47/nsYnRhwuSJE5yuJ8vgDouSVK/oBygP2nqaL+NxvXwdD4oOb7EuOk1+WWGtDN462/p8YI8NeHLcybhbXq1gQqSYbinIWCykGPmanqhmLMuKFZn630Ugcuetbf9KEbu9VPvyp6hUHx8QE/Ka5h8S2Wyi/zz4bz26sH5e1Tp9kV6vxfgTLfRRWA==
### Steps to reproduce
* Update `msg` in `App.vue` from Preview from input tag.
* The `Comp: Hello World!` shown in Preview does not change according to the input value (`msg`).
### What is expected?
* That reactivity is not lost and that the `Comp: Hello World!` shown in Preview is changed to match the `msg` in `App.vue`.
### What is actually happening?
* Reactivity is lost and the `Comp: Hello World!` displayed in Preview is not changed to match the `msg` in `App.vue`.
### System Info
_No response_
### Any additional comments?
As shown below, it seems to occur when you set default values with `withDefaults` while expecting `Reactive Props Destructure` and split assigning props.
```ts
// Reactivity is lost
const { msg } = withDefaults(defineProps<{msg: string}>(), {msg: ""Hello Comp!!... [TRUNCATED]",,2024-12-08T07:28:30Z,2024-12-09T00:54:00Z,3
vuejs/core,2720437152,Using headers attribute on table cells trigger warning when running tests with happy-dom environment ,"### Vue version
3.5.13
### Link to minimal reproduction
https://codesandbox.io/p/devbox/8kthxl
### Steps to reproduce
**From the reproduction link**
On a terminal, run :
```shell
pnpm run test
```
**From a new project**
1. Install vue, vue-test-utils and vitest with happy-dom as environment.
2. Create a component with a table and a `headers` attribute on any of the table cells.
3. Set up a test for this component, then run the tests.
### What is expected?
`headers` attribute on td element should be displayed and interpreted as an HTML attribute.
### What is actually happening?
Got the following warning
```
[Vue warn]: Failed setting prop ""headers"" on : value header is invalid. TypeError: Cannot set property headers of [object Object] which has only a getter
at patchDOMProp (/project/workspace/node_modules/.pnpm/@vue+runtime-dom@3.5.13/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:603:13)
at patchProp (/project/workspace/node_modules/.pnpm/@vue+runtime-dom@3.5.13/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:714:5)
at mountElement (/project/workspace/node_modules/.pnpm/@vue+runtime-core@3.5.13/node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4827:11)
at processElement (/project/workspace/node_modules/.pnpm/@vue+runtime-core@3.5.13/node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
at patch (/project/workspace/node_modules/.pnpm/@vue+runtime-core@3.5.13/node_module... [TRUNCATED]",,2024-12-05T13:35:41Z,2024-12-06T07:01:31Z,2
vuejs/core,2712322905,The v-model in @vue/compact is not work well,"### Vue version
3.5.13
### Link to minimal reproduction
NA
### Steps to reproduce
Recently, we have been upgrading from Vue 2 to Vue 3 using the migration build. We found that the Vue 2 and Vue 3 syntax for v-model cannot coexist. The version of Vue3 is 3.5.13. ""If I set compatConfig.MODE=2, the Vue 3 code does not work correctly; if I set compatConfig.MODE=3, then the Vue 2 code does not work correctly
code: vue2
{{ value ? ""Yes"" : ""No"" }}
code: vue3
Parent bound v-model is: {{ model }}
Increment
### What is expected?
In @vue/compact, Use vue2 and vue3 totally
### What is actually happening?
v-model doesnot work well
### System Info
```shell
NA
```
### Any additional comments?
_No response_",,2024-12-02T15:27:32Z,2024-12-09T02:08:29Z,3
angular/angular,4687389145,Dependency conflict during installation,"### Which @angular/* package(s) are the source of the bug?
core, compiler
### Is this a regression?
No
### Description
I am using Angular 20 and recently encountered a peer-dependency conflict during installation. It seems that platform-browser-dynamic is installing angular/core@20.0.7 and ^20.0.0 installs angular/core@20.3.25. I can get around the issue by locking down my versions but this issue occurred recently and was working fine last week. Attached are screenshots of the errors and my npm package.json dependancies.
### Please provide a link to a minimal reproduction of the bug
_No response_
### Please provide the exception or error you saw
```true
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
Repo 1 Dependencies:
""dependencies"": {
""@angular/animations"": ""^20.0.4"",
""@angular/cdk"": ""^20.0.3"",
""@angular/common"": ""^20.0.4"",
""@angular/core"": ""^20.0.4"",
""@angular/forms"": ""^20.0.4"",
""@angular/localize"": ""^20.0.4"",
""@angular/material"": ""^20.0.3"",
""@angular/material-moment-adapter"": ""^20.0.3"",
""@angular/platform-browser"": ""^20.0.4"",
""@angular/platform-browser-dynamic"": ""^20.0.4"",
""@syncfusion/ej2-angular-image-editor""... [TRUNCATED]","area: packaging,gemini-triaged",2026-06-17T22:04:46Z,2026-06-17T22:06:52Z,1
angular/angular,4675946453,"docs(adev): 404 error on page refresh (F5) for specific ARIA guides (combobox, autocomplete)","### Describe the problem that you experienced
When navigating directly to certain ARIA guide pages (like combobox or autocomplete) or refreshing the page (F5) while on them, the application redirects to the https://angular.dev/404 page.
https://angular.dev/guide/aria/autocomplete 404
https://angular.dev/guide/aria/combobox 404
https://angular.dev/guide/aria/grid 200
### Enter the URL of the topic with the problem
https://angular.dev/guide/aria/combobox
### Describe what you were looking for in the documentation
I was trying to read the documentation regarding ARIA patterns (specifically the combobox and autocomplete guides) and wanted the page to load correctly after a hard refresh.
### Describe the actions that led you to experience the problem
Open the browser and go to https://angular.dev/guide/aria/grid (this works fine).
Navigate to https://angular.dev/guide/aria/combobox or https://angular.dev/guide/aria/autocomplete.
Press F5 to refresh the page.
Observe that the URL changes to https://angular.dev/404 and the ""Page not found"" view is displayed.
### Describe what you want to experience that would fix the problem
The page should render correctly on initial load and after a hard refresh without redirecting to the 404 page.
### Add a screenshot if that helps illustrate the problem
_No response_
### If this problem caused an exception or error, please paste it here
```true
```
### If the problem is browser-specific, please specify the device, OS, browser, ... [TRUNCATED]","area: docs-infra,gemini-triaged",2026-06-16T16:12:49Z,2026-06-17T15:03:58Z,0
angular/angular,4673140578,Regression: i18n-on attribute falsely rejected as an event handler since v22.0.1 — startsWith('on') is too broad,"### Which @angular/* package(s) are the source of the bug?
compiler
### Is this a regression?
Yes
### Description
In v22.0.1, commit [1ee224ca30](https://github.com/angular/angular/commit/1ee224ca30b9b5a7906b4f481135f1fb900fb3ce) (""fix(compiler): disallow i18n event attributes"") widened the i18n attribute security check to reject any i18n-prefixed attribute whose name starts with the substring on (case-insensitive):
```
// packages/compiler — I18nMetaVisitor._visitElementLike
if (isTrustedType || name.toLowerCase().startsWith('on')) {
this._reportError(attr, `Translating attribute '${name}' is disallowed for security reasons.`);
}
```
The intent is to block translation of event-handler attributes (onclick, onmouseover, …). But String.prototype.startsWith('on') matches much more than event handlers — it also matches the bare attribute on, as well as online, onboarding, once, etc. These are legitimate, translatable attributes and are now rejected as a false positive.
This breaks Kendo UI for Angular's Switch component (@progress/kendo-angular-inputs), whose precompiled kendoSwitchLocalizedMessages container declares i18n-on=""kendo.switch.on|The **On** label of the Switch."" for its On/Off labels. Any app importing now fails to build:
```
✘ [ERROR] Errors found in the template:
Translating attribute 'on' is disallowed for security reasons. (""oSwitch""], ngImport: i0, template: `
]i18n... [TRUNCATED]","area: compiler,gemini-triaged",2026-06-16T10:04:16Z,2026-06-16T10:22:51Z,1
angular/angular,4665932299,New synchronous resource behavior in v22 can cause test failures but is not called out as a breaking change,"### Which @angular/* package(s) are the source of the bug?
core
### Is this a regression?
Yes
### Description
During the upgrade to v22 I've found some of our tests suddenly failing with hard-to-explain issues. I eventually managed to trace this down to resource resolving earlier than they used to (#67382). This was causing conditions to change when manually controlling change detection (e.g. components now render because an `@if` matches).
While the behavior change is sound and guarded behind the major version bump, it would seem sensible to call out this behavior change in the breaking changes on the release and potentially in the upgrade guide (likely under *Advanced*).
### Please provide a link to a minimal reproduction of the bug
_No response_
### Please provide the exception or error you saw
```true
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
Angular CLI : n/a (we use Bazel)
Angular : 22.0.1
Node.js : 24.16.0
Package Manager : pnpm 11.4.0+sha512.f0febc7e37552ab485494a914241b338e0b3580b93d54ce31f00933015880863129038a1b4ae4e414a0ee63ac35bf21197e990172c4a68256450b5636310968f
Operating System : linux x64
┌───────────────────────────────────┬───────────────────┬───────────────────┐
│ Package │ Installed Version │ Requested Version │
├───────────────────────────────────┼───────────────────┼───────────────────┤
│ @angular-devkit/architect │ 0.2102.13 ... [TRUNCATED]",area: core,2026-06-15T14:20:08Z,2026-06-15T15:57:05Z,1
angular/angular,4658246464,Signals form: fill form model without some model fields,"### Which @angular/* package(s) are the source of the bug?
forms
### Is this a regression?
No
### Description
after defining the form with signal model including nested fields, then set this form with model and set the nested object of field with {} it will produce error in console this.field(...) is not a function
### Please provide a link to a minimal reproduction of the bug
_No response_
### Please provide the exception or error you saw
```true
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
ular CLI : 22.0.0
Angular : 22.0.0
Node.js : 24.16.0
Package Manager : npm 11.13.0
Operating System : win32 x64
┌───────────────────────────────────┬───────────────────┬───────────────────┐
│ Package │ Installed Version │ Requested Version │
├───────────────────────────────────┼───────────────────┼───────────────────┤
│ @angular/animations │ 22.0.0 │ ^22.0.0 │
│ @angular/build │ 22.0.0 │ ^22.0.0 │
│ @angular/cli │ 22.0.0 │ ^22.0.0 │
│ @angular/common │ 22.0.0 │ ^22.0.0 │
│ @angular/compiler │ 22.0.0 │ ^22.0.0 │
│ @angular/compiler-cli │ 22.0.0 │ ^22.0.0 │
│ @angular/core │ 22.0.0 │ ^22.0.0 │
│ @angular/forms ... [TRUNCATED]","area: forms,gemini-triaged",2026-06-14T07:05:53Z,2026-06-14T07:09:55Z,1
angular/angular,4656382907,ngTemplateContextGuard does not narrow type when type parameter has constraint,"### Which @angular/* package(s) are the source of the bug?
language-service
### Is this a regression?
No
### Description
I've found that when I add type constraints to a generic directive, the language service is unable to narrow the context, and defaults to `any`. Not sure if this is a known limitation, but I've not been able to find anything that says it is.
Example:
```typescript
import { Component, Directive, input, signal } from '@angular/core';
export type GenericContext = { $implicit: T };
@Directive({
selector: '[appGeneric]'
})
export class GenericDirective> {
readonly items = input.required();
static ngTemplateContextGuard>(
directive: GenericDirective,
context: unknown
): context is GenericContext {
return true;
}
}
@Component({
selector: 'app-root',
template: `
`,
imports: [GenericDirective]
})
export class App {
readonly items = signal([
{ myNum: 0 }
]);
}
```
Result:
After removing `extends Record`:
### Please provide the environment you discovered this bug in (run `ng version`)
```tr... [TRUNCATED]","area: language-service,gemini-triaged",2026-06-13T17:50:04Z,2026-06-14T09:04:46Z,2
angular/angular,4653721552,Reference-counted component outputs,"### Which @angular/* package(s) are relevant/related to the feature request?
core
### Description
I would like to be able to detect when a component output has subscribers.
This enables components to dynamically show UI elements like buttons if an output for the button has subscribers.
For example:
```ts
@Component({
selector: 'app-component',
})
export class ExampleComponent {
// The button only gets rendered if the output has subscribers
readonly backClick = output();
}
```
```html
@if (backClick.hasSubscribers()) {
Back
}
```
This is very useful for making components _harder to misuse_, as we don't show buttons that we know have no effect. We can also log warnings or errors if an output should be used, but isn't.
Currently, we can accomplish this by extending the EventEmitter class to refcount on `subscribe()`. However, extending Angular classes is not supported under Angular's semver policy: https://github.com/angular/angular/blob/main/contributing-docs/public-api-surface.md#extending-angular-classes
### Proposed solution
Expose a new property on `OutputEmitterRef`:
```ts
class OutputEmitterRef {
hasSubscribers: Signal;
}
```
The `OutputEmitterRef` would refcount internally with a signal, returning `true` from the `hasSubscribers` signal if the refcount is > 0.
### Alternatives considered
Without this feature, components can use inputs to decide whether to show UI elemen... [TRUNCATED]","area: core,gemini-triaged",2026-06-13T01:16:08Z,2026-06-13T06:26:35Z,1
angular/angular,4647263214,"Roadmap page (angular.dev/roadmap) appears stale, not updated since v22","### Describe the problem that you experienced
I noticed the [roadmap page](https://angular.dev/roadmap) may not have been updated in a little while, as the content still seems to reflect the v22 cycle.
The **""Available to experiment with""** section currently lists:
- Signal Forms
- Resource API
- httpResource
The **""Production ready""** section lists:
- Zoneless change detection
- Linked Signal API
- Incremental hydration
- Effect API
- Event replay with SSR
- Route-level render mode
Since v22, several of the ""experiment with"" items have graduated, but the page doesn't reflect their current status. It's unclear from the roadmap which of these have since stabilized, moved to production-ready, or changed, making the page misleading for developers checking what's safe to adopt.
### Enter the URL of the topic with the problem
https://angular.dev/roadmap","area: docs-infra,gemini-triaged",2026-06-12T07:24:43Z,2026-06-12T09:11:24Z,2
angular/angular,4646950049,OutputEmitterRef.emit() skips listeners when an earlier listener unsubscribes synchronously (e.g. outputToObservable + take(1)),"### Which @angular/* package(s) are the source of the bug?
core
### Is this a regression?
Yes
### Description
When two listeners are subscribed to the same signal-based `output()`, and the first listener unsubscribes itself synchronously while receiving an emitted value, the second listener is silently skipped — it never receives the event.
This is a regression compared to decorator-based `@Output()` / `EventEmitter`: the exact same code works correctly there, as it does in every comparable event system (DOM `EventTarget`, Node `EventEmitter`, RxJS `Subject`). A listener removing itself is never supposed to affect delivery to other listeners. Since `output()` is presented as a drop-in replacement for `@Output()`, this behavioral difference is subtle and very hard to debug — in our app it manifested as a template event binding that simply never fired, with nothing in the console pointing at the cause.
## Reproduction
https://stackblitz.com/edit/stackblitz-starters-scbzqgpg
A child component emits an output once:
```ts
@Component({ selector: 'app-child', /* ... */ })
export class ChildComponent implements OnInit {
ready = output();
ngOnInit() {
this.ready.emit('hello from child');
}
}
```
A directive on the same element consumes that output once, the idiomatic way:
```ts
@Directive({ selector: 'app-child[consumeOnce]' })
export class ConsumeOnceDirective {
private host = inject(ChildComponent);
constructor() {
out... [TRUNCATED]","area: core,state: has PR,bug",2026-06-12T06:34:32Z,2026-06-16T15:29:35Z,0
angular/angular,4637959398,CSS compilation issue for multi argument :host() selectors,"### Which @angular/* package(s) are the source of the bug?
compiler
### Is this a regression?
Yes
### Description
We started testing the new Angular 22 version and saw that in one of our applications some css styles were not applied correctly anymore.
There might be an issue with how multi-argument host selectors are rendered.
Example css style
```css
:host(ds-list-item, [ds-list-item], ds-menu-item, [ds-menu-item]) { ... }
```
In Angular 20 this got rendered into something like
```css
ds-list-item[_nghost-ng-c2697880216],
[ds-list-item][_nghost-ng-c2697880216],
ds-menu-item[_nghost-ng-c2697880216],
[ds-menu-item][_nghost-ng-c2697880216],
.ds-list-item[_ngcontent-ng-c2697880216] { ... }
```
Now within our tests with Angular 22 it got rendered into
```css
[_ngcontent-ng-c2697880216]:host(ds-list-item, [ds-list-item], ds-menu-item, [ds-menu-item]),
.ds-list-item[_ngcontent-ng-c2697880216] { ... }
```
The `:host()` arm uses `_ngcontent` — but the host element gets `_nghost`, not `_ngcontent`. The selector never matches, so all of our base styles are dead code.
### Please provide a link to a minimal reproduction of the bug
_No response_
### Please provide the exception or error you saw
```true
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
Angular CLI : 22.0.0
Angular : 22.0.0
Node.js : 24.15.0
Package Manager : npm 11.16.0
Operating System : linux x64
```
### Anything else?
_No respo... [TRUNCATED]","area: compiler,core: CSS encapsulation,gemini-triaged",2026-06-11T06:52:02Z,2026-06-11T15:44:01Z,2
angular/angular,4634483856,animate.leave skipped for the closing panel when switching panels in an exclusive accordion (sibling instances share a TNode),"> **TL;DR — it breaks an exclusive accordion.** In an accordion (or tab group / expandable nav menu) where opening one panel closes the currently-open one, clicking a different panel makes the open panel **disappear instantly instead of animating its `animate.leave` collapse**. The opening panel's `animate.enter` plays fine; only the *closing* panel is broken, and only when another opens in the same change-detection tick.
>
> It's **order-dependent**: it only breaks when the closing section comes *before* the opening one in DOM order. (Both sections update in one tick, in order — so the closing element is detached and tracked *first*, then the entering sibling cancels it.) Closing a *later* section while opening an *earlier* one animates fine, as does toggling a single section with nothing else opening. So in the repro, **clicking Section B while A is open is broken; clicking Section A while B is open animates correctly** — don't be fooled by trying the working direction.
>
> Why: the panels are separate instances of the **same** item component, so their animated elements share one `TNode`. `cancelLeavingNodes` (added in 21.2.0) sees the still-animating closing panel under that shared `TNode` in a different DOM parent, assumes it's a stale duplicate, and force-removes it.
>
> ▶️ **Repro — same code, side by side** (a two-section exclusive accordion; click **Section B** while **Section A** is open):
> - ❌ **Broken (Angular 21.2.x):** https://stackblitz.com/github/kaiguogit/ng-... [TRUNCATED]","area: core,core: animations,gemini-triaged",2026-06-10T19:51:32Z,2026-06-11T17:38:59Z,4
angular/angular,4628829238,Build system migration guide still says webpack-based build system is fully supported,"### Describe the problem that you experienced
The build system migration guide still says:
>The existing webpack-based build system is still considered stable and fully supported.
> Applications can continue to use the browser builder and projects can opt-out of migrating during an update.
This seems outdated or at least incomplete after the Angular v22 deprecations.
Angular CLI v22 deprecates the webpack-related builders and points users to `@angular/build` instead. Because of that, the current wording can be confusing: it suggests that the webpack-based build system is still a fully supported long-term option, while the CLI now emits deprecation warnings for this path.
https://github.com/angular/angular-cli/pull/33127/
### Enter the URL of the topic with the problem
https://angular.dev/tools/cli/build-system-migration
### Describe what you were looking for in the documentation
I heard that webpack support had been deprecated in Angular v22, so I was looking for the official migration guidance and current status of the webpack-based builders.
### Describe the actions that led you to experience the problem
_No response_
### Describe what you want to experience that would fix the problem
_No response_
### Add a screenshot if that helps illustrate the problem
_No response_
### If this problem caused an exception or error, please paste it here
```true
```
### If the problem is browser-specific, please specify the device, OS, browser, and version
```true
```
... [TRUNCATED]","area: docs,gemini-triaged",2026-06-10T06:57:46Z,2026-06-10T17:54:44Z,1
angular/angular,4628430039,Feedback: Search docs panel should reset the input box on reopen,"### Describe the problem that you experienced
When opening the search panel for a second time within the same session on angular.dev, the input field retains the previous search query. This requires users to manually delete the old text before they can type a new query, causing friction in the search experience.
### Enter the URL of the topic with the problem
https://angular.dev/
### Describe what you were looking for in the documentation
_No response_
### Describe the actions that led you to experience the problem
_No response_
### Describe what you want to experience that would fix the problem
When the search panel is reopened, the previous search text should be fully cleared out.
Alternatively, we can keep the text in selected state.
### Benefits of this Approach
* **Effortless Overwriting:** The user can instantly start typing to replace the old query.
* **Easy Modification:** If the user wants to refine their previous search instead, they can press the right arrow key to deselect the text and append new terms.
### Add a screenshot if that helps illustrate the problem
_No response_
### If this problem caused an exception or error, please paste it here
```true
```
### If the problem is browser-specific, please specify the device, OS, browser, and version
```true
```
### Provide any additional information here in as much as detail as you can
```true
```","area: docs-infra,gemini-triaged",2026-06-10T05:48:17Z,2026-06-10T09:14:48Z,2
angular/angular,4627592425,Workspace tsdk not used when it is a relative path in the workspace,"### Is this a bug report or a feature request?
- [x] Bug Report
- [ ] Feature Request
### Please provide the steps to reproduce the issue [Bug Report only]
When using the Visual Studio Code setting `js/ts.tsdk.path` (previously `typescript.tsdk`) to specify a TypeScript version, if that path is a relative path within the workspace, the Angular Language Service does not use the TypeScript version specified at that path, and instead uses its own bundled version. This was working in version 21.2.3, but no longer works in version 21.2.4, or version 22.0.0.
I created a reproduction repository to demonstrate the issue: [https://github.com/Sidnoea/als-vscode-bug](https://github.com/Sidnoea/als-vscode-bug)
In this repository, the TypeScript version is kept committed, and the path used is `.yarn/sdks/typescript/lib`, because this repository uses Yarn PnP. I do not believe this bug is related to Yarn PnP specifically, but I included it in the repository to demonstrate my use case, as this is how I ended up discovering the bug. In this case, the custom TypeScript version 5.7.3-sdk should be loaded, but instead, TypeScript version 5.9.3 is loaded. This then causes the Angular Language Service to fail.
I believe this bug may have been caused by #68862, which changed the locations that are searched when looking for TypeScript.
As a temporary workaround, I can use an absolute folder path instead of a relative folder path, which causes the specified TypeScript version to be loaded. Th... [TRUNCATED]","area: language-service,gemini-triaged",2026-06-10T03:10:27Z,2026-06-10T18:09:58Z,3
angular/angular,4626288930,Safe navigation migration does unnecessary changes,"### Which @angular/* package(s) are the source of the bug?
core
### Is this a regression?
Yes
### Description
`[condition]=""category?.category != null""` such code gets overwritten for no reason.
furthermore, another migration adds unnecessary suppressions to tsconfig files (nullishCoalescingNotNullable, optionalChainNotNullable) even when project is not using strict nullability at all.
### Please provide a link to a minimal reproduction of the bug
_No response_
### Please provide the exception or error you saw
```true
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
```
### Anything else?
_No response_",area: migrations,2026-06-09T22:58:30Z,2026-06-10T00:11:57Z,0
angular/angular,4623032010,`experimentalWebMcpTool` is responsible for invoking the model synchronously,"### Which @angular/* package(s) are the source of the bug?
forms
### Is this a regression?
No
### Description
If the model depends on a required `input`, the forms webmcp tool, is responsible for throwing `NG0950: Input ""id"" is required but no value is available yet.`
Repro:
```ts
describe('App', () => {
@Component({
selector: 'app-root',
template: ``,
})
class App {
id = input.required();
model = linkedSignal(() => ({id: this.id()}));
form = form(this.model, () => {}, {
experimentalWebMcpTool: {
description: 'foo',
name: 'foo',
},
});
}
it('should work', async () => {
TestBed.configureTestingModule({providers: [provideExperimentalWebMcpForms()]});
const fixture = TestBed.createComponent(App);
});
});
```
","area: forms,core: webmcp",2026-06-09T14:49:22Z,2026-06-10T17:14:43Z,0
angular/angular,4622767181,Youtube iframe on Angular v22 release page - broken,"### Describe the problem that you experienced
When I'm trying to load the Angular v22 release page - Youtube iframe looks broken.
MacOS, Firefox, 151.0.4 (aarch64).
https://github.com/user-attachments/assets/864632f4-639a-4952-9cda-b8ce92c59bd5
### Enter the URL of the topic with the problem
_No response_
### Describe what you were looking for in the documentation
_No response_
### Describe the actions that led you to experience the problem
_No response_
### Describe what you want to experience that would fix the problem
_No response_
### Add a screenshot if that helps illustrate the problem
_No response_
### If this problem caused an exception or error, please paste it here
```true
```
### If the problem is browser-specific, please specify the device, OS, browser, and version
```true
```
### Provide any additional information here in as much as detail as you can
```true
```","area: docs-infra,gemini-triaged",2026-06-09T14:14:55Z,2026-06-09T14:37:00Z,1
angular/angular,4622356548,"platformServer().onDestroy resets ngServerMode to undefined after every render, defeating the BootstrapContext guard introduced to fix GHSA-68x2-mx4q-78m7","### Which @angular/* package(s) are the source of the bug?
platform-server
### Is this a regression?
No
### Description
The fix for GHSA-68x2-mx4q-78m7 added a guard in `@angular/core` that throws `NG0401` (Missing Platform) when `bootstrapApplication()` is called server-side without a `BootstrapContext`. The guard checks `globalThis.ngServerMode`:
```javascript
// @angular/core/fesm2022/core.mjs ~line 2420
if (typeof ngServerMode !== 'undefined' && ngServerMode && !platformRef) {
throw new RuntimeError(-401, 'Missing Platform...');
}
```
The guard only fires when `ngServerMode === true`. The problem is that `platformServer()` in `@angular/platform-server` sets this flag to `true` at the start of a render but then resets it back to `undefined` inside an `onDestroy` callback when the platform is destroyed at the end of each render:
```javascript
// @angular/platform-server/fesm2022/_server-chunk.mjs lines 576-588
function platformServer(extraProviders) {
const noServerModeSet = typeof ngServerMode === 'undefined';
if (noServerModeSet) {
globalThis['ngServerMode'] = true;
}
const platform = createPlatformFactory(platformCore, 'server', INTERNAL_SERVER_PLATFORM_PROVIDERS)(extraProviders);
if (noServerModeSet) {
platform.onDestroy(() => {
globalThis['ngServerMode'] = undefined; // resets the guard flag after every render
});
}
return platform;
}
```
After any `renderApplication()` call completes (which internally calls `platformServer()... [TRUNCATED]","area: server,gemini-triaged",2026-06-09T13:23:47Z,2026-06-10T15:32:51Z,3
angular/angular,4620461234,Enum Default = 1 still has a comment that this is the default for v22,"### Describe the problem that you experienced
https://github.com/angular/angular/blob/e6ae250802ee1cb4cb321cad5fab0a9f0b2779dc/packages/core/src/change_detection/constants.ts#L37
constants.ts comment in line 37 says that `Default = 1` is the default. This contradicts the actual behavior that is already noted in line 25. That OnPush is the default
https://github.com/angular/angular/blob/e6ae250802ee1cb4cb321cad5fab0a9f0b2779dc/packages/core/src/change_detection/constants.ts#L25
### Enter the URL of the topic with the problem
_No response_
### Describe what you were looking for in the documentation
_No response_
### Describe the actions that led you to experience the problem
_No response_
### Describe what you want to experience that would fix the problem
_No response_
### Add a screenshot if that helps illustrate the problem
_No response_
### If this problem caused an exception or error, please paste it here
```true
```
### If the problem is browser-specific, please specify the device, OS, browser, and version
```true
```
### Provide any additional information here in as much as detail as you can
```true
```","area: core,gemini-triaged",2026-06-09T08:53:12Z,2026-06-09T20:10:01Z,0
angular/angular,4618740065,"Bug: AOT compilation slow, build times excessive","## Problem Statement
AOT slow:
- Build times long
- CI/CD slow
- Development blocked
**Business Impact:** Slow builds
**Technical Impact:** Compilation speed
## Root Cause Analysis
No optimization. Sequential compilation.
## Solution Overview
1. Parallel: parallel compilation
2. Caching: cache artifacts
3. Incremental: incremental builds
4. Optimization: optimize passes
5. Profiling: identify slow
## Type of Change
- Bug fix: Build performance
## Testing Done
- Build test: faster
- Cache test: works
- Incremental test: faster
## Related Issue
Relates to build time
## Suggested Labels
bug, build, performance, gssoc26","area: compiler,gemini-triaged",2026-06-09T04:12:42Z,2026-06-09T04:48:31Z,0
angular/angular,4618739996,Enhancement: Add better error messages and debugging tools,"## Problem Statement
Error messages unclear:
- Hard to debug
- No helpful info
- Frustration
**Business Impact:** Hard to debug
**Technical Impact:** Poor errors
## Root Cause Analysis
Minimal error info. Generic messages.
## Solution Overview
1. Messages: clear messages
2. Context: include context
3. Suggestions: suggest fixes
4. Debugging: debug tools
5. Documentation: link docs
## Type of Change
- Feature: Error handling
## Testing Done
- Message test: clear
- Context test: helpful
- Tool test: useful
## Related Issue
Relates to DX
## Suggested Labels
feature, error-handling, dx, gssoc26","area: core,gemini-triaged",2026-06-09T04:12:41Z,2026-06-09T04:48:10Z,0
angular/angular,4618739943,"Bug: Change detection runs too frequently, unnecessary checks","## Problem Statement
Change detection excessive:
- Runs too often
- Performance impact
- Unnecessary checks
**Business Impact:** Performance degradation
**Technical Impact:** CD algorithm
## Root Cause Analysis
CD triggers on all events. No optimization.
## Solution Overview
1. OnPush: promote OnPush
2. Optimization: optimize checks
3. Smart: smart detection
4. Profiling: identify runs
5. Testing: CD tests
## Type of Change
- Bug fix: Change detection
## Testing Done
- Detection test: fewer runs
- Performance test: improved
- Correctness test: correct
## Related Issue
Relates to performance
## Suggested Labels
bug, change-detection, performance, gssoc26","area: core,gemini-triaged",2026-06-09T04:12:40Z,2026-06-09T04:47:45Z,1
angular/angular,4618739896,Enhancement: Add better TypeScript strict mode support and type safety,"## Problem Statement
Strict mode incomplete:
- Type safety gaps
- Unsafe patterns allowed
- Limited strictness
**Business Impact:** Type safety issues
**Technical Impact:** Incomplete strict mode
## Root Cause Analysis
Not all strict rules enforced.
## Solution Overview
1. Strict: enable all strict
2. Rules: add rules
3. Linting: strict linting
4. Documentation: guide users
5. Migration: migration path
## Type of Change
- Enhancement: Type safety
## Testing Done
- Strict test: works
- Migration test: smooth
- Type test: safe
## Related Issue
Relates to safety
## Suggested Labels
feature, typescript, safety, gssoc26","area: dev-infra,gemini-triaged",2026-06-09T04:12:39Z,2026-06-09T04:48:52Z,0
angular/angular,4618739838,Bug: Dependency injection performance degrades with large modules,"## Problem Statement
DI slow with large apps:
- Module initialization slow
- Startup time increases
- Scalability issues
**Business Impact:** Slow app startup
**Technical Impact:** DI performance
## Root Cause Analysis
No optimization for large modules. Linear resolution.
## Solution Overview
1. Caching: cache resolutions
2. Optimization: optimize lookup
3. Lazy loading: defer loading
4. Profiling: identify bottlenecks
5. Testing: performance tests
## Type of Change
- Bug fix: Performance
## Testing Done
- Performance test: improved
- Scalability test: handles large
- Startup test: faster
## Related Issue
Relates to startup performance
## Suggested Labels
bug, performance, di, gssoc26","area: core,gemini-triaged",2026-06-09T04:12:38Z,2026-06-09T04:49:38Z,0
angular/angular,4616723704,v22 HTTP option `reportUploadProgress` does not work,"### Which @angular/* package(s) are the source of the bug?
common
### Is this a regression?
No (in the sense that the flag is new 🙃)
### Description
In Angular 22, the HTTP request option `reportProgress` is deprecated, and encourages you to switch to `reportUploadProgress` / `reportDownloadProgress` instead. However, it seems at least `reportUploadProgress` does not work. (I did not verify download progress.)
I can't get a StackBlitz project set up because their version of Node is slightly out of Angular's support window, so I've attached a project that shows the issue. `npm install` and `npm start`, then you can flip between the old and new flags and upload a file to test (it uploads to a dummy API, https://jsonplaceholder.typicode.com/). The old flag reports progress, but the new one does not.
[ng22-upload-progress.zip](https://github.com/user-attachments/files/28726416/ng22-upload-progress.zip)
### Please provide a link to a minimal reproduction of the bug
_No response_
### Please provide the exception or error you saw
```true
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
Angular CLI : 22.0.0
Angular : 22.0.0
Node.js : 24.16.0
Package Manager : npm 11.13.0
Operating System : win32 x64
┌───────────────────────────┬───────────────────┬───────────────────┐
│ Package │ Installed Version │ Requested Version │
├───────────────────────────┼───────────────────┼────────────... [TRUNCATED]","area: common/http,gemini-triaged",2026-06-08T21:20:30Z,2026-06-10T18:37:48Z,3
angular/angular,4612437879,Add `@server` and `@browser` template blocks for SSR-only and browser-only rendering,"### Which @angular/* package(s) are relevant/related to the feature request?
compiler
### Description
This is a feature request for first-class template-level control-flow blocks that render only on a specific platform:
```html
@server {
}
@browser {
}
```
The goal is to make SSR/browser-only rendering explicit in Angular templates and make this behavior hydration-aware.
Today this can be approximated with isPlatformBrowser, isPlatformServer, custom structural directives, or component-level guards. However, those solutions are verbose, easy to implement inconsistently, and do not provide a clear framework-level contract for hydration behavior.
Angular already has template control-flow syntax such as `@if`, `@for`, `@switch`, and `@defer`. SSR apps often need a similarly clear way to express platform-specific template branches.
#### Common use cases:
```html
@server {
}
@browser {
}
```
```html
@server {
}
@browser {
}
```
```html
@browser {
}
```
This would help with:
- rendering static/SEO-friendly content on the server;
- rendering browser-only widgets that depend on DOM APIs such as window, document, ResizeObs... [TRUNCATED]",area: compiler,2026-06-08T11:22:50Z,2026-06-08T11:54:58Z,2
angular/angular,4612423561,Will the LOCALE_DATA hardening fix be backported to Angular 20,"### Which @angular/* package(s) are the source of the bug?
core
### Is this a regression?
No
### Description
The change from
```typescript
let LOCALE_DATA: {[localeId: string]: any} = {};
```
to
```typescript
let LOCALE_DATA: {[localeId: string]: any} = Object.create(null);
```
was merged in https://github.com/angular/angular/pull/68917 and backported to [21.2.x](https://github.com/angular/angular/releases/tag/v21.2.16) and [22.0.x.](https://github.com/angular/angular/releases/tag/v22.0.0-rc.3) branches.
security scanners like aikido are flagging Angular 20.x as affected because the same code exists there. Currently, the suggested remediation is to migrate to v21
https://intel.aikido.dev/cve/AIKIDO-2026-11077
since v20 is LTS, is there a plan to include the changes to the 20.x branch as well?
Not really a bug. Posting this here because I was directed from Discord to ask on GitHub
### Please provide a link to a minimal reproduction of the bug
_No response_
### Please provide the exception or error you saw
```true
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
Angular 20.3.24
```
### Anything else?
_No response_","area: core,gemini-triaged",2026-06-08T11:20:31Z,2026-06-08T12:04:45Z,1
angular/angular,4612329406,Inlay Hints - Parameter name hints popping up in wrong places,"### Is this a bug report or a feature request?
- [x] Bug Report
- [ ] Feature Request
### Please provide the steps to reproduce the issue [Bug Report only]
When looking at some .ts files in our Angular application, parameter hints are wrongly placed within the code:
When setting the feature `Angular > Inlay Hints > Parameter Hints: Name Hints` to `none` the hints disappear:
I've so far only observed this in our production code, that i can't share here
### Please provide the expected behavior vs the actual behavior you encountered [Bug Report only]
_No response_
### Please provide a screenshot if possible [Bug Report only]
_No response_
### Please provide the exception or error you saw [Bug Report only]
```true
```
### Description [Feature Request only]
_No response_
### Proposed solution [Feature Request only]
_No response_
### Alternatives considered [Feature Request only]
_No response_","area: language-service,gemini-triaged",2026-06-08T11:06:27Z,2026-06-09T20:33:17Z,0
angular/angular,4611745927,Aria: context menu doesn't close on outside click unless hovered first,"### Describe the problem that you experienced
When I open the context menu by right-clicking inside the target area, clicking somewhere outside the menu doesn't close it, the menu stays open.
The only time clicking outside does close it is if I first move my mouse over the menu (hover on it), and then click outside. Without hovering first, outside clicks are ignored and the menu remains open.
I'd expect the context menu to close whenever I click outside of it, whether or not I hovered over it first.
### Enter the URL of the topic with the problem
https://angular.dev/guide/aria/menu
### Describe what you were looking for in the documentation
_No response_
### Describe the actions that led you to experience the problem
_No response_
### Describe what you want to experience that would fix the problem
_No response_
### Add a screenshot if that helps illustrate the problem
_No response_
### If this problem caused an exception or error, please paste it here
```true
```
### If the problem is browser-specific, please specify the device, OS, browser, and version
```true
```
### Provide any additional information here in as much as detail as you can
```true
```","area: docs,gemini-triaged",2026-06-08T09:44:00Z,2026-06-08T19:58:02Z,1
angular/angular,4610891825,"ng 22 update remove changeDetection: ChangeDetectionStrategy.OnPush,","### Command
update
### Description
when doing migration to ng 22 and component has `changeDetection: ChangeDetectionStrategy.OnPush,` could be be removed
### Describe the solution you'd like
a) basic update
b) or extra migration
### Describe alternatives you've considered
_No response_","area: migrations,gemini-triaged",2026-06-08T05:42:46Z,2026-06-08T18:23:45Z,3
angular/angular,4607191885,Items no longer rendering in template on mac OS,"### Which @angular/* package(s) are the source of the bug?
Don't known / other
### Is this a regression?
Yes
### Description
After upgrading from release 21.2.14 to 21.2.15 and now v22. I have an issue on my MacOS with items not rendering
in template I have :
**@for(product of products; track product.id_product) { ... }**
In the ts I have :
**.subscribe(
res => {
this.products = [...res];
}
)**
poducts is retruning data and not rendering in the template
It's working again when reverting to:
Angular CLI : 21.2.12
Angular : 21.2.14
Node.js : 24.16.0
Package Manager : npm 11.13.0
Operating System : darwin arm64
I have no issue on the production server
### Please provide a link to a minimal reproduction of the bug
_No response_
### Please provide the exception or error you saw
```true
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
```
### Anything else?
_No response_","area: core,gemini-triaged",2026-06-07T11:45:35Z,2026-06-07T12:13:47Z,2
angular/angular,4600957327,Feature Request: Permit Readonly arrays in `Provider`,"### Which @angular/* package(s) are relevant/related to the feature request?
`@angular/core`
### Description
Sometimes it's useful to have a shared set of providers that get imported together:
```ts
export const SERVICE_PROVIDERS = [
ServiceA,
ServiceB,
// ...
]
```
```ts
@Component({
// ...
providers: [SERVICE_PROVIDERS],
})
// ...
```
This pattern is subject to really confusing issues if someone does something like `SERVICE_PROVIDERS.push(...)`, so it would be better if I could use a type annotation to avoid mutating the array, i.e.:
```ts
export const SERVICE_PROVIDERS: readonly Provider[] = [
ServiceA,
ServiceB,
// ...
]
```
However, adding the annotation triggers a build-time error and requires an update to the component definition:
```ts
@Component({
// ...
providers: [...SERVICE_PROVIDERS],
})
// ...
```
This technically impacts runtime performance by duplicating the array at runtime (just to satisfy the type requirements at build time).
It is a pretty minor concern, but declaring that arrays passed as `Provider` are readonly both offers a small performance win _and_ provides a TS-based assurance that the provided array will not be mutated by the framework (which I sure hope is true!).
### Proposed solution
Update `Provider` type to accept `readonly any[]` instead of `any[]`:
https://github.com/angular/angular/blob/255151a41349c519728651739412dbd0f6138e13/packages/core/src/di/interface/provider.ts#L336-L343
I'm not sure if this might cau... [TRUNCATED]","area: core,gemini-triaged",2026-06-06T00:02:15Z,2026-06-08T10:03:03Z,2
angular/angular,4596521396,Defer feature not indexed or returned properly by Algolia,"### Describe the problem that you experienced
Using the embedded search in angular.dev and typing `defer` or `@defer` only return the Tutorials pages.
You have to know better and type at least 'deferre' to start getting Docs results.
### Enter the URL of the topic with the problem
_No response_
### Describe what you were looking for in the documentation
_No response_
### Describe the actions that led you to experience the problem
_No response_
### Describe what you want to experience that would fix the problem
_No response_
### Add a screenshot if that helps illustrate the problem
_No response_
### If this problem caused an exception or error, please paste it here
```true
```
### If the problem is browser-specific, please specify the device, OS, browser, and version
```true
```
### Provide any additional information here in as much as detail as you can
```true
```","area: docs-infra,gemini-triaged",2026-06-05T11:23:44Z,2026-06-08T10:21:57Z,4
angular/angular,4596373284,Cannot use Type Parameter for Component @Input property transformers,"### Which @angular/* package(s) are the source of the bug?
Don't known / other
### Is this a regression?
No
### Description
[](url)
This component won’t compile:
https://github.com/mwaibel-go/component-type-parameter-repro/blob/type-param-repro/src/app/widget.ts
```ts
@Component({
template: ``,
})
export class Widget {
@Input({
transform: (value: T) => value
}) data!: T
}
```
### Please provide a link to a minimal reproduction of the bug
https://github.com/mwaibel-go/component-type-parameter-repro/tree/type-param-repro
### Please provide the exception or error you saw
```true
Symbol must be exported in order to be used as the type of an Input transform function(-993001)
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
Angular CLI : 21.2.14
Angular : 21.2.16
Node.js : 24.13.0
Package Manager : npm 11.11.1
Operating System : linux x64
┌───────────────────────────┬───────────────────┬───────────────────┐
│ Package │ Installed Version │ Requested Version │
├───────────────────────────┼───────────────────┼───────────────────┤
│ @angular/build │ 21.2.14 │ ^21.2.14 │
│ @angular/cli │ 21.2.14 │ ^21.2.14 │
│ @angular/common │ 21.2.16 │ ^21.2.16 │
│ @angular/compiler │ 21.2.16 │ ^21.2.16 │
│ @angular/compiler-cli │ 21.2.16 │ ^21.2.16 ... [TRUNCATED]","area: compiler,gemini-triaged",2026-06-05T10:59:47Z,2026-06-05T12:44:09Z,2
angular/angular,4596130691,Signal Forms: applyWhen with else option,"### Which @angular/* package(s) are relevant/related to the feature request?
@angular/forms/signals
### Description
When a subform is based on another Selection we have to use disabled and applyWhen (see the next example). I found no other option for this use case.
So in this example the other decides for goal points. Then the pointsSchema (could be required counter or a min of 10) should be applied. If the user selects something else this should be disabled -> Validation will be disabled.
```
interface MyForm {
goal: {
decision: 'points' | 'cards';
}
points: {
counter: number;
}
}
export const mySchema =
schema((schema) => {
const decision = schema.goal.decision;
disabled(schema.points, {
when: ({ valueOf }) => valueOf(decision) !== 'points',
});
applyWhen(
schema.points,
({ valueOf }) => valueOf(decision) === 'points',
pointsSchema,
);
});
```
### Proposed solution
valueOf can be part of schema at the top or applyWhen should have an else part or can contain options (in this case to disable the schema)
### Alternatives considered
-","area: forms,needs: clarification,forms: signals",2026-06-05T10:17:07Z,2026-06-09T19:07:58Z,3
angular/angular,4595464276,Bug: [animate.enter] fires during SSR hydration on elements already present in server-rendered HTML,"### Which @angular/* package(s) are the source of the bug?
core
### Is this a regression?
No
### Description
When using Angular SSR, elements inside @if blocks that use the new [animate.enter] binding incorrectly trigger their enter animation during client-side hydration — even though those elements were already present and visible in the server-rendered HTML.
**Actual Behavior**
The enter-animation class is applied during hydration, causing a jarring flash/expand animation on every page load — even though the content was already visible from SSR. This makes [animate.enter] effectively unusable in any SSR + hydration context where the initial state is true.
**Expected Behavior**
Elements already present in the server-rendered DOM at hydration time should not trigger [animate.enter]. Enter animations should only fire when an element is genuinely inserted into the DOM as a result of a state change after hydration is complete.
### Please provide a link to a minimal reproduction of the bug
https://github.com/eneajaho/hydration-animate
### Please provide the exception or error you saw
```true
```
### Please provide the environment you discovered this bug in (run `ng version`)
```true
Latest Angular 22.
```
### Anything else?
_No response_","area: server,gemini-triaged",2026-06-05T08:24:07Z,2026-06-15T17:52:08Z,4
angular/angular,4595309613,NG0600 is missing from error enclyclopedia,"### Describe the problem that you experienced
NG0600 (Writing to signals is not allowed in a `computed`) is missing from https://angular.dev/errors
### Enter the URL of the topic with the problem
https://angular.dev/errors
### Describe what you were looking for in the documentation
_No response_
### Describe the actions that led you to experience the problem
_No response_
### Describe what you want to experience that would fix the problem
_No response_
### Add a screenshot if that helps illustrate the problem
_No response_
### If this problem caused an exception or error, please paste it here
```true
```
### If the problem is browser-specific, please specify the device, OS, browser, and version
```true
```
### Provide any additional information here in as much as detail as you can
```true
```","area: docs,gemini-triaged",2026-06-05T08:00:06Z,2026-06-05T08:53:40Z,2
angular/angular,4594626956,v22 Migration failed,"### Command
update
### Is this a regression?
- [ ] Yes, this behavior used to work in the previous version
### The previous version in which this bug was not present was
_No response_
### Description
Upgrading to angular 22, using `ng update @angular/core@22 @angular/cli@22`, I encounter an error when migrations start, which I have so far been unable to bypass.
> ❯ Adds `ChangeDetectionStrategy.Eager` to all components.
✖ Migration failed: Path ""app/app.ts"" does not exist.
See ""C:\Users\Doug\AppData\Local\Temp\ng-QzzQ4W\angular-errors.log"" for further details.
### Minimal Reproduction
This is reproducible since this is an open source repository. The branch is here:
https://github.com/factoriolab/factoriolab/tree/next
### Your Environment
```text
Angular CLI : 21.2.10
Angular : 21.2.12
Node.js : 24.16.0
Package Manager : npm 11.13.0
Operating System : win32 x64
┌───────────────────────────┬───────────────────┬───────────────────┐
│ Package │ Installed Version │ Requested Version │
├───────────────────────────┼───────────────────┼───────────────────┤
│ @angular/build │ 21.2.10 │ ^21.2.10 │
│ @angular/cdk │ 21.2.10 │ ^21.2.10 │
│ @angular/cli │ 21.2.10 │ ^21.2.10 │
│ @angular/common │ 21.2.12 │ ^21.2.12 │
│ @angular/compiler │ 21.2.12 │ ^21.2.12 │
│ @angular/compiler-... [TRUNCATED]",area: migrations,2026-06-05T04:19:02Z,2026-06-05T14:22:24Z,3
angular/angular,4592051214,Zoneless: initial paint of components can occur before bindings are applied to attributes,"### Which @angular/* package(s) are the source of the bug?
core
### Is this a regression?
No
### Description
When using `provideZonelessChangeDetection()`, Angular appears to paint newly navigated components before bindings have been applied. A subsequent update then applies the correct classes, attributes, and property bindings.
The resulting DOM state is correct, but because the browser has already painted the initial HTML, CSS transitions can be triggered from the unbound state to the bound state.
### Reproduction
1. Navigate between **Home** and **Other** (only happens when visiting a page after the first time).
The example contains three disabled buttons:
* One button is rendered as static HTML and behaves correctly.
* Two buttons derive their disabled state from Angular bindings and demonstrate the issue.
### Current behavior
During navigation (zoneless) all three buttons should set the disabled attribute from the very first frame they exist. However the two buttons using host bindings appear enabled, but slowly fade to the grey disabled appearance in lockstep.
### Expected behavior
Bindings, classes and attributes should be reflected in the DOM before the first visible paint of a newly rendered view. Elements that are logically disabled from their first frame should never visibly transition from an enabled appearance to a disabled appearance as a result of Angular applying initial bindings after paint.
### Please provide a link to a minimal reproduction ... [TRUNCATED]","area: core,core: change detection",2026-06-04T20:45:07Z,2026-06-05T06:21:38Z,4
angular/angular,4591805116,Security: dom_security_schema.ts URL list missing 12+ attribute pairs,"[attr.X] binding bypasses URL sanitizer for SVG use/image/feImage, media audio/source/track, video poster, legacy background attrs, img srcset. Related: CVE-2026-22610, CVE-2026-27970, CVE-2026-32635.",area: security,2026-06-04T20:05:39Z,2026-06-04T22:15:34Z,1
angular/angular,4591805021,Security: i18n attribute binding bypasses RESOURCE_URL sanitizer (incomplete CVE-2026-32635 fix),"TRUSTED_TYPES_SINKS missing base|href, link|href, frame|src. Compiler accepts i18n bindings on these while [href] binding throws NG0904.","area: security,gemini-triaged",2026-06-04T20:05:38Z,2026-06-04T21:22:49Z,1
angular/angular,4591204086,Broken v22 event link and duplicate-titled results in search,"### Describe the problem that you experienced
Two things happen when searching `v22` in search (shown in the video below).
1. The result for the v22 event page leads to a Page Not Found.
2. Several results all show the title ""Angular v22 is here!"" while each points to a different link.
https://github.com/user-attachments/assets/98cedbfc-2ca0-4afb-972a-ba32f346fe91","area: docs-infra,gemini-triaged",2026-06-04T18:28:03Z,2026-06-10T18:27:50Z,4
angular/angular,4587721380,feat: Stronger official support for critical ecosystem tooling during major Angular releases (eg angular-eslint),"### Which @angular/* package(s) are relevant/related to the feature request?
_No response_
### Description
I’d like to raise a recurring concern regarding ecosystem tooling alignment with Angular major releases, in particular tools like [angular-eslint](https://github.com/angular-eslint/angular-eslint).
With each Angular major release, some critical ecosystem packages (such as `angular-eslint`) tend to remain tied to the previous major version for a period of time before full compatibility is available.
This creates a temporary gap where:
- Angular is upgraded, but linting/tooling support lags behind;
- teams are forced to delay upgrades or run mismatched versions;
### Proposed solution
It would be very valuable if the Angular team could take a more active role in supporting and maintaining the **most critical** ecosystem tools, especially around major releases, directly contributing to or co-maintaining key tooling.
### Alternatives considered
nope
see https://github.com/angular-eslint/angular-eslint/issues/3052","area: dev-infra,gemini-triaged",2026-06-04T10:00:12Z,2026-06-04T12:10:04Z,2
angular/angular,4587209243,Angular Language Service should allow using workspace TypeScript version instead of forcing bundled TS 6,"### Is this a bug report or a feature request?
- [ ] Bug Report
- [x] Feature Request
### Please provide the steps to reproduce the issue [Bug Report only]
_No response_
### Please provide the expected behavior vs the actual behavior you encountered [Bug Report only]
_No response_
### Please provide a screenshot if possible [Bug Report only]
_No response_
### Please provide the exception or error you saw [Bug Report only]
```true
```
### Description [Feature Request only]
## Description
After upgrading Angular Language Service to v22.0.0, the extension now bundles and forces TypeScript 6.0, ignoring the workspace TypeScript version configured in VSCode (`typescript.tsdk`).
This breaks compatibility with older Angular projects (e.g. Angular 14), which depend on specific TypeScript versions (e.g. 4.7.4).
Previously, the extension respected the workspace TypeScript version.
### Proposed solution [Feature Request only]
## Expected behavior
Angular Language Service should:
- Allow using the workspace TypeScript version (like the built-in TS/JS extension)
- Respect `typescript.tsdk` setting
- Or provide a setting to select:
- Bundled TypeScript
- Workspace TypeScript
---
## Actual behavior
- Extension always uses bundled TypeScript 6.0
- Ignores workspace TypeScript (even when `typescript.tsdk` is set)
- Causes type errors in older Angular versions that were not present before
### Alternatives considered [Feature Request only]
_No response_","area: language-service,gemini-triaged",2026-06-04T08:41:04Z,2026-06-05T17:43:07Z,3
angular/angular,4582535596,releases.md support table does not yet list v22,"### Describe the problem that you experienced
I noticed the ""Actively supported versions"" table in `adev/src/content/reference/releases.md` still tops out at v21:
| Version | Status | Released | Active ends | LTS ends |
| ------- | ------ | ---------- | ----------- | ---------- |
| ^21.0.0 | Active | 2025-11-19 | 2026-05-19 | 2027-05-19 |
| ^20.0.0 | LTS | 2025-05-28 | 2025-11-19 | 2026-11-28 |
There's no `^22.0.0` row yet, and v21 still shows as Active. I see `versions.json` and `reference/versions.md` already mention v22, so I wasn't sure if this table is updated on a different cadence or just hasn't been refreshed yet.
Totally fine if it's already on your list, just wanted to flag it in case it helps.
Congrats on the v22 release, and thanks for all the work that goes into each one!","area: docs,gemini-triaged",2026-06-03T18:20:55Z,2026-06-03T20:56:21Z,1
angular/angular,4581646589,Outdated Version Banner on Documentation Site,"### Which @angular/* package(s) are the source of the bug?
Don't known / other
### Is this a regression?
No
### Description
The documentation header displays an outdated announcement banner (""Angular v21 is here!"") while the user is explicitly viewing the v22 version of the documentation.
Steps to Reproduce:
1- Navigate to the Angular documentation website.
2- Ensure the version selector in the sidebar/navigation is set to v22.
3- Observe the announcement banner at the top of the main content area.
Expected Behavior:
The banner should reflect the current major release context. If the user is on the v22 documentation, the banner should either:
- Welcome them to v22.
- Highlight v22 features.
- Be hidden if there is no current announcement for v22.
Suggested Fix: Update the banner component's conditional rendering or content source to dynamically check the active documentation version, ensuring outdated release announcements are suppressed or updated when a newer major version is selected.
### Please provide a link to a minimal reproduction of the bug
https://angular.dev/
### Please provide the exception or error you saw
```true
Actual Behavior
The banner incorrectly promotes the previous version:
""Angular v21 is here! 🕹️ Start your adventure""
Visual Evidence
Version Dropdown: Displays v22
Banner Text: Displays Angular v21 is here!
... [TRUNCATED]","area: docs-infra,gemini-triaged",2026-06-03T16:15:53Z,2026-06-03T16:18:47Z,1
angular/angular,4570204570,Colocating ControlValueAccessor and FormCheckboxControl does not seem to work,"### Which @angular/* package(s) are the source of the bug?
forms
### Is this a regression?
No
### Description
When creating a component that supports both reactive forms and signals, Trying to update the form signal fails. Removing all content about form controls then seem to work without issues.
Here is the downloaded artifact from the angular.dev playground with all files required
[playground_0-hello-world.zip](https://github.com/user-attachments/files/28502332/playground_0-hello-world.zip)
Otherwise, just write this file [at playground](https://angular.dev/playground?templateId=0-hello-world) :
```typescript
import { bootstrapApplication } from '@angular/platform-browser';
import {
afterNextRender,
ChangeDetectionStrategy,
Component,
DestroyRef,
inject,
linkedSignal,
model,
signal
} from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { FormCheckboxControl, form, FormField } from '@angular/forms/signals';
@Component({
selector: 'tds-toggle',
imports: [],
template: `
`,
styles: `
:host {
--tds-toggle-inner-width: 2.25rem;
--tds-toggle-inner-height: 0.75rem;
--tds-toggle-thumb-size: 1.25rem;
--tds-toggle-inner-color: grey;
height: var(--tds-toggle-thumb-size);
width: calc(var(--tds-toggle-inner-width) + (v... [TRUNCATED]","area: forms,gemini-triaged",2026-06-02T09:30:06Z,2026-06-04T14:31:51Z,6
angular/angular,4561892210,Consistent 'when' availability on build-in Signal Forms validators,"### Which @angular/* package(s) are relevant/related to the feature request?
_No response_
### Description
Currently, only the `required` validator has a `when`property.
For other ones, we have to rely on `applyWhen` to do about the same.
Is there a reason for `required`having this specific behavior?
### Proposed solution
Having `when` exposed to all built-in validators would enhance the dev experience and make its usage consistent.
### Alternatives considered
Remove on `required` :D","area: forms,gemini-triaged",2026-06-01T09:24:01Z,2026-06-01T09:27:56Z,0
angular/angular,4561102136,"isDevMode() is still true, after calling enableProdMode()","### Which @angular/* package(s) are the source of the bug?
core
### Is this a regression?
Yes
### Description
After updating Angular from **21.1.2** to **21.2.13** `isDevMode()` stopped working properly. In my code I'm calling `enableProdMode()`. After this I expect `isDevMode()` to return false. It does this in Angular **21.1.2**, but in **21.2.13** it returns true.
### Please provide a link to a minimal reproduction of the bug
_No response_
### Please provide the exception or error you saw
There is now error, its just not working.
### Please provide the environment you discovered this bug in (run `ng version`)
```true
Angular CLI : 21.2.11
Angular : 21.2.13
Node.js : 24.15.0
Package Manager : npm 11.12.1
Operating System : win32 x64
┌───────────────────────────────────┬───────────────────┬───────────────────┐
│ Package │ Installed Version │ Requested Version │
├───────────────────────────────────┼───────────────────┼───────────────────┤
│ @angular/animations │ 21.2.13 │ 21.2.13 │
│ @angular/build │ 21.2.11 │ ^21.2.11 │
│ @angular/cdk │ 21.2.11 │ 21.2.11 │
│ @angular/cli │ 21.2.11 │ 21.2.11 │
│ @angular/common │ 21.2.13 │ 21.2.13 │
│ @angular/compiler │ 21.2.13 │ 21.2.13 │
│ @angular/c... [TRUNCATED]","needs reproduction,area: core",2026-06-01T07:14:01Z,2026-06-04T14:31:20Z,8
angular/angular,4559688240,Scroll root on body causes 8 px gutter flicker (safari),"### Describe the problem that you experienced
### Problem
On Safari (desktop - tested on OS 26) - The original shell sets overflow: hidden on body to lock scroll when the mobile nav opens. This removes the scrollbar, causing an 8 px layout shift as the scrollbar gutter disappears. This instantly changes the viewport width, which:
- Triggers CSS media query breakpoint changes mid-animation
- Causes content to reflow and jump
- Is especially severe on Safari, where body is the scroll root by default
Here are 2 images to show the bug:
Note the top image gives one width, when enabling the menu and hiding the scrollbar, the second shows the new width which triggers the 700px media query with a new reported width.
### Enter the URL of the topic with the problem
https://angular.dev
### Describe what you were looking for in the documentation
_No response_
### Describe the actions that led you to experience the problem
I was testing another bug when setting to 700px exactly would expose a previous media query collision.
### Describe what you want to experience that would fix the problem
Move the scroll root from body to html by setting overflow-y: scroll on the html element. The persistent overflow-y: scroll keeps th... [TRUNCATED]","open for contributions,area: docs-infra",2026-06-01T01:26:49Z,2026-06-12T16:19:35Z,4
angular/angular,4557298337,Question about contributing,Hi from DEATHLEGION Sri Lanka! Great project. I would like to contribute. Is there a good first issue label available? Thank you!,"area: docs,gemini-triaged",2026-05-31T10:45:56Z,2026-05-31T21:32:00Z,4
angular/angular,4552759496,at exactly 700px the navigation structure breaks in _media-queries.scss,"### Describe the problem that you experienced
At 699px or 701px, the navigation behaves correctly. The issue happens specifically at exactly 700px, where the CSS media queries and TypeScript breakpoint logic appear to collide.
The problem is tied to the expanded/open navigation state at the 700px breakpoint.
The current 0.01px gap approach in the media queries is fragile at exact pixel boundaries. At exactly 700px, some browsers may evaluate min-width: calc(700px + 0.01px) as matching while max-width: 700px is also still active. This can cause both the phone and tablet rules to apply at the same time.
When the nav is open at exactly 700px, the two layout states conflict:
Phone rules: max-width: 700px
Primary nav becomes a position: absolute sidebar sliding in from the left.
Secondary nav host shifts over by 82px.
Tablet rules: min-width: 700.01px
Primary nav becomes a horizontal row.
Secondary nav becomes a fixed sidebar positioned at left: 0.
The fix is to replace the 0.01px breakpoint gaps with a clean 1px boundary. In other words, keep the phone rules at max-width: 700px, and start the tablet rules at min-width: 701px.
This removes the exact-pixel overlap and prevents both expanded navigation states from being applied simultaneously.
### Enter the URL of the topic with the problem
_No response_
### Describe what you were looking for in the documentation
_No response_
### Describe the actions that led you to experience the problem
_No response_
### Describe wh... [TRUNCATED]","area: core,gemini-triaged",2026-05-30T01:41:26Z,2026-06-01T01:16:09Z,0
angular/angular,4547482971,wrong link in roadmap page,"### Describe the problem that you experienced
in roadmap page, when i click the Improve debugging with better Angular error messages card i get page not found
https://angular.dev/roadmap
### Enter the URL of the topic with the problem
_No response_
### Describe what you were looking for in the documentation
_No response_
### Describe the actions that led you to experience the problem
_No response_
### Describe what you want to experience that would fix the problem
_No response_
### Add a screenshot if that helps illustrate the problem
_No response_
### If this problem caused an exception or error, please paste it here
```true
```
### If the problem is browser-specific, please specify the device, OS, browser, and version
```true
```
### Provide any additional information here in as much as detail as you can
```true
```","area: docs-infra,gemini-triaged",2026-05-29T09:50:14Z,2026-06-01T10:17:00Z,0
angular/angular,4543831202,`.hasMetadata(...)` is not found in FieldState object,"### Describe the problem that you experienced
In [this page](https://angular.dev/guide/forms/signals/field-metadata#reading-metadata-from-a-field) is explained how to use the `hasMetadata`, but when I navigate to the [FieldState](https://angular.dev/api/forms/signals/FieldState) documentation, the `hasMetadata()` method is not there.
Also, using the last stable version `21.2.15`, I can't find this method too:
the `ng version` output:
npx ng version
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI : 21.2.13
Angular : 21.2.15
Node.js : 22.19.0
Package Manager : npm 10.9.3
Operating System : linux x64
┌───────────────────────────┬───────────────────┬───────────────────┐
│ Package │ Installed Version │ Requested Version │
├───────────────────────────┼───────────────────┼───────────────────┤
│ @angular/build │ 21.2.13 │ ^21.1.4 │
│ @angular/cli │ 21.2.13 │ ^21.1.4 │
│ @angular/common │ 21.2.15 │ ^21.1.0 │
│ @angu... [TRUNCATED]","open for contributions,gemini-triaged",2026-05-28T21:07:27Z,2026-06-01T09:57:10Z,2
angular/angular,4541124000,WKWebView / iOS Safari crash (“A problem repeatedly occurred”) on Angular 18 SSR application loading/boot,"### Which @angular/* package(s) are the source of the bug?
Don't known / other
### Is this a regression?
No
### Description
We are running a production Angular 18 application with Server-Side Rendering (SSR) and Client Hydration enabled. It works flawlessly across most desktop and Android browsers.
However, on a subset of iPhone devices (specifically running within an iOS app’s embedded WKWebView / Facebook browser, and occasionally on standalone iOS Safari), the application crashes immediately upon loading.
The browser completely stops executing and shows the default iOS error page:
Observed Behavior
The server-rendered page is successfully retrieved and renders briefly (for a fraction of a second).
As soon as the client bundle loads, bootstraps, and begins hydration/initialization, the entire WebView/browser engine crashes.
The crash is not tied to one specific page; it happens both on the homepage (after login) and on static routes like /forgot-password.
Console logging via remote debugging (Safari Web Inspector) is extremely difficult to capture because the browser engine crashes completely before logs can be flushed.
Sanitized Project Configuration and Code
To help diagnose, here is our boot and runtime setup:
1. Angular Application Configuration (app.config.ts)
We use standalone API with provideClientHydration() and routing configurations.
typescriptimport { APP_INITIALIZER, ApplicationConfig, ErrorHandler, provideZoneChangeDetection } from '@angular/core... [TRUNCATED]","needs reproduction,area: server,gemini-triaged",2026-05-28T14:17:37Z,2026-05-30T20:21:46Z,2
angular/angular,4541038448,Infinite change detection silently hangs the app instead of throwing NG0103,"### Which @angular/* package(s) are the source of the bug?
core
### Is this a regression?
No
### Description
With a zone-based change detection, this loops change detection indefinitely:
```ts
@Component({
selector: 'app-child',
template: `Numbers: {{ numbers() }}
`,
})
export class Child {
numbers = input.required();
constructor() {
effect(() => {
console.log(this.numbers());
// Async tick
setTimeout(() => {});
});
}
}
@Component({
selector: 'app-root',
imports: [Child],
template: ` `,
})
export class App {
private numbers = [0, 1, 2, 3, 4, 5];
// New array reference on every read
get numbersBiggerThan2(): number[] {
return this.numbers.filter((n) => n > 2);
}
}
```
Such a bug is quite hard to debug, in bigger apps it can cause a browser tab to hang. It'd be great if this could be detected during the compilation or on a dev server. NG0103 error seems related.
### Minimal reproduction repo:
https://github.com/lukasmatta/angular-cd-infinite-loop
Version:
```true
Angular: 21.2.14
```
","area: core,gemini-triaged",2026-05-28T14:06:13Z,2026-05-28T14:29:55Z,1
angular/angular,4538859063,Defs tags inside svg are stripped after updating to Angular v20.3.22,"### Which @angular/* package(s) are the source of the bug?
compiler
### Is this a regression?
No
### Description
After updating my application to the latest v20 version (v20.3.22). I see that the icons inside my application are not rendered correctly anymore.
While debugging I see that the style tag inside are gone.
This is the actual svg that is implemented in my application's code:
```html