<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gergely Szerovay</title>
    <description>The latest articles on DEV Community by Gergely Szerovay (@gergelyszerovay).</description>
    <link>https://dev.to/gergelyszerovay</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F924008%2Fee536e95-d267-49e6-9cd7-17f44c53108b.jpeg</url>
      <title>DEV Community: Gergely Szerovay</title>
      <link>https://dev.to/gergelyszerovay</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gergelyszerovay"/>
    <language>en</language>
    <item>
      <title>Angular Addicts #47: Angular 21.2, Skills, Signal Forms &amp; more</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Tue, 17 Mar 2026 08:53:47 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/angular-addicts-47-angular-212-skills-signal-forms-more-14jm</link>
      <guid>https://dev.to/playfulprogramming-angular/angular-addicts-47-angular-212-skills-signal-forms-more-14jm</guid>
      <description>&lt;h2&gt;
  
  
  👋Hey fellow Angular Addict
&lt;/h2&gt;

&lt;p&gt;This is the 47th issue of the Angular Addicts Newsletter, a monthly collection of carefully selected Angular resources that caught my attention. (Here are the &lt;a href="https://www.angularaddicts.com/p/angular-addicts-46-skills-signal-forms" rel="noopener noreferrer"&gt;46th&lt;/a&gt;, &lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;45th&lt;/a&gt; and &lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;44th&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  📢 Release announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.ninja-squad.com/2026/02/26/what-is-new-angular-21.2" rel="noopener noreferrer"&gt;What's new in Angular 21.2?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/cedric_exbrayat" rel="noopener noreferrer"&gt;Cédric Exbrayat&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 Angular AI skills, tools and development
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://angular.love/agent-skills-in-claude-a-practical-guide-for-angular-developers" rel="noopener noreferrer"&gt;Agent Skills in Claude – A Practical Guide for Angular Developers&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/m_stefanczyk" rel="noopener noreferrer"&gt;Mateusz Stefańczyk&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angulararchitects.io/en/blog/dynamic-reports-natural-lanaguage-queries-with-on-the-fly-code-generation/" rel="noopener noreferrer"&gt;Dynamic Reports: Natural Language Queries with On-the-Fly Code Generation&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/ManfredSteyer" rel="noopener noreferrer"&gt;Manfred Steyer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.mgechev.com/2026/02/26/skill-eval/" rel="noopener noreferrer"&gt;Unit Tests for AI Agent Skills&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/mgechev" rel="noopener noreferrer"&gt;Minko Gechev&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/ngconf/angular-best-practices-for-ai-701bafdcda44" rel="noopener noreferrer"&gt;Angular Best Practices for AI&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/alfrodo_perez" rel="noopener noreferrer"&gt;Alfredo Perez&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💎Angular Gems of February, 2026
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://angularexperts.ch/blog/signal-forms-essentials" rel="noopener noreferrer"&gt;Angular Signal Forms Essentials&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/nivekcode" rel="noopener noreferrer"&gt;Kevin Kreuzer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://push-based.io/article/goodbye-controlvalueaccessor-hello-signals" rel="noopener noreferrer"&gt;Goodbye ControlValueAccessor, Hello Signals-powered FormValueControl!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/Enea_Jahollari" rel="noopener noreferrer"&gt;Enea Jahollari&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/@borzifrancesco/how-to-migrate-your-angular-app-to-zoneless-9f9350040e19" rel="noopener noreferrer"&gt;How to migrate your Angular app to Zoneless&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/francesco-borzi/" rel="noopener noreferrer"&gt;Francesco Borzì&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/ujja/sunsetting-legacy-angular-how-were-migrating-to-nextjs-graphql-and-a-monorepo-without-a-big-1295"&gt;How We’re Surviving 600+ Legacy Angular Components While Migrating to Next.js, GraphQL, and a Monorepo&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://github.com/ujjavala" rel="noopener noreferrer"&gt;ujja&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angular.dev/security-advisory-addressing-recent-vulnerabilities-in-angular-c2656249b799" rel="noopener noreferrer"&gt;Security Advisory: Addressing Recent Vulnerabilities in Angular&lt;/a&gt;
&lt;/h3&gt;




&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

&lt;h2&gt;
  
  
  🕹️Previous issues
&lt;/h2&gt;

&lt;p&gt;If you missed the previous issues of the newsletter, you can read them &lt;a href="https://www.angularaddicts.com/t/angular-addicts-monthly" rel="noopener noreferrer"&gt;here&lt;/a&gt;, these are the latest 3 issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-46-skills-signal-forms" rel="noopener noreferrer"&gt;Angular Addicts #46: Angular 21.1, Skills, Signal Forms &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;Angular Addicts #45: Signal Form guides, AI integrations &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;Angular Addicts #44: Angular 21, Signal Forms, Vitest, Chat assistant integration &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📨 Submit your Angular resource
&lt;/h2&gt;

&lt;p&gt;Have you found or written an interesting Angular-related article, tweet or other resource lately? Please let me know here in the comments or send me a DM on &lt;a href="https://twitter.com/gergelyszerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! I might feature it in the next Angular Addicts issue!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Angular Addicts #46: Angular 21.1, Skills, Signal Forms &amp; more</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Tue, 10 Feb 2026 08:12:31 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/angular-addicts-46-angular-211-skills-signal-forms-more-7bf</link>
      <guid>https://dev.to/playfulprogramming/angular-addicts-46-angular-211-skills-signal-forms-more-7bf</guid>
      <description>&lt;h2&gt;
  
  
  👋Hey fellow Angular Addict
&lt;/h2&gt;

&lt;p&gt;This is the 46th issue of the Angular Addicts Newsletter, a monthly collection of carefully selected Angular resources that caught my attention. (Here are the &lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;45th&lt;/a&gt;, &lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;44th&lt;/a&gt; and &lt;a href="https://www.angularaddicts.com/p/angular-addicts-43-vitest-signal-forms-animations" rel="noopener noreferrer"&gt;43rd&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  📢 Release announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.ninja-squad.com/2026/01/15/what-is-new-angular-21.1" rel="noopener noreferrer"&gt;What's new in Angular 21.1?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/cedric_exbrayat" rel="noopener noreferrer"&gt;Cédric Exbrayat&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💎Angular Gems of January, 2026
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/brandontroberts/angular-skills-agent-skills-for-ai-assisted-development-3jgg"&gt;Angular Skills: Agent Skills for AI-Assisted Development&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/brandontroberts" rel="noopener noreferrer"&gt;Brandon Roberts&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://angularexperts.ch/blog/signal-forms-config" rel="noopener noreferrer"&gt;Angular Signal Forms Config&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/nivekcode" rel="noopener noreferrer"&gt;Kevin Kreuzer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/netanelbasal/formvaluecontrol-deep-dive-into-angular-signal-forms-custom-controls-af68ce33df37" rel="noopener noreferrer"&gt;FormValueControl: Deep Dive into Angular Signal Forms Custom Controls&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/NetanelBasal" rel="noopener noreferrer"&gt;Netanel Basal&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://push-based.io/article/angular-aria-building-web-accessibility-beyond-compliance" rel="noopener noreferrer"&gt;Accessibility-First Angular with Angular Aria Combobox&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AdrianRoOmanski" rel="noopener noreferrer"&gt;Adrian Romanski&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angularspace.com/gemini-and-angular-part-ii-creating-generative-uis/" rel="noopener noreferrer"&gt;Gemini and Angular, Part II: Creating Generative UIs&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/Armandotrue" rel="noopener noreferrer"&gt;Armen Vardanyan&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://nx.dev/blog/setup-tailwind-4-angular-nx-workspace" rel="noopener noreferrer"&gt;Configure Tailwind v4 with Angular in an Nx Monorepo&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/juristr" rel="noopener noreferrer"&gt;Juri Strumpflohner&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/krivanek06/angular-matpaginator-custom-styling-dkb"&gt;Angular: MatPaginator Custom Styling&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/eduard-krivanek/" rel="noopener noreferrer"&gt;Eduard Krivanek&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/ngconf/introducing-ngx-dev-toolbar-53ec52cfd973" rel="noopener noreferrer"&gt;Introducing Angular Toolbar&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/alfrodo_perez" rel="noopener noreferrer"&gt;Alfredo Perez&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/ngmaterialdev/implement-enterexit-animations-with-angular-cdk-overlay-pd3"&gt;Implement Enter/Exit Animations with Angular CDK Overlay&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/shhdharmen" rel="noopener noreferrer"&gt;Dharmen Shah&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

&lt;h2&gt;
  
  
  🕹️Previous issues
&lt;/h2&gt;

&lt;p&gt;If you missed the previous issues of the newsletter, you can read them &lt;a href="https://www.angularaddicts.com/t/angular-addicts-monthly" rel="noopener noreferrer"&gt;here&lt;/a&gt;, these are the latest 3 issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;Angular Addicts #45: Signal Form guides, AI integrations &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;Angular Addicts #44: Angular 21, Signal Forms, Vitest, Chat assistant integration &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-43-vitest-signal-forms-animations" rel="noopener noreferrer"&gt;Angular Addicts #43: Vitest, Signal Forms, Animations &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📨 Submit your Angular resource
&lt;/h2&gt;

&lt;p&gt;Have you found or written an interesting Angular-related article, tweet or other resource lately? Please let me know here in the comments or send me a DM on &lt;a href="https://twitter.com/gergelyszerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! I might feature it in the next Angular Addicts issue!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Angular Addicts #45: Signal Form guides, AI integrations &amp; more</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Tue, 13 Jan 2026 08:05:19 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/angular-addicts-45-signal-form-guides-ai-integrations-more-2ka9</link>
      <guid>https://dev.to/playfulprogramming-angular/angular-addicts-45-signal-form-guides-ai-integrations-more-2ka9</guid>
      <description>&lt;h2&gt;
  
  
  👋Hey fellow Angular Addict
&lt;/h2&gt;

&lt;p&gt;This is the 45th issue of the Angular Addicts Newsletter, a monthly collection of carefully selected Angular resources that caught my attention. (Here are the &lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;44th&lt;/a&gt;, &lt;a href="https://www.angularaddicts.com/p/angular-addicts-43-vitest-signal-forms-animations" rel="noopener noreferrer"&gt;43rd&lt;/a&gt; and &lt;a href="https://www.angularaddicts.com/p/angular-addicts-42-signal-forms-api-ai-powered-apps" rel="noopener noreferrer"&gt;42nd&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  📢 Release announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📢 &lt;a href="https://dev.to/ngrx/announcing-ngrx-21-celebrating-a-10-year-journey-with-a-fresh-new-look-and-ngrxsignalsevents-5ekp"&gt;Announcing NgRx 21: Celebrating a 10 Year Journey with a fresh new look and @ngrx/signals/events&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/tim_deschryver" rel="noopener noreferrer"&gt;Tim Deschryver&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📢 &lt;a href="https://nx.dev/blog/nx-22-3-release" rel="noopener noreferrer"&gt;Nx 22.3 Release: Angular 21 Support, tsgo Compiler, and Prettier v3&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/philip-fulcher/" rel="noopener noreferrer"&gt;Philip Fulcher&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📢 &lt;a href="https://primeng.org/migration/v21" rel="noopener noreferrer"&gt;Migration guide to PrimeNG v21&lt;/a&gt;
&lt;/h3&gt;

&lt;h2&gt;
  
  
  🤖 AI &amp;amp; Angular
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🤖 &lt;a href="https://dev.to/brandontroberts/building-an-angular-compiler-with-google-gemini-ie0"&gt;Building an Angular Compiler using AI with Google Gemini&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/brandontroberts" rel="noopener noreferrer"&gt;Brandon Roberts&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 &lt;a href="https://www.angulararchitects.io/en/blog/generative-ui-for-ai-assistants-component-control-and-structured-output-with-hashbrown/" rel="noopener noreferrer"&gt;Generative UI for AI Assistants: Component Control with Hashbrown&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/ManfredSteyer" rel="noopener noreferrer"&gt;Manfred Steyer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 &lt;a href="https://dev.to/railsstudent/building-an-ai-powered-alt-text-generator-with-angular-firebase-ai-logic-and-gemini-3-b8k"&gt;Building an AI-Powered Alt Text Generator with Angular, Firebase AI Logic, and Gemini 3&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/connieleung404" rel="noopener noreferrer"&gt;Connie Leung&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 &lt;a href="https://blog.angulartraining.com/using-ai-with-angular-2025-update-5ab4b629e331" rel="noopener noreferrer"&gt;Using AI with Angular — 2025 update&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AlainChautard" rel="noopener noreferrer"&gt;Alain Chautard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 &lt;a href="https://dev.to/railsstudent/streaming-ai-speech-with-gemini-25-flash-tts-angular-v21-and-firebase-1odm"&gt;Streaming AI Speech with Gemini 2.5 Flash TTS, Angular, and Firebase&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/connieleung404" rel="noopener noreferrer"&gt;Connie Leung&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Signal Forms
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📋 &lt;a href="https://signal-forms.guide/" rel="noopener noreferrer"&gt;Signal Forms Guide&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/stefanoslignos/" rel="noopener noreferrer"&gt;Stefanos Lignos&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📋 &lt;a href="https://angular.love/signal-forms-in-angular-21-complete-guide" rel="noopener noreferrer"&gt;Signal Forms in Angular 21 - Complete Guide&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/m_stefanczyk" rel="noopener noreferrer"&gt;Mateusz Stefańczyk&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💎 Angular Gems of December, 2025
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/@piyalidas.it/angular-signals-that-will-replace-half-your-rxjs-code-in-2025-aeca15205103" rel="noopener noreferrer"&gt;Angular Signals That Will Replace Half Your RxJS Code in 2025&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/piyalidas10/" rel="noopener noreferrer"&gt;Piyali Das&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://javascript.plainenglish.io/9-architecture-mistakes-that-quietly-kill-large-angular-codebases-and-how-ddd-fixes-them-2b7fe04bcbb1" rel="noopener noreferrer"&gt;9 Architecture Mistakes That Quietly Kill Large Angular Codebases (And How DDD Fixes Them)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/modelski_karol" rel="noopener noreferrer"&gt;Karol Modelski&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/coreteq/angular-pipes-time-to-rethink-f616ec84fb8d" rel="noopener noreferrer"&gt;Angular pipes: Time to rethink&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/vs_borodin" rel="noopener noreferrer"&gt;Vyacheslav Borodin&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://edbzn.dev/cross-framework-i18n-with-angular-localize-and-nx/" rel="noopener noreferrer"&gt;Framework-agnostic internationalization with Angular's localize tools and Nx&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/edbzn" rel="noopener noreferrer"&gt;Edouard Bozon&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/netanelbasal/the-magic-of-deepsignal-how-angular-signal-forms-enable-true-nested-reactivity-6b9e0d73eb9d" rel="noopener noreferrer"&gt;The Magic of deepSignal: How Angular Signal Forms Enable True Nested Reactivity&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/NetanelBasal" rel="noopener noreferrer"&gt;Netanel Basal&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.ninja-squad.com/2025/11/18/angular-tests-with-vitest-browser-mode" rel="noopener noreferrer"&gt;Angular tests with Vitest browser mode&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/jbnizet" rel="noopener noreferrer"&gt;Jean-Baptiste Nizet&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

&lt;h2&gt;
  
  
  🕹️Previous issues
&lt;/h2&gt;

&lt;p&gt;If you missed the previous issues of the newsletter, you can read them &lt;a href="https://www.angularaddicts.com/t/angular-addicts-monthly" rel="noopener noreferrer"&gt;here&lt;/a&gt;, these are the latest 3 issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-44-angualr-21-signal-forms-vitest" rel="noopener noreferrer"&gt;Angular Addicts #44: Angular 21, Signal Forms, Vitest, Chat assistant integration &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-43-vitest-signal-forms-animations" rel="noopener noreferrer"&gt;Angular Addicts #43: Vitest, Signal Forms, Animations &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-42-signal-forms-api-ai-powered-apps" rel="noopener noreferrer"&gt;Angular Addicts #42: Signal Forms API, AI powered apps with Angular &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📨 Submit your Angular resource
&lt;/h2&gt;

&lt;p&gt;Have you found or written an interesting Angular-related article, tweet or other resource lately? Please let me know here in the comments or send me a DM on &lt;a href="https://twitter.com/gergelyszerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! I might feature it in the next Angular Addicts issue!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Angular Addicts #44: Angular 21, Signal Forms, Vitest, Chat assistant integration &amp; more</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Tue, 09 Dec 2025 08:14:06 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/angular-addicts-44-angular-21-signal-forms-vitest-chat-assistant-integration-more-2ee8</link>
      <guid>https://dev.to/playfulprogramming-angular/angular-addicts-44-angular-21-signal-forms-vitest-chat-assistant-integration-more-2ee8</guid>
      <description>&lt;h2&gt;
  
  
  👋Hey fellow Angular Addict
&lt;/h2&gt;

&lt;p&gt;This is the 44th issue of the Angular Addicts Newsletter, a monthly collection of carefully selected Angular resources that caught my attention. (Here are the &lt;a href="https://www.angularaddicts.com/p/angular-addicts-43-vitest-signal-forms-animations" rel="noopener noreferrer"&gt;43rd&lt;/a&gt;, &lt;a href="https://www.angularaddicts.com/p/angular-addicts-42-signal-forms-api-ai-powered-apps" rel="noopener noreferrer"&gt;42nd&lt;/a&gt; and &lt;a href="https://www.angularaddicts.com/p/angular-addicts-41-angular-20-2-animations-monorepos" rel="noopener noreferrer"&gt;41st&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  📢 Release announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📢 &lt;a href="https://blog.angular.dev/announcing-angular-v21-57946c34f14b" rel="noopener noreferrer"&gt;Announcing Angular v21&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://bsky.app/profile/jens.ng" rel="noopener noreferrer"&gt;Jens Kuehlers&lt;/a&gt; and &lt;a href="https://bsky.app/profile/marktechson.com" rel="noopener noreferrer"&gt;Mark “Techson” Thompson&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📢 &lt;a href="https://dev.to/analogjs/announcing-analogjs-20-348d"&gt;Announcing AnalogJS 2.0&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/brandontroberts" rel="noopener noreferrer"&gt;Brandon Roberts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💎Angular Gems of November, 2025
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 Angular Signal Forms
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/cedric_exbrayat" rel="noopener noreferrer"&gt;Cédric Exbrayat&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.ninja-squad.com/2025/11/04/angular-signal-forms-part-1" rel="noopener noreferrer"&gt;Angular Signal Forms - Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.ninja-squad.com/2025/11/14/angular-signal-forms-part-2" rel="noopener noreferrer"&gt;Angular Signal Forms - Part 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://angular.love/angular-ssr-optimize-seo-with-rendering-meta-tags-og-tags-and-social-media-previews" rel="noopener noreferrer"&gt;Angular SSR: Optimize SEO with rendering Meta Tags, OG Tags and Social Media Previews - Angular.love&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/dawid_k_dev" rel="noopener noreferrer"&gt;Dawid Kostka&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/ngconf/the-angular-resource-api-fe8fa2b538bf" rel="noopener noreferrer"&gt;The Angular Resource API&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/prestonjlamb" rel="noopener noreferrer"&gt;Preston Lamb&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/@monsieur_ricky/going-zoneless-why-your-angular-errorhandler-went-silent-and-how-to-fix-it-eb8edd038a2e" rel="noopener noreferrer"&gt;Going Zoneless: Why Your Angular ErrorHandler Went Silent — and How to Fix It&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/rickylopes" rel="noopener noreferrer"&gt;Ricky Lopes&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://edbzn.dev/understanding-nx-affected-graph-vs-cache-hits/" rel="noopener noreferrer"&gt;Understanding Nx's Affected Graph vs. Cache Hits&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/edbzn" rel="noopener noreferrer"&gt;Edouard Bozon&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angulararchitects.io/en/blog/an-ai-assistant-for-your-angular-application-tool-calling-in-the-frontend-with-hashbrown/" rel="noopener noreferrer"&gt;An AI Assistant for your Angular Application: Tool Calling in the Frontend with Hashbrown&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/ManfredSteyer" rel="noopener noreferrer"&gt;Manfred Steyer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angularspace.com/gemini-and-angular-part-ii-structured-outputs-and-tool-calls/" rel="noopener noreferrer"&gt;Gemini and Angular, Part II: Structured Outputs and Tool calls&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/Armandotrue" rel="noopener noreferrer"&gt;Armen Vardanyan&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angulartraining.com/angular-signal-forms-set-up-and-validation-rules-5057b5d22f2c" rel="noopener noreferrer"&gt;Angular Signal Forms — Set-up and validation rules&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AlainChautard" rel="noopener noreferrer"&gt;Alain Chautard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angular.dev/handling-time-and-mock-clocks-in-tests-5a393b32dd30" rel="noopener noreferrer"&gt;Handling Time and Mock Clocks in Tests&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AScottAngular" rel="noopener noreferrer"&gt;Andrew Scott&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/angular/a-quick-vibe-code-experiment-with-angulars-mcp-server-3g2h"&gt;A Quick Vibe Code Experiment with Angular's MCP Server&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AlisaDuncan" rel="noopener noreferrer"&gt;Alisa Duncan&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

&lt;h2&gt;
  
  
  🕹️Previous issues
&lt;/h2&gt;

&lt;p&gt;If you missed the previous issues of the newsletter, you can read them &lt;a href="https://www.angularaddicts.com/t/angular-addicts-monthly" rel="noopener noreferrer"&gt;here&lt;/a&gt;, these are the latest 3 issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-43-vitest-signal-forms-animations" rel="noopener noreferrer"&gt;Angular Addicts #43: Vitest, Signal Forms, Animations &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-42-signal-forms-api-ai-powered-apps" rel="noopener noreferrer"&gt;Angular Addicts #42: Signal Forms API, AI powered apps with Angular &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-41-angular-20-2-animations-monorepos" rel="noopener noreferrer"&gt;Angular Addicts #41: Angular 20.2, Animations, Monorepos &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📨 Submit your Angular resource
&lt;/h2&gt;

&lt;p&gt;Have you found or written an interesting Angular-related article, tweet or other resource lately? Please let me know here in the comments or send me a DM on &lt;a href="https://twitter.com/gergelyszerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! I might feature it in the next Angular Addicts issue!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Angular Addicts #43: Vitest, Signal Forms, Animations &amp; more</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Tue, 11 Nov 2025 07:34:56 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/angular-addicts-43-vitest-signal-forms-animations-more-3lcd</link>
      <guid>https://dev.to/playfulprogramming-angular/angular-addicts-43-vitest-signal-forms-animations-more-3lcd</guid>
      <description>&lt;h2&gt;
  
  
  👋Hey fellow Angular Addict
&lt;/h2&gt;

&lt;p&gt;This is the 43rd issue of the Angular Addicts Newsletter, a monthly collection of carefully selected Angular resources that caught my attention. (Here are the &lt;a href="https://www.angularaddicts.com/p/angular-addicts-42-signal-forms-api-ai-powered-apps" rel="noopener noreferrer"&gt;42nd&lt;/a&gt;, &lt;a href="https://www.angularaddicts.com/p/angular-addicts-41-angular-20-2-animations-monorepos" rel="noopener noreferrer"&gt;41st&lt;/a&gt; and &lt;a href="https://www.angularaddicts.com/p/angular-addicts-40-angular-20-1-zoneless-testing-native-federation-more" rel="noopener noreferrer"&gt;40th&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  💎Angular Gems of October, 2025
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angulararchitects.io/en/blog/dynamic-forms-building-a-form-generator-with-signal-forms/" rel="noopener noreferrer"&gt;Dynamic Forms: Building a Form Generator with Signal Forms&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/ManfredSteyer" rel="noopener noreferrer"&gt;Manfred Steyer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://push-based.io/article/angular-v21-goes-zoneless-by-default-what-changes-why-its-faster-and-how-to" rel="noopener noreferrer"&gt;Angular v21 Goes Zoneless by Default: What Changes &amp;amp; Why It’s Faster&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/Enea_Jahollari" rel="noopener noreferrer"&gt;Enea Jahollari&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/rainerhahnekamp/angulars-testing-revolution-vitest-fake-timers-testronaut-2bnj"&gt;Angular's Testing Revolution: Vitest, Fake Timers &amp;amp; Testronaut&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/rainerhahnekamp" rel="noopener noreferrer"&gt;Rainer Hahnekamp&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/@schnabelelisa0/custom-angular-form-controls-made-simple-with-signal-forms-3860dcdb5a03" rel="noopener noreferrer"&gt;Custom Angular Form Controls Made Simple with Signal Forms&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/elisa-schnabel-2a634a372/" rel="noopener noreferrer"&gt;Elisa Schnabel&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/ngconf/20-ways-to-make-your-angular-apps-run-faster-part-4-build-and-diagnostics-58bab2712202" rel="noopener noreferrer"&gt;20 Ways to Make Your Angular Apps Run Faster | Part 4: Build and Diagnostics&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/zorphdark" rel="noopener noreferrer"&gt;Alejandro Cuba Ruiz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the 4th part of the "20 Ways to Make Your Angular Apps Run Faster" series:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/ngconf/20-ways-to-make-your-angular-apps-run-faster-part-1-rendering-optimizations-51d16425bd0e" rel="noopener noreferrer"&gt;Part 1: Rendering Optimizations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/ngconf/20-ways-to-make-your-angular-apps-run-faster-part-2-reactivity-fec43badd0c7" rel="noopener noreferrer"&gt;Part 2: Reactivity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/ngconf/20-ways-to-make-your-angular-apps-run-faster-part-3-assets-and-styling-b31be756d793" rel="noopener noreferrer"&gt;Part 3: Assets and Styling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/ngconf/20-ways-to-make-your-angular-apps-run-faster-part-4-build-and-diagnostics-58bab2712202" rel="noopener noreferrer"&gt;Part 4: Build and Diagnostics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/railsstudent/building-an-ai-creative-suite-with-angular-gemini-imagen-and-veo-41bk"&gt;Building an AI Creative Suite with Angular, Gemini, Imagen and Veo&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/connieleung404" rel="noopener noreferrer"&gt;Connie Leung&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angulartraining.com/how-to-animate-transitions-with-angular-66bad6d0dae2" rel="noopener noreferrer"&gt;How to animate transitions with Angular?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AlainChautard" rel="noopener noreferrer"&gt;Alain Chautard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angular.dev/angular-support-for-generating-apps-in-google-ai-studio-is-now-available-3a3afde38f58" rel="noopener noreferrer"&gt;Angular support for generating apps in Google AI Studio is now available&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/marktechson" rel="noopener noreferrer"&gt;Mark (Techson) Thompson&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

&lt;h2&gt;
  
  
  🕹️Previous issues
&lt;/h2&gt;

&lt;p&gt;If you missed the previous issues of the newsletter, you can read them &lt;a href="https://www.angularaddicts.com/t/angular-addicts-monthly" rel="noopener noreferrer"&gt;here&lt;/a&gt;, these are the latest 3 issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-42-signal-forms-api-ai-powered-apps" rel="noopener noreferrer"&gt;Angular Addicts #42: Signal Forms API, AI powered apps with Angular &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-41-angular-20-2-animations-monorepos" rel="noopener noreferrer"&gt;Angular Addicts #41: Angular 20.2, Animations, Monorepos &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-40-angular-20-1-zoneless-testing-native-federation-more" rel="noopener noreferrer"&gt;Angular Addicts #40: Angular 20.1, NgRx 20, Zoneless testing, Native Federation &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📨 Submit your Angular resource
&lt;/h2&gt;

&lt;p&gt;Have you found or written an interesting Angular-related article, tweet or other resource lately? Please let me know here in the comments or send me a DM on &lt;a href="https://twitter.com/gergelyszerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! I might feature it in the next Angular Addicts issue!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Is This the Future of E2E Testing? How AI Automates Browser Tests from Plain English Requirements</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Thu, 30 Oct 2025 10:16:16 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/is-this-the-future-of-e2e-testing-how-ai-automates-browser-tests-from-plain-english-requirements-1d0</link>
      <guid>https://dev.to/playfulprogramming-angular/is-this-the-future-of-e2e-testing-how-ai-automates-browser-tests-from-plain-english-requirements-1d0</guid>
      <description>&lt;p&gt;End-to-end testing has always been the gold standard for verifying that your application actually works the way users experience it. But let's be honest: writing and maintaining E2E tests is often a thankless job. Flaky selectors, timing issues, brittle test code that breaks with every UI change, the pain points are real and numerous.&lt;/p&gt;

&lt;p&gt;What if instead of writing test code, &lt;strong&gt;you could simply describe what you want to test in plain language&lt;/strong&gt;, and have an &lt;strong&gt;AI assistant execute those tests&lt;/strong&gt; for you, then generate a detailed &lt;strong&gt;report&lt;/strong&gt; of what happened? That's exactly what becomes possible when you combine the Chrome DevTools MCP server with AI-powered testing workflows.&lt;/p&gt;

&lt;p&gt;This is Part 2 of our Chrome DevTools MCP series. In &lt;a href="https://www.aiboosted.dev/p/chrome-devtools-mcp-server-guide" rel="noopener noreferrer"&gt;Part 1 (Chrome DevTools MCP Server Guide)&lt;/a&gt;, we explored the &lt;strong&gt;fundamentals of the Chrome DevTools MCP server and its tools for browser automation.&lt;/strong&gt; Now, we're going to put those tools to work in a complete, practical workflow: taking a product requirements document, generating test scenarios, executing them automatically, and producing comprehensive test reports, all orchestrated by your AI assistant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;By the end of this article, you'll understand how to transform requirements documents into executable test scenarios and leverage AI to execute Gherkin-style tests via browser automation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's dive in with a real example: a Tic-Tac-Toe game. I've generated both &lt;strong&gt;React&lt;/strong&gt; and &lt;strong&gt;Angular&lt;/strong&gt; versions of this demo app in the &lt;a href="https://github.com/gergelyszerovay/articles/tree/e2e-testing-with-chrome-devtools-mcp" rel="noopener noreferrer"&gt;companion GitHub repository&lt;/a&gt;, so you can follow along with whichever framework you prefer. The repository contains everything you need: the &lt;a href="https://github.com/gergelyszerovay/articles/blob/e2e-testing-with-chrome-devtools-mcp/tic-tac-toe-react/src/features/tic-tac-toe/PRD.md" rel="noopener noreferrer"&gt;complete PRD&lt;/a&gt;, &lt;a href="https://github.com/gergelyszerovay/articles/blob/e2e-testing-with-chrome-devtools-mcp/tic-tac-toe-react/src/features/tic-tac-toe/ARCHITECTURE.md" rel="noopener noreferrer"&gt;architecture documentation&lt;/a&gt;, &lt;a href="https://github.com/gergelyszerovay/articles/tree/e2e-testing-with-chrome-devtools-mcp/e2e" rel="noopener noreferrer"&gt;generated Gherkin scenarios&lt;/a&gt;, and &lt;a href="https://github.com/gergelyszerovay/articles/blob/e2e-testing-with-chrome-devtools-mcp/e2e/core-gameplay.report.md" rel="noopener noreferrer"&gt;test reports&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Traditional E2E Testing Workflow (The Old Way)
&lt;/h2&gt;

&lt;p&gt;Before we explore the AI-assisted approach, let's acknowledge how E2E testing typically works and why it's often neglected. The traditional workflow starts with writing specifications or a PRD to document what the application should do. Then you manually create test scenarios by thinking through user flows and edge cases. Next comes the real work: writing Puppeteer, Playwright, or Cucumber Gherkin &lt;strong&gt;scripts to translate those scenarios into code&lt;/strong&gt;, followed by hours of &lt;strong&gt;debugging flaky selectors and timing issues&lt;/strong&gt;. Finally, you &lt;strong&gt;maintain that test code&lt;/strong&gt; as the UI inevitably changes, updating selectors, refactoring tests, and fixing breakages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing the AI-Assisted Testing Workflow
&lt;/h2&gt;

&lt;p&gt;Here's what changes when you let AI orchestrate your E2E testing using the Chrome DevTools MCP server:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Five-Step Process
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Document requirements&lt;/strong&gt;: PRD, you're doing this anyway&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate Gherkin scenarios&lt;/strong&gt;: AI translates requirements into test scenarios&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI executes tests&lt;/strong&gt;: via Chrome DevTools MCP, no test code to write or maintain&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI generates detailed test reports&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate and maintain&lt;/strong&gt;: Update requirements and regenerate tests as needed&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why This Works
&lt;/h3&gt;

&lt;p&gt;The key insight is that we're working in &lt;strong&gt;natural language throughout the entire process&lt;/strong&gt;. Your &lt;strong&gt;requirements&lt;/strong&gt; get written in natural language (PRD), then translated into natural language &lt;strong&gt;test scenarios&lt;/strong&gt; (Gherkin). The AI orchestrates &lt;strong&gt;test execution&lt;/strong&gt; by understanding these natural language instructions, and finally generates &lt;strong&gt;test reports&lt;/strong&gt; in natural language that anyone can read. There's no translation layer into brittle test code, no fighting with selectors, just clear descriptions of what should happen, executed and verified automatically.&lt;/p&gt;

&lt;p&gt;Let's see this in action with our Tic-Tac-Toe example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Foundation: The Product Requirements
&lt;/h2&gt;

&lt;p&gt;Every good testing strategy starts with clear requirements. For our Tic-Tac-Toe game, we have a comprehensive Product Requirements Document (PRD) that lays everything out. You can find the &lt;a href="https://github.com/gergelyszerovay/articles/blob/e2e-testing-with-chrome-devtools-mcp/tic-tac-toe-react/src/features/tic-tac-toe/PRD.md" rel="noopener noreferrer"&gt;complete PRD in the GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Product Requirements Document (PRD)
&lt;/h3&gt;

&lt;p&gt;Our PRD covers everything we need to know about how the game should behave:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Stories&lt;/strong&gt; organized by category:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Core Gameplay: Placing marks, seeing turns, winning, draws&lt;/li&gt;
&lt;li&gt;Game Management: New game, undo, move counter&lt;/li&gt;
&lt;li&gt;User Experience: Hover effects, mobile support, accessibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Functional Requirements&lt;/strong&gt; (FR-1 through FR-19) that specify exact behaviors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FR-1: The game must support two players: X and O&lt;/li&gt;
&lt;li&gt;FR-2: Player X always goes first&lt;/li&gt;
&lt;li&gt;FR-3: Players alternate turns&lt;/li&gt;
&lt;li&gt;FR-4: A player wins by placing three marks in a row&lt;/li&gt;
&lt;li&gt;FR-5: The game ends in a draw if all cells are filled&lt;/li&gt;
&lt;li&gt;FR-6: Cells cannot be overwritten once marked&lt;/li&gt;
&lt;li&gt;...and so on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Non-Functional Requirements&lt;/strong&gt; covering performance, usability, and accessibility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NFR-8: All interactive elements must have proper ARIA labels&lt;/li&gt;
&lt;li&gt;NFR-9: Game must be fully keyboard navigable&lt;/li&gt;
&lt;li&gt;NFR-10: Screen readers must be able to announce game state&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why This Documentation Matters
&lt;/h3&gt;

&lt;p&gt;This PRD serves as the &lt;strong&gt;single source of truth&lt;/strong&gt; for both development and testing. When requirements are this clear and structured, AI can extract testable behaviors, generate appropriate test scenarios, understand the expected outcomes, and verify that the implementation matches the specification. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.aiboosted.dev/p/better-apps-with-vibe-coding-7-step-coding-guidelines" rel="noopener noreferrer"&gt;The investment in writing good requirements pays dividends throughout the entire development lifecycle&lt;/a&gt;, but especially in testing. Think of it as building a solid foundation, everything else gets easier when you start with clarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: From Requirements to Gherkin Scenarios
&lt;/h2&gt;

&lt;p&gt;Gherkin is a business-readable, domain-specific language for describing software behaviors without detailing how those behaviors are implemented. It uses a simple structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="kd"&gt;Feature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Description of the feature
  &lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Description of a specific behavior
    &lt;span class="nf"&gt;Given &lt;/span&gt;[initial context]
    &lt;span class="nf"&gt;When &lt;/span&gt;[action taken]
    &lt;span class="nf"&gt;Then &lt;/span&gt;[expected outcome]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you're new to Gherkin, the &lt;a href="https://cucumber.io/docs/gherkin/reference/" rel="noopener noreferrer"&gt;Gherkin reference&lt;/a&gt; has everything you need to know about the syntax and best practices. But don't worry, you'll pick up the basics just by following along with our examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Translation Process
&lt;/h3&gt;

&lt;p&gt;Here's the simple prompt I used to transform our PRD into executable test scenarios:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Gherkin feature files based on the PRD (Product Requirements Document) located at:
`tic-tac-toe-react/src/features/tic-tac-toe/PRD.md`

Save the generated feature files to the following directory:
`e2e`

Additionally, create a README.md file in the same `e2e` folder that explains:
- How each feature file maps to specific PRD requirements
- The relationship between test scenarios and product specifications
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all it took. The AI read through the PRD, identified testable behaviors, and organized them into four focused feature files covering everything from basic gameplay to accessibility.&lt;/p&gt;

&lt;p&gt;Let me show you how it translates requirements into Gherkin. The following examples are from the &lt;a href="https://github.com/gergelyszerovay/articles/blob/e2e-testing-with-chrome-devtools-mcp/e2e/core-gameplay.feature" rel="noopener noreferrer"&gt;core-gameplay.feature&lt;/a&gt; file in our repository. Take this functional requirement:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From this requirement:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;FR-2: Player X always goes first&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;To this Gherkin scenario:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; First move is always Player X
  &lt;span class="nf"&gt;When &lt;/span&gt;the game starts
  &lt;span class="nf"&gt;Then &lt;/span&gt;the status should display &lt;span class="s"&gt;"Player X's turn"&lt;/span&gt;
  &lt;span class="nf"&gt;And &lt;/span&gt;all cells should be empty
  &lt;span class="nf"&gt;And &lt;/span&gt;the move counter should show &lt;span class="s"&gt;"0"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or this user story:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From this user story:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As a player, I want to click on an empty cell to place my mark, so I can make my move&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;To this Gherkin scenario:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Player places mark in empty cell
  &lt;span class="nf"&gt;When &lt;/span&gt;Player X clicks on cell 0
  &lt;span class="nf"&gt;Then &lt;/span&gt;cell 0 should display &lt;span class="s"&gt;"X"&lt;/span&gt;
  &lt;span class="nf"&gt;And &lt;/span&gt;it should be Player O's turn
  &lt;span class="nf"&gt;And &lt;/span&gt;the move counter should show &lt;span class="s"&gt;"1"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pretty straightforward, right? The AI maintains the intent of each requirement while converting it into a testable format that anyone on your team can read and understand.&lt;/p&gt;

&lt;p&gt;For our Tic-Tac-Toe game, the AI organized everything into four feature files covering core gameplay, game outcomes, controls, and accessibility. Rather than walk through all of them in detail, let me show you what the core gameplay scenarios look like, this will give you a good feel for how comprehensive these tests become.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Traceability Matrix
&lt;/h3&gt;

&lt;p&gt;One of the most valuable outputs is the &lt;strong&gt;traceability matrix&lt;/strong&gt; that links each requirement to its corresponding test scenarios. You can see the &lt;a href="https://github.com/gergelyszerovay/articles/blob/e2e-testing-with-chrome-devtools-mcp/e2e/README.md" rel="noopener noreferrer"&gt;complete traceability matrix in the repository&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement ID&lt;/th&gt;
&lt;th&gt;Test Scenario&lt;/th&gt;
&lt;th&gt;Feature File&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FR-1&lt;/td&gt;
&lt;td&gt;Two players support&lt;/td&gt;
&lt;td&gt;core-gameplay.feature&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FR-2&lt;/td&gt;
&lt;td&gt;X goes first&lt;/td&gt;
&lt;td&gt;core-gameplay.feature&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FR-3&lt;/td&gt;
&lt;td&gt;Turn alternation&lt;/td&gt;
&lt;td&gt;core-gameplay.feature&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FR-4&lt;/td&gt;
&lt;td&gt;Win detection&lt;/td&gt;
&lt;td&gt;game-outcomes.feature&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FR-5&lt;/td&gt;
&lt;td&gt;Draw detection&lt;/td&gt;
&lt;td&gt;game-outcomes.feature&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NFR-8&lt;/td&gt;
&lt;td&gt;ARIA labels&lt;/td&gt;
&lt;td&gt;accessibility.feature&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NFR-9&lt;/td&gt;
&lt;td&gt;Keyboard navigation&lt;/td&gt;
&lt;td&gt;accessibility.feature&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This matrix ensures complete test coverage and makes it easy to verify that every requirement has been tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: AI Executes Tests Using Chrome DevTools MCP
&lt;/h2&gt;

&lt;p&gt;Now comes the magic: executing these Gherkin scenarios automatically using the Chrome DevTools MCP server. Let's walk through the actual conversation that orchestrated the entire test suite execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Initial Request
&lt;/h3&gt;

&lt;p&gt;Before running tests, you need your application running locally. In our case, we have both React and Angular implementations available in the &lt;a href="https://github.com/gergelyszerovay/articles/tree/e2e-testing-with-chrome-devtools-mcp" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;. To start the React version, run &lt;code&gt;npm start&lt;/code&gt; from the &lt;code&gt;tic-tac-toe-react&lt;/code&gt; directory, it'll launch on port 4305. For Angular, navigate to &lt;code&gt;tic-tac-toe-ng&lt;/code&gt; and use &lt;code&gt;ng serve&lt;/code&gt;. Once your app is running, you can begin testing.&lt;/p&gt;

&lt;p&gt;Here's the prompt I used to kick off the test execution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I have a React app located in the `tic-tac-toe-react` directory that's running on http://127.0.0.1:4305/.

Please use the Chrome DevTools MCP server to:
1. Execute the test steps defined in `e2e/core-gameplay.feature`
2. Generate a test report and save it to `e2e/core-gameplay.report.md`

For each Gherkin step in the report, include a text result indicating whether it passed or failed (and any relevant details).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No test code to write.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advanced Approach: Using Subagents for Large Test Suites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For complex applications with many test scenarios, there's a more scalable approach using subagents. Instead of executing all test steps in a single AI conversation context, &lt;strong&gt;you can delegate each scenario to its own subagent&lt;/strong&gt;. The main orchestrator agent maintains only the Gherkin file, coordinates subagent executions, and generates the final consolidated report, while each subagent independently runs its assigned scenario's steps.&lt;/p&gt;

&lt;p&gt;This architecture provides significant benefits for &lt;strong&gt;large test suites&lt;/strong&gt;. The main agent's context stays clean and focused on orchestration rather than getting cluttered with hundreds of detailed test execution steps. &lt;strong&gt;Each scenario executes in isolation with its own fresh context&lt;/strong&gt;, preventing context pollution and token limit issues. Most importantly, this approach allows you to run comprehensive test suites with many scenarios and steps without hitting context length limitations.&lt;/p&gt;

&lt;p&gt;Here's how you structure the prompt for subagent-based testing. The following example is for the Angular app and GitHub Copilot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I have an Angular app located in the `tic-tac-toe-ng` directory 
that's running on http://127.0.0.1:4200/.

Please use the Chrome DevTools MCP server to execute the test 
scenarios defined in `e2e/core-gameplay.feature`.

For each scenario in the feature file:
1. Use `runSubagent` to execute the test steps for that specific scenario
2. Each subagent should test the scenario independently and return 
   a detailed text result indicating whether it passed or failed, including:
   - Pass/fail status for each Gherkin step in the scenario
   - Any relevant details, observations, or error messages
   - Verification data (e.g., DOM state, element content, computed styles)

After all subagents complete:
3. Aggregate all the scenario results and generate a comprehensive test report
4. Save the final report to `e2e/core-gameplay.report-ng-subagents.md`

The report should include the pass/fail status and details for 
each scenario returned by the subagents.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This subagent approach becomes essential as your test suite grows beyond a dozen scenarios or when individual scenarios involve complex multi-step interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  How AI Interprets Gherkin Steps
&lt;/h3&gt;

&lt;p&gt;The AI reads the Gherkin scenarios and translates them into Chrome DevTools MCP tool calls. Let's look at a concrete example from the actual test execution:&lt;/p&gt;

&lt;h4&gt;
  
  
  Example: Preventing Cell Overwrites
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Gherkin:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="nf"&gt;Given &lt;/span&gt;Player X clicks on cell 4
&lt;span class="nf"&gt;When &lt;/span&gt;Player O attempts to click on cell 4
&lt;span class="nf"&gt;Then &lt;/span&gt;cell 4 should still display &lt;span class="s"&gt;"X"&lt;/span&gt;
&lt;span class="nf"&gt;And &lt;/span&gt;it should still be Player O's turn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;AI's internal process:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. navigate_page to http://127.0.0.1:4305/
2. take_snapshot → Find cell 4 (uid: "48_8")
3. click uid "48_8"
4. take_snapshot → Verify cell 4 now shows "Cell with X" (disabled)
5. click uid "49_8" → Attempt to click again
   Result: Click timed out (element disabled, click prevented)
6. take_snapshot → Verify state unchanged:
   - Cell 4: Still "Cell with X"
   - Status: Still "Current player: O"
   - Move counter: Still "Moves: 1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The insight:&lt;/strong&gt; The click timeout actually confirms the test passed! The cell is disabled, so the click cannot complete, which is exactly the expected behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Power of Accessibility-Driven Testing
&lt;/h3&gt;

&lt;p&gt;Notice how every test relies on the &lt;strong&gt;accessibility tree&lt;/strong&gt; rather than implementation details. This approach provides remarkable stability since accessibility properties remain unchanged even when you refactor CSS or restructure DOM elements. Tests verify what users actually experience rather than just confirming that certain classes are applied. When your accessibility tree is well-structured, you're simultaneously ensuring your app is accessible to screen reader users. The snapshots themselves are immediately understandable, showing "Button", "Empty cell", "Cell with X" instead of cryptic selectors or implementation details that make sense to humans.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: The Test Report: Automated Documentation
&lt;/h2&gt;

&lt;p&gt;After executing all tests, the AI generates a comprehensive test report in Markdown format. Let's examine the structure and value of this automatically generated documentation. You can view the &lt;a href="https://github.com/gergelyszerovay/articles/blob/e2e-testing-with-chrome-devtools-mcp/e2e/core-gameplay.report.md" rel="noopener noreferrer"&gt;complete test report in the repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The report opens with a summary table, this immediately tells you the health of your application at a glance.&lt;/p&gt;

&lt;p&gt;For each Gherkin step, the report includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pass/Fail status&lt;/strong&gt; (✅ or ❌)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detailed result description&lt;/strong&gt; explaining what was observed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Element UIDs&lt;/strong&gt; referenced during the test&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence from Chrome DevTools interactions&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Limitations and Considerations
&lt;/h2&gt;

&lt;p&gt;While this AI-assisted testing approach offers significant advantages, let's be realistic about where it fits in your testing strategy.&lt;/p&gt;

&lt;h4&gt;
  
  
  Standardization for Production Use
&lt;/h4&gt;

&lt;p&gt;For real-world usage in production environments, you'll want to establish &lt;strong&gt;consistency across your test artifacts&lt;/strong&gt;. This means defining report templates that standardize how test results are formatted and presented, making it easier to compare results across different test runs and share reports with stakeholders. You'll also want to establish a &lt;strong&gt;coding standard for Gherkin files&lt;/strong&gt; that defines naming conventions, step patterns, and structural guidelines, ensuring that AI-generated scenarios follow your team's conventions and integrate smoothly with your existing test documentation.&lt;/p&gt;

&lt;p&gt;These standards become especially important when multiple team members are generating tests or when you're maintaining a large test suite over time. Consider creating example templates and style guides that you can reference in your prompts to the AI.&lt;/p&gt;

&lt;h4&gt;
  
  
  Requirements Are Your Foundation
&lt;/h4&gt;

&lt;p&gt;The quality of your tests directly reflects the quality of your requirements. &lt;strong&gt;Vague or incomplete PRDs lead to vague or incomplete tests&lt;/strong&gt;, there's no magic here. This approach shines when your requirements are specific, testable, and well-structured. The good news? The discipline of writing better requirements benefits your entire project, not just testing.&lt;/p&gt;

&lt;h4&gt;
  
  
  Complex Interactions May Need Detailed Steps
&lt;/h4&gt;

&lt;p&gt;Simple interactions like clicking buttons and filling forms work automatically. But complex scenarios, think multi-step wizards, drag-and-drop operations, or dynamic content loading, often need more granular Gherkin steps. Instead of "When the user completes the checkout flow," you'll want to break it down: "When the user adds items to cart, And navigates to checkout, And fills in shipping address..." The AI can handle complexity, but it needs clear, step-by-step instructions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Human Review Still Matters
&lt;/h4&gt;

&lt;p&gt;AI can generate tests from your documented requirements, but it won't catch missing requirements, undocumented edge cases, or critical integration points you forgot to mention. A &lt;strong&gt;human reviewer should verify test coverage&lt;/strong&gt;, ensure both happy paths and error cases are tested, and confirm that scenarios match real-world usage patterns.&lt;/p&gt;

&lt;h4&gt;
  
  
  Complement, Don't Replace
&lt;/h4&gt;

&lt;p&gt;E2E tests through Chrome DevTools MCP excel at verifying user-facing behaviors in the actual browser. They complement but &lt;strong&gt;don't replace unit tests&lt;/strong&gt; for isolated functions, integration tests for component interactions, or API tests for backend functionality. Think of this as the top layer of your testing pyramid or &lt;a href="https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications" rel="noopener noreferrer"&gt;thropy&lt;/a&gt;, you still need the foundation underneath.&lt;/p&gt;

&lt;h2&gt;
  
  
  About the Author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, and I've worked as a data scientist and full-stack developer for many years. Currently, I work as a frontend tech lead focusing on Angular-based development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving.&lt;/p&gt;

&lt;p&gt;To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, sending subscribers the best resources each month. Whether you're a seasoned Angular developer or just getting started, I've got you covered.&lt;/p&gt;

&lt;p&gt;In the past year, with the rise of generative AI, our software development workflows have evolved rapidly. To closely follow this evolution, I decided to start building AI tools in public and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Join me on this learning journey:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔥 &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe to Angular Addicts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🚀 &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe to AIBoosted.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Connect with me:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn more about Angular, TypeScript, React, and how to build AI-assisted development workflows that make you more productive!&lt;/p&gt;

</description>
      <category>e2e</category>
      <category>angular</category>
      <category>react</category>
    </item>
    <item>
      <title>Chrome DevTools MCP Server Guide</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Tue, 21 Oct 2025 07:37:16 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/chrome-devtools-mcp-server-guide-24fa</link>
      <guid>https://dev.to/playfulprogramming-angular/chrome-devtools-mcp-server-guide-24fa</guid>
      <description>&lt;p&gt;&lt;strong&gt;Ever wished your AI assistant could actually see and interact with a browser like you do?&lt;/strong&gt; That's exactly what the &lt;strong&gt;Chrome DevTools MCP server&lt;/strong&gt; delivers: a direct connection between your AI coding assistant and Chrome's powerful developer tools, enabling everything &lt;strong&gt;from automated testing to debugging and performance analysis.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of asking your AI to generate Puppeteer scripts or guess at how your web app behaves, it can now control a real Chrome browser, inspect network requests, capture screenshots, and even record performance traces. The Model Context Protocol (MCP) creates this bridge, giving your AI assistant the same view into your web application that you'd get from Chrome DevTools.&lt;/p&gt;

&lt;p&gt;But here's where it gets really interesting. Need to debug why a form submission isn't working? Your AI can take a snapshot of the page, examine the form elements, fill them out, and capture any console errors, all while explaining what's happening. Want to understand why your page is loading slowly? It can record a performance trace and break down the Core Web Vitals for you with actionable insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Workflows
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before we dive into the individual tools,&lt;/strong&gt; let me show you how they work together to solve real problems you face every day. These workflows demonstrate the power of combining different tools to automate complex testing and debugging scenarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  End-to-End Testing
&lt;/h3&gt;

&lt;p&gt;Testing a complete user flow from start to finish:&lt;/p&gt;

&lt;p&gt;"Test the checkout process with these steps: add a product to cart, proceed to checkout, fill in shipping details, and verify the order confirmation appears."&lt;/p&gt;

&lt;p&gt;Your AI will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Take a snapshot to find the "Add to Cart" button (&lt;code&gt;take_snapshot&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Click it and wait for the cart to update (&lt;code&gt;click&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Navigate to checkout (&lt;code&gt;click&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Take another snapshot to identify form fields (&lt;code&gt;take_snapshot&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Fill in shipping details using realistic test data (&lt;code&gt;fill_form&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Submit the form (&lt;code&gt;click&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Wait for the confirmation message (&lt;code&gt;wait_for&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Take a screenshot of the confirmation for your records (&lt;code&gt;take_screenshot&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If anything fails, it'll capture console errors and network requests to help debug (&lt;code&gt;list_console_messages&lt;/code&gt;, &lt;code&gt;list_network_requests&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Debugging
&lt;/h3&gt;

&lt;p&gt;Understanding why a page loads slowly:&lt;/p&gt;

&lt;p&gt;"Analyze the performance of example.com and tell me what's slowing it down."&lt;/p&gt;

&lt;p&gt;Your AI will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the URL (&lt;code&gt;navigate_page&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Start a performance trace with page reload (&lt;code&gt;performance_start_trace&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Wait for the trace to complete (&lt;code&gt;performance_stop_trace&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Analyze Core Web Vitals (LCP, FID, CLS)&lt;/li&gt;
&lt;li&gt;Examine specific insights like ImageDelivery breakdown (&lt;code&gt;performance_analyze_insight&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Identify the largest contributors (render-blocking resources, slow server response, large images)&lt;/li&gt;
&lt;li&gt;Suggest concrete optimizations with priority order&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Responsive Design Testing
&lt;/h3&gt;

&lt;p&gt;Verifying layouts work across different screen sizes:&lt;/p&gt;

&lt;p&gt;"Test how the navigation menu behaves on mobile, tablet, and desktop."&lt;/p&gt;

&lt;p&gt;Your AI will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start at desktop size (1920x1080) (&lt;code&gt;resize_page&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Take a snapshot and screenshot of the navigation (&lt;code&gt;take_snapshot&lt;/code&gt;, &lt;code&gt;take_screenshot&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Resize to tablet (768x1024) (&lt;code&gt;resize_page&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Check if the menu collapses to a hamburger icon (&lt;code&gt;take_snapshot&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Test that the hamburger menu opens correctly (&lt;code&gt;click&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Resize to mobile (375x667) (&lt;code&gt;resize_page&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Verify mobile navigation works (&lt;code&gt;take_snapshot&lt;/code&gt;, &lt;code&gt;click&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Report any layout issues or broken interactions&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  API Testing Through UI
&lt;/h3&gt;

&lt;p&gt;Debugging network requests triggered by user interactions:&lt;/p&gt;

&lt;p&gt;"Submit the search form and show me what API calls are made."&lt;/p&gt;

&lt;p&gt;Your AI will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List network requests to establish a baseline (&lt;code&gt;list_network_requests&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Take a snapshot to find the search input and button (&lt;code&gt;take_snapshot&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Fill in the search term (&lt;code&gt;fill&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Click the search button (&lt;code&gt;click&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Wait for results to appear (&lt;code&gt;wait_for&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;List new network requests since the click (&lt;code&gt;list_network_requests&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Show you the request details (URL, headers, payload, response) (&lt;code&gt;get_network_request&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is incredibly useful for debugging API integration issues without opening DevTools manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Available Tools
&lt;/h2&gt;

&lt;p&gt;Now that you've seen what's possible, let's explore the individual tools. The Chrome DevTools MCP server organizes its 26 tools into six categories, each targeting a specific aspect of browser automation and debugging.&lt;/p&gt;

&lt;h3&gt;
  
  
  Input Automation (7 tools)
&lt;/h3&gt;

&lt;p&gt;Tools for interacting with page elements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;click&lt;/code&gt; - Click or double-click elements on the page&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;drag&lt;/code&gt; - Drag one element onto another&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fill&lt;/code&gt; - Type text into inputs or select options from dropdowns&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fill_form&lt;/code&gt; - Fill out multiple form fields at once&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;handle_dialog&lt;/code&gt; - Accept or dismiss browser dialogs (alerts, confirms, prompts)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;hover&lt;/code&gt; - Hover over elements to trigger hover states&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;upload_file&lt;/code&gt; - Upload files through file input elements&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Navigation Automation (7 tools)
&lt;/h3&gt;

&lt;p&gt;Tools for controlling browser tabs and navigation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;close_page&lt;/code&gt; - Close browser tabs by index&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_pages&lt;/code&gt; - Get a list of all open tabs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;navigate_page&lt;/code&gt; - Navigate to a specific URL&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;navigate_page_history&lt;/code&gt; - Go back or forward in browser history&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;new_page&lt;/code&gt; - Open a new tab with a URL&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;select_page&lt;/code&gt; - Switch context to a different tab&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;wait_for&lt;/code&gt; - Wait for specific text to appear on the page&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Emulation (3 tools)
&lt;/h3&gt;

&lt;p&gt;Tools for simulating different device and network conditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;emulate_cpu&lt;/code&gt; - Throttle CPU to simulate slower devices (1-20x slowdown)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;emulate_network&lt;/code&gt; - Simulate network conditions (Offline, Slow 3G, Fast 3G, Slow 4G, Fast 4G)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resize_page&lt;/code&gt; - Change viewport dimensions to test responsive designs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance (3 tools)
&lt;/h3&gt;

&lt;p&gt;Tools for analyzing page performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;performance_start_trace&lt;/code&gt; - Begin recording a performance trace&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;performance_stop_trace&lt;/code&gt; - Stop the active trace recording&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;performance_analyze_insight&lt;/code&gt; - Get detailed information about specific performance insights (like LCP breakdown or document latency)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Network (2 tools)
&lt;/h3&gt;

&lt;p&gt;Tools for inspecting network activity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;list_network_requests&lt;/code&gt; - Get all network requests since the last navigation, with filtering options&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_network_request&lt;/code&gt; - Retrieve detailed information about a specific request by its ID&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Debugging (4 tools)
&lt;/h3&gt;

&lt;p&gt;Tools for inspecting and debugging pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;evaluate_script&lt;/code&gt; - Execute JavaScript code in the page context and get JSON-serializable results&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_console_messages&lt;/code&gt; - Retrieve all console logs, warnings, and errors&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;take_screenshot&lt;/code&gt; - Capture screenshots of the full page or specific elements (PNG, JPEG, or WebP)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;take_snapshot&lt;/code&gt; - Get a text representation of the page based on the accessibility tree with unique element identifiers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;Let's get you up and running! The Chrome DevTools MCP server is pretty flexible, so you can configure it to match your workflow. I'll cover the essentials here, but if you want to dive deeper into all the configuration options, check out the &lt;a href="https://github.com/ChromeDevTools/chrome-devtools-mcp/tree/main?tab=readme-ov-file#configuration" rel="noopener noreferrer"&gt;official configuration documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic Setup
&lt;/h3&gt;

&lt;p&gt;The simplest way to get started is to let the server launch a fresh Chrome instance with default settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;depending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IDE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tool&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"chrome-devtools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chrome-devtools-mcp@latest"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! This configuration will work great for most use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting to a Running Chrome Instance from Docker
&lt;/h3&gt;

&lt;p&gt;Here's a scenario I've run into a lot: you're developing in a Docker container but want to use a Chrome instance that's running on your host machine. Maybe you want to see the browser window, or you need to use your existing Chrome profile. Whatever the reason, connecting to a running instance is the way to go.&lt;/p&gt;

&lt;p&gt;First, start Chrome on your host machine with remote debugging enabled. Chrome needs a user data directory when remote debugging is on, so make sure to specify one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"C:\Program Files\Google\Chrome\Application\chrome.exe" ^
  --remote-debugging-port=9222 ^
  --user-data-dir="C:\Temp\chrome-profile-stable"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now for the Docker-specific part. Docker provides a special DNS name called &lt;code&gt;host.docker.internal&lt;/code&gt; that resolves to your host machine. From inside your container, you can find the IP address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;host host.docker.internal
# Output: host.docker.internal has address 192.168.65.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use that IP address in your MCP server configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;depending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IDE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tool&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"chrome-devtools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"chrome-devtools-mcp@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--browserUrl=http://192.168.65.254:9222"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might be wondering: "Why can't I just use &lt;code&gt;host.docker.internal&lt;/code&gt; directly in the &lt;code&gt;browserUrl&lt;/code&gt;?" If you're curious about the details, check out &lt;a href="https://github.com/puppeteer/puppeteer/issues/2242#issuecomment-544219536" rel="noopener noreferrer"&gt;this discussion in the Puppeteer GitHub issues&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For more configuration options like headless mode, custom Chrome paths, network throttling, and debugging settings, take a look at the &lt;a href="https://github.com/ChromeDevTools/chrome-devtools-mcp/tree/main?tab=readme-ov-file#configuration" rel="noopener noreferrer"&gt;full configuration guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool Reference
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Input Automation Tools
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;click&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Clicks or double-clicks an element identified by its unique ID from a page snapshot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Required: The uid of an element on the page from the page content snapshot&lt;/span&gt;
  &lt;span class="nx"&gt;dblClick&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;  &lt;span class="c1"&gt;// Optional: Set to true for double clicks. Default is false.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Let's say you want to test a login form. First, take a snapshot to get element IDs, then use click to submit the form. Your AI assistant can chain these actions naturally when you ask "Can you test the login flow?" It'll find the form, fill it out, click submit, and report what happened.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;drag&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Drags one element onto another, useful for testing drag-and-drop interfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;from_uid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Required: The uid of the element to drag&lt;/span&gt;
  &lt;span class="nx"&gt;to_uid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;     &lt;span class="c1"&gt;// Required: The uid of the element to drop into&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Testing a kanban board? Ask your AI to "move the task card from 'In Progress' to 'Done'" and it'll locate both elements from a snapshot and perform the drag operation. It can even verify the move succeeded by checking the DOM afterward.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;fill&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Types text into input fields, text areas, or selects an option from a dropdown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;// Required: The uid of an element on the page from the page content snapshot&lt;/span&gt;
  &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;   &lt;span class="c1"&gt;// Required: The value to fill in&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; When you ask "Fill out the contact form with test data," your AI can take a snapshot, identify all the form fields, then use fill on each one. It's smart enough to generate appropriate test data based on field names and types.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;fill_form&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Fills multiple form fields in a single operation, more efficient than calling fill repeatedly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// The uid of the element to fill out&lt;/span&gt;
    &lt;span class="nl"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Value for the element&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; This is perfect for complex forms. Instead of watching your AI fill fields one by one, it batches everything together. Ask "Complete the registration form" and it'll snapshot the page, identify all required fields, then fill them all at once.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;handle_dialog&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Responds to JavaScript alerts, confirms, or prompts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;accept&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dismiss&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Required: Whether to dismiss or accept the dialog&lt;/span&gt;
  &lt;span class="nx"&gt;promptText&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;            &lt;span class="c1"&gt;// Optional: Optional prompt text to enter into the dialog.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Testing a "delete item" flow that shows a confirmation dialog? Your AI will click the delete button, detect the dialog, then use &lt;code&gt;handle_dialog&lt;/code&gt; to confirm or cancel. You can specify which action you want: "Test the delete flow but cancel the confirmation."&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;hover&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Triggers hover states on elements, essential for testing dropdown menus and tooltips.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Required: The uid of an element on the page from the page content snapshot&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Want to test if your navigation dropdown works? Ask "Check if the Products menu shows all categories" and your AI will hover over the menu, wait for it to expand, then snapshot and verify the contents.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;upload_file&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Uploads a file through a file input element.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;// Required: The uid of the file input element or an element that will open file chooser on the page from the page content snapshot&lt;/span&gt;
  &lt;span class="nx"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;   &lt;span class="c1"&gt;// Required: The local path of the file to upload&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Need to test an image upload feature? Tell your AI "Upload test-image.jpg to the profile picture form" and it'll locate the file input, handle the upload, and can even wait to verify the upload succeeded.&lt;/p&gt;

&lt;h3&gt;
  
  
  Navigation Automation Tools
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;close_page&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Closes a browser tab by its index. You can't close the last remaining tab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;pageIdx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Required: The index of the page to close. Call list_pages to list pages.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; After opening multiple tabs for testing, clean them up: "Close all the test tabs we opened." Your AI will list the pages, then close the ones that aren't needed, keeping your main tab active.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;list_pages&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Returns all open browser tabs with their URLs and indices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt; None&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; This runs automatically whenever your AI needs to know what tabs are open. When you ask "What pages do I have open?" or "Switch to the documentation tab" it uses this tool behind the scenes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;navigate_page&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Navigates the current tab to a URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Required: URL to navigate the page to&lt;/span&gt;
  &lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;    &lt;span class="c1"&gt;// Optional: Maximum wait time in milliseconds. If set to 0, the default timeout will be used.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; The most straightforward tool. "Go to &lt;a href="https://example.com" rel="noopener noreferrer"&gt;https://example.com&lt;/a&gt;" triggers this directly. Your AI can also chain it with other actions: "Navigate to the login page and check if the form is accessible."&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;navigate_page_history&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Moves backward or forward through the browser history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;back&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;forward&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Required: Whether to navigate back or navigate forward in the selected pages history&lt;/span&gt;
  &lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;                &lt;span class="c1"&gt;// Optional: Maximum wait time in milliseconds. If set to 0, the default timeout will be used.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Testing multi-step flows? "Complete the checkout process, then go back and verify the cart is still correct." Your AI navigates forward through each step, then uses history navigation to go back and verify state.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;new_page&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Opens a new tab and navigates to a URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Required: URL to load in a new page.&lt;/span&gt;
  &lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;    &lt;span class="c1"&gt;// Optional: Maximum wait time in milliseconds. If set to 0, the default timeout will be used.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Comparing pages side-by-side? "Open the production and staging sites in separate tabs and compare the homepage layouts." Your AI opens both pages and can switch between them to analyze differences.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;select_page&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Changes which tab is active for subsequent tool operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;pageIdx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Required: The index of the page to select. Call list_pages to list pages.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; When working with multiple tabs, this switches context. Ask "Check the console errors in the second tab" and your AI uses list_pages to find it, select_page to switch to it, then list_console_messages to check for errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;wait_for&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Waits for specific text to appear on the page, useful after triggering actions that update the UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;// Required: Text to appear on the page&lt;/span&gt;
  &lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;    &lt;span class="c1"&gt;// Optional: Maximum wait time in milliseconds. If set to 0, the default timeout will be used.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; After submitting a form, you want to verify success: "Submit the form and check for the success message." Your AI clicks submit, then uses wait_for to ensure "Thank you for your submission" appears before continuing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Emulation Tools
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;emulate_cpu&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Throttles CPU performance to simulate slower devices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;throttlingRate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Required: The CPU throttling rate representing the slowdown factor 1-20x. Set the rate to 1 to disable throttling&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Want to see how your app performs on older devices? "Test the page performance on a slow device" triggers CPU throttling, helping identify performance bottlenecks that only appear on less powerful hardware.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;emulate_network&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Simulates various network conditions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;throttlingOption&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No emulation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Offline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Slow 3G&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fast 3G&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Slow 4G&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fast 4G&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Required: The network throttling option to emulate. Available throttling options are: No emulation, Offline, Slow 3G, Fast 3G, Slow 4G, Fast 4G. Set to "No emulation" to disable. Set to "Offline" to simulate offline network conditions.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Testing offline functionality? "Check if the app works without internet" sets the network to offline mode, then you can ask your AI to verify that your service worker and caching work correctly. You can also test on slow connections: "How does the page load on 3G?"&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;resize_page&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Changes the viewport dimensions to test responsive designs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;// Required: Page width&lt;/span&gt;
  &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;   &lt;span class="c1"&gt;// Required: Page height&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Checking mobile responsiveness? "Test the layout on iPhone 12 dimensions" resizes to 390x844, takes screenshots, and you can explicitly ask it to check that the mobile menu works correctly. Your AI can test multiple sizes in sequence to catch responsive design issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Tools
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;performance_start_trace&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Begins recording a performance trace to analyze page load and runtime performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;reload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;// Required: Determines if, once tracing has started, the page should be automatically reloaded.&lt;/span&gt;
  &lt;span class="nx"&gt;autoStop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;   &lt;span class="c1"&gt;// Required: Determines if the trace recording should be automatically stopped.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; "Analyze the performance of this page" starts a trace with reload enabled and autoStop true. After recording, your AI gets Core Web Vitals (LCP, FID, CLS) and performance insights automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;performance_stop_trace&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Stops the active performance trace and returns the analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt; None&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; If you started a trace with autoStop disabled (to capture user interactions), you'd stop it manually: "Stop the performance recording and show me the results." The trace includes detailed timing information and performance insights.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;performance_analyze_insight&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Gets detailed information about specific performance issues identified in a trace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;insightName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Required: The name of the Insight you want more information on. For example: "DocumentLatency" or "LCPBreakdown"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Here's the list of all 18 Chrome DevTools Performance Insights and their names:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each of these insights focuses on a specific aspect of performance that can help you make your pages faster. When you run a performance trace, Chrome analyzes your page and highlights which of these insights are relevant to your situation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Cache&lt;/code&gt;: Use efficient cache lifetimes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CLSCulprits&lt;/code&gt;: Layout shift culprits&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DocumentLatency&lt;/code&gt;: Document request latency&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DOMSize&lt;/code&gt;: Optimize DOM size&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DuplicatedJavaScript&lt;/code&gt;: Duplicated JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FontDisplay&lt;/code&gt;: Font display&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ForcedReflow&lt;/code&gt;: Forced reflow&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ImageDelivery&lt;/code&gt;: Improve image delivery&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;INPBreakdown&lt;/code&gt;: INP breakdown&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LCPBreakdown&lt;/code&gt;: LCP breakdown&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LCPDiscovery&lt;/code&gt;: LCP request discovery&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LegacyJavaScript&lt;/code&gt;: Legacy JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ModernHTTP&lt;/code&gt;: Modern HTTP&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NetworkDependencyTree&lt;/code&gt;: Network dependency tree&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RenderBlocking&lt;/code&gt;: Render-blocking requests&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SlowCSSSelector&lt;/code&gt;: CSS selector costs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ThirdParties&lt;/code&gt;: Third parties&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Viewport&lt;/code&gt;: Optimize viewport for mobile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to understand how Chrome generates these insights and what each one means for your page? The &lt;a href="https://developer.chrome.com/docs/performance/insights" rel="noopener noreferrer"&gt;Performance Insights documentation&lt;/a&gt; has all the details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; After running a trace that shows "LCP could be improved," ask "What's causing the slow LCP?" Your AI uses this tool to get a breakdown of what contributed to the Largest Contentful Paint time and suggests specific optimizations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Network Tools
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;list_network_requests&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Retrieves all network requests since the page loaded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;pageSize&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;// Optional: Maximum number of requests to return. When omitted, returns all requests.&lt;/span&gt;
  &lt;span class="nx"&gt;pageIdx&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;// Optional: Page number to return (0-based). When omitted, returns the first page.&lt;/span&gt;
  &lt;span class="nx"&gt;resourceTypes&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;    &lt;span class="c1"&gt;// Optional: Filter requests to only return requests of the specified resource types. When omitted or empty, returns all requests.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Debugging API calls? "Show me all the failed network requests" lists requests, filters to status codes 4xx and 5xx, and shows you what went wrong. You can also check "Are there any requests taking longer than 2 seconds?"&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;get_network_request&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Gets a network request by URL. You can get all requests by calling list_network_requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;reqid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Required: The reqid of a request on the page from the listed network requests&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; After listing requests, dive into details: "What headers were sent with that POST request?" Your AI uses the request ID to fetch complete information including headers, response body, timing breakdown, and status.&lt;/p&gt;

&lt;h3&gt;
  
  
  Debugging Tools
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;evaluate_script&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Executes JavaScript code in the page context and returns JSON-serializable results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Required: A JavaScript function to run in the currently selected page&lt;/span&gt;
  &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;     &lt;span class="c1"&gt;// Optional: An optional list of arguments to pass to the function.&lt;/span&gt;
    &lt;span class="na"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;      &lt;span class="c1"&gt;// The uid of an element on the page from the page content snapshot&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Need to inspect page state? "What's the current value of the search input?" triggers evaluation of &lt;code&gt;document.querySelector('input[name="search"]').value&lt;/code&gt;. You can also modify state, check global variables, or debug complex interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;list_console_messages&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Retrieves console logs, warnings, and errors from the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;pageSize&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;// Optional: Maximum number of messages to return. When omitted, returns all requests.&lt;/span&gt;
  &lt;span class="nx"&gt;pageIdx&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;// Optional: Page number to return (0-based). When omitted, returns the first page.&lt;/span&gt;
  &lt;span class="nx"&gt;types&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;     &lt;span class="c1"&gt;// Optional: Filter messages to only return messages of the specified resource types. When omitted or empty, returns all messages.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; After page interactions, check what happened: "Did any errors occur?" Your AI lists console messages, filters to errors, and explains what each one means. Great for catching JavaScript errors during testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;take_screenshot&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Captures visual snapshots of the page or specific elements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;format&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jpeg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;webp&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Optional: Type of format to save the screenshot as. Default is "png"&lt;/span&gt;
  &lt;span class="nx"&gt;quality&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;// Optional: Compression quality for JPEG and WebP formats (0-100). Higher values mean better quality but larger file sizes. Ignored for PNG format.&lt;/span&gt;
  &lt;span class="nx"&gt;uid&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;// Optional: The uid of an element on the page from the page content snapshot. If omitted takes a pages screenshot.&lt;/span&gt;
  &lt;span class="nx"&gt;fullPage&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;// Optional: If set to true takes a screenshot of the full page instead of the currently visible viewport. Incompatible with uid.&lt;/span&gt;
  &lt;span class="nx"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;      &lt;span class="c1"&gt;// Optional: The absolute path, or a path relative to the current working directory, to save the screenshot to instead of attaching it to the response.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Visual regression testing made easy: "Take a screenshot of the homepage and compare it to yesterday's version." Your AI captures the image, compares layouts, and highlights any differences. You can also screenshot specific components: "Show me what the modal looks like when open."&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;take_snapshot&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Generates a text representation of the page based on the accessibility tree, with unique IDs for each element. Think of this as getting a bird's eye view of your page's structure: it shows you all the interactive elements, their roles, and how they're organized, similar to how a screen reader would understand the page.&lt;/p&gt;

&lt;p&gt;The accessibility tree is a simplified version of the DOM that exposes only the information needed for assistive technologies. By using this tree, the snapshot focuses on semantically meaningful elements while filtering out purely visual markup. This makes it perfect for understanding page structure and finding elements to interact with.&lt;/p&gt;

&lt;p&gt;For a deeper dive into how Chrome's accessibility tree works and what information it provides, check out the &lt;a href="https://developer.chrome.com/blog/full-accessibility-tree" rel="noopener noreferrer"&gt;Full Accessibility Tree in Chrome DevTools&lt;/a&gt; blog post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;verbose&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;  &lt;span class="c1"&gt;// Optional: Whether to include all possible information available in the full a11y tree. Default is false.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; This is your AI's eyes into the page structure. When you ask "What form fields are on this page?" it takes a snapshot to see all interactive elements. The unique IDs from this snapshot are what other tools use to interact with specific elements.&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let's learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>Angular CLI MCP Server Guide</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Thu, 16 Oct 2025 08:47:37 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/angular-cli-mcp-server-guide-3jj5</link>
      <guid>https://dev.to/playfulprogramming-angular/angular-cli-mcp-server-guide-3jj5</guid>
      <description>&lt;p&gt;The Angular team has added something that changes how AI can help with your projects: &lt;strong&gt;an MCP server built into the CLI that provides everything from live documentation access to code modernization tools and interactive tutoring.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of relying on potentially stale training data, your AI can now actively query Angular's documentation, search through curated code examples, and access official best practices. The Model Context Protocol (MCP) acts as a bridge, letting your AI assistant tap into the same resources you'd manually search for.&lt;/p&gt;

&lt;p&gt;But it goes beyond just looking things up. Need to see how a modern feature works in practice? The &lt;code&gt;find_examples&lt;/code&gt; tool searches through a curated database of official Angular code examples that emphasizes current patterns (stable in v21). Got legacy code that needs updating? The &lt;code&gt;modernize&lt;/code&gt; tool doesn't just tell you what to change: it gives you the exact CLI commands to run, along with clear explanations of what's happening and why.&lt;/p&gt;

&lt;p&gt;And if you're new to Angular or want to level up your skills? The &lt;code&gt;ai_tutor&lt;/code&gt; tool (coming in v21) transforms your AI assistant into a dedicated Angular instructor, walking you through building a complete application while teaching you modern patterns along the way.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Angular v21 hasn't been officially released yet. At the time of writing, v21-next.6 is the latest preview version available, so keep in mind that some features mentioned here are still in development.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Available Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Angular v20.3
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Stable tools&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_best_practices&lt;/code&gt; - Retrieves official Angular coding standards and conventions from the Angular team&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;search_documentation&lt;/code&gt; - Queries live Angular documentation at angular.dev&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_projects&lt;/code&gt; - Analyzes workspace structure and provides comprehensive information about all Angular projects and libraries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Experimental tools&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;find_examples&lt;/code&gt; - Searches a curated database of official Angular code examples emphasizing modern features&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;modernize&lt;/code&gt; - Provides migration instructions and CLI commands for upgrading Angular code to current patterns&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onpush-zoneless-migration&lt;/code&gt; - Offers step-by-step guidance for adopting OnPush change detection strategy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Angular v21
&lt;/h3&gt;

&lt;p&gt;Angular v21 is unreleased yet, but most likely the &lt;code&gt;find_examples&lt;/code&gt; tool will become stable and there will be a new &lt;code&gt;ai_tutor&lt;/code&gt; tool: it loads Angular AI Tutor curriculum transforming the assistant into a specialized Angular instructor&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;p&gt;The Angular CLI MCP server accepts several command-line options that control its operational behavior.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;--read-only&lt;/code&gt; flag restricts the server to register only tools that do not make changes to the project.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;--local-only&lt;/code&gt; flag enables tools that don't need an internet connection. For example, the &lt;code&gt;search_documentation&lt;/code&gt; tool searches the official Angular documentation at &lt;a href="https://angular.dev" rel="noopener noreferrer"&gt;https://angular.dev&lt;/a&gt; and requires an internet connection, so it would be disabled with this flag.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;--experimental-tools&lt;/code&gt; option enables specific experimental features by accepting a list of tool names.&lt;/p&gt;

&lt;p&gt;To enable both stable and experimental tools, add the following MCP server configuration to your &lt;code&gt;mcp.json&lt;/code&gt; file:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular v20.3.5:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;depending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IDE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tool&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"angular-cli"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"@angular/cli@20.3.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--experimental-tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"modernize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"onpush-zoneless-migration"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"find_examples"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Angular v21.0.0-next.7:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;depending&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IDE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tool&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"angular-cli"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"@angular/cli@21.0.0-next.7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--experimental-tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"modernize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"onpush-zoneless-migration"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tool Reference
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;ai_tutor&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Angular v21+, local, read-only&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Loads the Angular AI Tutor curriculum and persona, transforming the AI assistant into a specialized Angular instructor that guides developers through building a complete "Smart Recipe Box" application. The tool provides structured learning paths through Angular concepts with hands-on exercises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Want to dive into modern Angular but not sure where to start? Just ask your AI assistant "Teach me Angular" and watch what happens, the tutor kicks in and guides you through building a real app from scratch. It's like having a patient mentor who won't judge you for asking "wait, what's a component again?" for the third time. The curriculum walks you through foundations first, then gradually introduces more advanced concepts as you build out the Smart Recipe Box application.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;get_best_practices&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Local, read-only&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Retrieves the official Angular Best Practices Guide containing current coding standards and conventions including standalone components, signal-based state management, typed forms, modern control flow syntax, and architectural best practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Make this your first step before writing or modifying any Angular code. It's like checking the map before a road trip, you'll save yourself from wrong turns later. Just ask your AI assistant to "Load the Angular best practices" and you'll be working with the latest standards from the start.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;search_documentation&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Read-only&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Queries the live Angular documentation at angular.dev. The tool accepts a search query, optionally fetches the full content of the top result, and can target specific Angular major versions for relevant results. This ensures developers receive up-to-date information about Angular features and APIs rather than potentially outdated training data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;               &lt;span class="c1"&gt;// Required: Search query&lt;/span&gt;
    &lt;span class="nx"&gt;includeTopContent&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Optional: default true, fetches content of top result&lt;/span&gt;
    &lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;             &lt;span class="c1"&gt;// Optional: Angular major version to search&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Let's say you're wondering "Are components standalone by default in Angular?" Just ask your AI assistant naturally, and it'll check your project's Angular version, then query the official documentation at angular.dev to get you the right answer for your specific setup. No more guessing whether that Stack Overflow answer from 2019 still applies!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;list_projects&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Local, read only&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Analyzes the workspace structure and returns comprehensive information about all Angular workspaces and projects within the current directory. The tool reads &lt;code&gt;angular.json&lt;/code&gt; configuration files and provides details including project names, types, root directories, source roots, and selector prefixes. This enables AI assistants to understand the specific workspace structure, whether it's a single application, multiple apps, libraries, or a monorepo setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Practice:&lt;/strong&gt; You can ask for this information explicitly with something like "List the projects in my workspace," but your AI assistant will also pull this data automatically when you ask architecture questions. For example, if you ask "Where should I place the new UserSettingsComponent?" the assistant will check your workspace structure first to give you contextually relevant advice.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;find_examples&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Local, read only, experimental in v20.3, stable from v21+, Requires Node.js 22.16 or higher&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Searches a curated SQLite database of official Angular code examples with emphasis on modern and recently updated features. The examples are maintained in the Angular CLI repository at &lt;a href="https://github.com/angular/angular-cli/tree/main/packages/angular/cli/lib/examples" rel="noopener noreferrer"&gt;https://github.com/angular/angular-cli/tree/main/packages/angular/cli/lib/examples&lt;/a&gt;. At the time of writing, there is a single &lt;code&gt;@if&lt;/code&gt; control flow example available, but we expect the collection to grow significantly for the release of Angular v21.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                      &lt;span class="c1"&gt;// Required: FTS5 search query&lt;/span&gt;
    &lt;span class="nx"&gt;keywords&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;                &lt;span class="c1"&gt;// Optional: Exact keywords to filter&lt;/span&gt;
    &lt;span class="nx"&gt;required_packages&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;       &lt;span class="c1"&gt;// Optional: NPM packages the example must use&lt;/span&gt;
    &lt;span class="nx"&gt;related_concepts&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;        &lt;span class="c1"&gt;// Optional: High-level concepts to filter by&lt;/span&gt;
    &lt;span class="nx"&gt;includeExperimental&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;       &lt;span class="c1"&gt;// Optional: default false&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;modernize&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Local, read only, experimental in v20.3 and v21&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Provides detailed instructions and CLI commands for upgrading Angular code to align with current patterns and syntax. The tool generates step-by-step migration guidance for specific transformations or provides general modernization recommendations. Each transformation includes the exact Angular CLI command to execute along with explanatory context about what will change and why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;transformations&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;  &lt;span class="c1"&gt;// Optional: Array of transformation names&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Available transformations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;control-flow-migration&lt;/code&gt; - Migrate from &lt;code&gt;*ngIf/*ngFor&lt;/code&gt; to &lt;code&gt;@if/@for&lt;/code&gt; syntax&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;self-closing-tags-migration&lt;/code&gt; - Convert HTML tags to self-closing format&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;inject&lt;/code&gt; - Migrate from constructor injection to &lt;code&gt;inject()&lt;/code&gt; function&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;output-migration&lt;/code&gt; - Migrate from &lt;code&gt;@Output&lt;/code&gt; to &lt;code&gt;output()&lt;/code&gt; API&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;signal-input-migration&lt;/code&gt; - Migrate from &lt;code&gt;@Input&lt;/code&gt; to &lt;code&gt;input()&lt;/code&gt; signals&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;signal-queries-migration&lt;/code&gt; - Migrate &lt;code&gt;@ViewChild/@ContentChild&lt;/code&gt; to &lt;code&gt;viewChild()/contentChild()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;standalone&lt;/code&gt; - Convert &lt;code&gt;NgModule&lt;/code&gt;-based components to standalone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Let's say you've got an older component that still uses constructor injection and you want to modernize it. Just tell your AI assistant something like "modernize src/app/app.ts" and watch the magic happen. The assistant will check the Angular best practices first (you know, to make sure it's giving you current advice), then use the modernize tool to figure out exactly which transformations you need. You'll get the specific CLI commands to run, like &lt;code&gt;ng generate @angular/core:inject&lt;/code&gt;, along with a clear explanation of what's changing and why.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;onpush-zoneless-migration&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Local, read only, experimental in v20.3 and v21&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Analyzes code and provides iterative, step-by-step migration guidance for adopting &lt;code&gt;OnPush&lt;/code&gt; change detection strategy, which serves as a prerequisite for zoneless Angular applications. The tool operates through repeated invocations, providing one actionable step at a time with clear explanations. This incremental approach ensures developers understand each change while maintaining code stability throughout the migration process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input Schema&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;fileOrDirPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Required: Absolute path to file or directory to analyze and migrate&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In Action:&lt;/strong&gt; Point it at a component or directory (something like "analyze src/app/dashboard for OnPush migration"), and you'll get one clear, actionable step to work on. Complete that step, then run the tool again for the next one. It's like having a patient guide who knows exactly what order to tackle things in. This step-by-step approach keeps you from getting overwhelmed, and your code stays stable throughout the process. Much better than attempting a big-bang migration and crossing your fingers!&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Angular Addicts #42: Signal Forms API, AI powered apps with Angular &amp; more</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Tue, 07 Oct 2025 07:18:19 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/angular-addicts-42-signal-forms-api-ai-powered-apps-with-angular-more-477n</link>
      <guid>https://dev.to/playfulprogramming-angular/angular-addicts-42-signal-forms-api-ai-powered-apps-with-angular-more-477n</guid>
      <description>&lt;h2&gt;
  
  
  👋Hey fellow Angular Addict
&lt;/h2&gt;

&lt;p&gt;This is the 42nd issue of the Angular Addicts Newsletter, a monthly collection of carefully selected Angular resources that caught my attention. (Here are the &lt;a href="https://www.angularaddicts.com/p/angular-addicts-40-angular-20-1-zoneless-testing-native-federation-more" rel="noopener noreferrer"&gt;40th&lt;/a&gt;, &lt;a href="https://www.angularaddicts.com/p/angular-addicts-39-zoneless-incremental-hydration-ddd" rel="noopener noreferrer"&gt;39th&lt;/a&gt; and &lt;a href="https://www.angularaddicts.com/p/angular-addicts-38-angular-20-events-in-signal-store" rel="noopener noreferrer"&gt;38th&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  📢 Release announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.ninja-squad.com/2025/09/11/what-is-new-angular-20.3/" rel="noopener noreferrer"&gt;What’s new in Angular 20.3?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/cedric_exbrayat" rel="noopener noreferrer"&gt;Cédric Exbrayat&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚦 Signal forms
&lt;/h2&gt;

&lt;p&gt;Angular v21-next releases introduce the new experimental &lt;strong&gt;Signal Forms API.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angulararchitects.io/en/blog/all-about-angulars-new-signal-forms/" rel="noopener noreferrer"&gt;All About Angular's New Signal Forms&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/ManfredSteyer" rel="noopener noreferrer"&gt;Manfred Steyer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/@schnabelelisa0/angular-signal-forms-the-most-awaited-feature-is-here-161fd722f573" rel="noopener noreferrer"&gt;Angular Signal Forms: The most awaited feature is here&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/elisa-schnabel-2a634a372/" rel="noopener noreferrer"&gt;Elisa Schnabel&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/this-is-angular/signals-form-introduction-11d1"&gt;Signals Form: Introduction&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/Nicooss54" rel="noopener noreferrer"&gt;Nicolas Frizzarin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💎Angular Gems of September, 2025
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angular.dev/beyond-the-horizon-how-angular-is-embracing-ai-for-next-gen-apps-7a7ed706e1a3" rel="noopener noreferrer"&gt;Beyond the Horizon: How Angular is Embracing AI for Next-Gen Apps&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/simona_cotin" rel="noopener noreferrer"&gt;Simona Cotin&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://push-based.io/article/dynamic-angular-config-for-ssr" rel="noopener noreferrer"&gt;Dynamic Angular Config for SSR. Setup smarter Server-Side rendering&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/Enea_Jahollari" rel="noopener noreferrer"&gt;Enea Jahollari&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angularspace.com/building-ai-powered-apps-with-angular-and-gemini/" rel="noopener noreferrer"&gt;Building AI-powered apps with Angular and Gemini&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/Armandotrue" rel="noopener noreferrer"&gt;Armen Vardanyan&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angulartraining.com/dynamic-component-creation-with-angular-f81bae0109ab" rel="noopener noreferrer"&gt;Dynamic component creation with Angular&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AlainChautard" rel="noopener noreferrer"&gt;Alain Chautard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/this-is-angular/afterrendereffect-afternextrender-aftereveryrender-renderer2-106o"&gt;afterRenderEffect, afterNextRender, afterEveryRender &amp;amp; Renderer2&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/eduard-krivanek/" rel="noopener noreferrer"&gt;Eduard Krivanek&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/romain_geffrault_10d88369/optimizing-angular-signals-with-smart-equality-checks-3ccf"&gt;Optimizing Angular Signals with Smart Equality Checks&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/romain-geffrault/" rel="noopener noreferrer"&gt;Romain Geffrault&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

&lt;h2&gt;
  
  
  🕹️Previous issues
&lt;/h2&gt;

&lt;p&gt;If you missed the previous issues of the newsletter, you can read them &lt;a href="https://www.angularaddicts.com/t/angular-addicts-monthly" rel="noopener noreferrer"&gt;here&lt;/a&gt;, these are the latest 3 issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-40-angular-20-1-zoneless-testing-native-federation-more" rel="noopener noreferrer"&gt;Angular Addicts #40: Angular 20.1, NgRx 20, Zoneless testing, Native Federation &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-39-zoneless-incremental-hydration-ddd" rel="noopener noreferrer"&gt;Angular Addicts #39: Zoneless Angular, Incremental hydration, DDD &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-38-angular-20-events-in-signal-store" rel="noopener noreferrer"&gt;Angular Addicts #38: Angular 20, Events plugin for SignalStore &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📨 Submit your Angular resource
&lt;/h2&gt;

&lt;p&gt;Have you found or written an interesting Angular-related article, tweet or other resource lately? Please let me know here in the comments or send me a DM on &lt;a href="https://twitter.com/gergelyszerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! I might feature it in the next Angular Addicts issue!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Angular Addicts #41: Angular 20.2, Animations, Monorepos &amp; more</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Tue, 16 Sep 2025 07:51:10 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/angular-addicts-41-angular-202-animations-monorepos-more-2la4</link>
      <guid>https://dev.to/playfulprogramming-angular/angular-addicts-41-angular-202-animations-monorepos-more-2la4</guid>
      <description>&lt;h2&gt;
  
  
  👋Hey fellow Angular Addict
&lt;/h2&gt;

&lt;p&gt;This is the 41st issue of the Angular Addicts Newsletter, a monthly collection of carefully selected Angular resources that caught my attention. (Here are the &lt;a href="https://www.angularaddicts.com/p/angular-addicts-40-angular-20-1-zoneless-testing-native-federation-more" rel="noopener noreferrer"&gt;40th&lt;/a&gt;, &lt;a href="https://www.angularaddicts.com/p/angular-addicts-39-zoneless-incremental-hydration-ddd" rel="noopener noreferrer"&gt;39th&lt;/a&gt; and &lt;a href="https://www.angularaddicts.com/p/angular-addicts-38-angular-20-events-in-signal-store" rel="noopener noreferrer"&gt;38th&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  📢 Release announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angular.dev/angular-summer-update-2025-1987592a0b42" rel="noopener noreferrer"&gt;Angular Summer Update 2025&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/marktechson" rel="noopener noreferrer"&gt;Mark (Techson) Thompson&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/kuehlers/" rel="noopener noreferrer"&gt;Jens Kuehlers&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.ninja-squad.com/2025/08/20/what-is-new-angular-20.2/" rel="noopener noreferrer"&gt;What’s new in Angular 20.2?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/cedric_exbrayat" rel="noopener noreferrer"&gt;Cédric Exbrayat&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💎Angular Gems of August, 2025
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/this-is-angular/bring-your-angular-app-to-life-with-animejs-4kkc"&gt;Bring Your Angular App to Life with Anime.js&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/Williamjuan27" rel="noopener noreferrer"&gt;William Juan&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://stefanhaas.xyz/article/monorepos-101/" rel="noopener noreferrer"&gt;Introduction to Frontend Monorepos&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/StefanvHaas" rel="noopener noreferrer"&gt;Stefan Haas&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angularspace.com/migrating-to-angular-signals/" rel="noopener noreferrer"&gt;Migrating to Angular Signals&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/Armandotrue" rel="noopener noreferrer"&gt;Armen Vardanyan&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angulartraining.com/component-architecture-with-inputs-model-and-viewchild-a236a48b461f" rel="noopener noreferrer"&gt;Component architecture with inputs, model(), and viewChild()&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AlainChautard" rel="noopener noreferrer"&gt;Alain Chautard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angulararchitects.io/en/blog/interview-how-ai-is-transforming-angular-development-a-conversation-with-daniel/" rel="noopener noreferrer"&gt;Interview: How AI Is Transforming Angular Development (Transcript)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/ManfredSteyer" rel="noopener noreferrer"&gt;Manfred Steyer&lt;/a&gt; and &lt;a href="https://x.com/sogldaniel" rel="noopener noreferrer"&gt;Daniel Sogl&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

&lt;h2&gt;
  
  
  🕹️Previous issues
&lt;/h2&gt;

&lt;p&gt;If you missed the previous issues of the newsletter, you can read them &lt;a href="https://www.angularaddicts.com/t/angular-addicts-monthly" rel="noopener noreferrer"&gt;here&lt;/a&gt;, these are the latest 3 issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-40-angular-20-1-zoneless-testing-native-federation-more" rel="noopener noreferrer"&gt;Angular Addicts #40: Angular 20.1, NgRx 20, Zoneless testing, Native Federation &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-39-zoneless-incremental-hydration-ddd" rel="noopener noreferrer"&gt;Angular Addicts #39: Zoneless Angular, Incremental hydration, DDD &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-38-angular-20-events-in-signal-store" rel="noopener noreferrer"&gt;Angular Addicts #38: Angular 20, Events plugin for SignalStore &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📨 Submit your Angular resource
&lt;/h2&gt;

&lt;p&gt;Have you found or written an interesting Angular-related article, tweet or other resource lately? Please let me know here in the comments or send me a DM on &lt;a href="https://twitter.com/gergelyszerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! I might feature it in the next Angular Addicts issue!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Angular Addicts #40: Angular 20.1, NgRx 20, Zoneless testing, Native Federation &amp; more</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Wed, 13 Aug 2025 08:18:21 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/angular-addicts-40-angular-201-ngrx-20-zoneless-testing-native-federation-more-3cob</link>
      <guid>https://dev.to/playfulprogramming-angular/angular-addicts-40-angular-201-ngrx-20-zoneless-testing-native-federation-more-3cob</guid>
      <description>&lt;h2&gt;
  
  
  👋Hey fellow Angular Addict
&lt;/h2&gt;

&lt;p&gt;This is the 40th issue of the Angular Addicts Newsletter, a monthly collection of carefully selected Angular resources that caught my attention. (Here are the &lt;a href="https://www.angularaddicts.com/p/angular-addicts-39-zoneless-incremental-hydration-ddd" rel="noopener noreferrer"&gt;39th&lt;/a&gt;, &lt;a href="https://www.angularaddicts.com/p/angular-addicts-38-angular-20-events-in-signal-store" rel="noopener noreferrer"&gt;38th&lt;/a&gt; and &lt;a href="https://www.angularaddicts.com/p/angular-addicts-37-rspack-aria-material" rel="noopener noreferrer"&gt;37th&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  📢 Release announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.ninja-squad.com/2025/07/09/what-is-new-angular-20.1/" rel="noopener noreferrer"&gt;What’s new in Angular 20.1?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/cedric_exbrayat" rel="noopener noreferrer"&gt;Cédric Exbrayat&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/ngrx/announcing-ngrx-v20-the-power-of-events-enhanced-dx-and-a-mature-signalstore-2fdm"&gt;Announcing NgRx v20: The Power of Events, Enhanced DX, and a Mature SignalStore!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AlexOkrushko" rel="noopener noreferrer"&gt;Alex Okrushko&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💎Angular Gems of July, 2025
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/ngmaterialdev/whats-new-in-angular-material-20-1njb"&gt;What's New in Angular Material 20&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/shhdharmen" rel="noopener noreferrer"&gt;Dharmen Shah&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://javascript.plainenglish.io/angular-zoneless-unit-testing-e048e1d9220d" rel="noopener noreferrer"&gt;Angular Zoneless Unit Testing&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/francesco-borzi/" rel="noopener noreferrer"&gt;Francesco Borzì&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://angulartraining.medium.com/how-to-use-the-new-signal-graph-in-the-angular-dev-tools-b5b8a0ace6dd" rel="noopener noreferrer"&gt;How to use the new Signal Graph in the Angular Dev Tools?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AlainChautard" rel="noopener noreferrer"&gt;Alain Chautard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 Native Federation Just Got Better: Performance, DX, and Simplicity
&lt;/h3&gt;

&lt;p&gt;This article is part of &lt;a href="https://x.com/ManfredSteyer" rel="noopener noreferrer"&gt;Manfred Steyer&lt;/a&gt;'s Micro Frontends with Modern Angular Series:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angulararchitects.io/blog/micro-frontends-with-modern-angular-part-1-standalone-and-esbuild/" rel="noopener noreferrer"&gt;Micro Frontends with Modern Angular – Part 1: Standalone and esbuild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angulararchitects.io/blog/micro-frontends-with-modern-angular-part-2-multi-version-and-multi-framework-solutions-with-angular-elements-and-web-components/" rel="noopener noreferrer"&gt;Micro Frontends with Modern Angular – Part 2: Multi-Version and Multi-Framework Solutions with Angular Elements and Web Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angulararchitects.io/blog/combining-native-federation-and-module-federation/" rel="noopener noreferrer"&gt;Combining Native Federation and Module Federation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angulararchitects.io/blog/ssr-and-hydration-with-native-federation-for-angular/" rel="noopener noreferrer"&gt;SSR and Hydration with Native Federation for Angular&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angulararchitects.io/blog/fixing-dx-friction-automatic-shell-reloading-in-native-federation/" rel="noopener noreferrer"&gt;Fixing DX Friction: Automatic Shell Reloading in Native Federation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angulararchitects.io/blog/native-federation-just-got-better-performance-dx-and-simplicity/" rel="noopener noreferrer"&gt;Native Federation Just Got Better: Performance, DX, and Simplicity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angularspace.com/hidden-parts-of-angular-view-providers/" rel="noopener noreferrer"&gt;Hidden parts of Angular: View Providers&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/pawelkubiakdev" rel="noopener noreferrer"&gt;Paweł Kubiak&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/this-is-angular/senior-angular-interview-questions-ji0"&gt;Senior Angular Interview Questions&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/eduard-krivanek/" rel="noopener noreferrer"&gt;Eduard Krivanek&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://netbasal.medium.com/injection-aware-lazy-loading-for-loadcomponent-and-loadchildren-in-angular-3fddec149400" rel="noopener noreferrer"&gt;Injection-Aware Lazy Loading for loadComponent and loadChildren in Angular&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/NetanelBasal" rel="noopener noreferrer"&gt;Netanel Basal&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

&lt;h2&gt;
  
  
  🕹️Previous issues
&lt;/h2&gt;

&lt;p&gt;If you missed the previous issues of the newsletter, you can read them &lt;a href="https://www.angularaddicts.com/t/angular-addicts-monthly" rel="noopener noreferrer"&gt;here&lt;/a&gt;, these are the latest 3 issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-39-zoneless-incremental-hydration-ddd" rel="noopener noreferrer"&gt;Angular Addicts #39: Zoneless Angular, Incremental hydration, DDD &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-38-angular-20-events-in-signal-store" rel="noopener noreferrer"&gt;Angular Addicts #38: Angular 20, Events plugin for SignalStore &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-37-rspack-aria-material" rel="noopener noreferrer"&gt;Angular Addicts #37: Angular and Rspack, ARIA, Custom Material styling &amp;amp; more &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📨 Submit your Angular resource
&lt;/h2&gt;

&lt;p&gt;Have you found or written an interesting Angular-related article, tweet or other resource lately? Please let me know here in the comments or send me a DM on &lt;a href="https://twitter.com/gergelyszerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! I might feature it in the next Angular Addicts issue!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Angular Addicts #39: Zoneless Angular, Incremental hydration, DDD &amp; more</title>
      <dc:creator>Gergely Szerovay</dc:creator>
      <pubDate>Tue, 15 Jul 2025 07:43:21 +0000</pubDate>
      <link>https://dev.to/playfulprogramming-angular/angular-addicts-39-zoneless-angular-incremental-hydration-ddd-more-4pkl</link>
      <guid>https://dev.to/playfulprogramming-angular/angular-addicts-39-zoneless-angular-incremental-hydration-ddd-more-4pkl</guid>
      <description>&lt;h2&gt;
  
  
  👋Hey fellow Angular Addict
&lt;/h2&gt;

&lt;p&gt;This is the 39th issue of the Angular Addicts Newsletter, a monthly collection of carefully selected Angular resources that caught my attention. (Here are the &lt;a href="https://www.angularaddicts.com/p/angular-addicts-38-angular-20-events-in-signal-store" rel="noopener noreferrer"&gt;38th&lt;/a&gt;, &lt;a href="https://www.angularaddicts.com/p/angular-addicts-37-rspack-aria-material" rel="noopener noreferrer"&gt;37th&lt;/a&gt; and &lt;a href="https://www.angularaddicts.com/p/angular-addicts-36-angular-19-2-nx-week" rel="noopener noreferrer"&gt;36th&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  📢 Release announcements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://nx.dev/blog/nx-21-2-release" rel="noopener noreferrer"&gt;Nx 21.2 (featuring Angular 20, NestJS 11, and Storybook 9)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/philip-fulcher/" rel="noopener noreferrer"&gt;Philip Fulcher&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💎Angular Gems of June, 2025
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angular.dev/the-angular-custom-profiling-track-is-now-available-0f9d8d36218a" rel="noopener noreferrer"&gt;The Angular Custom Profiling Track is now available (in Chrome DevTools)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/marktechson" rel="noopener noreferrer"&gt;Mark (Techson) Thompson&lt;/a&gt; and &lt;a href="https://x.com/pkozlowski_os" rel="noopener noreferrer"&gt;Pawel Kozlowski&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angulararchitects.io/en/blog/all-about-ddd-for-frontend-architectures-with-angular-co/" rel="noopener noreferrer"&gt;All about DDD for Frontend Architectures (with Angular &amp;amp; Co.)&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/ManfredSteyer" rel="noopener noreferrer"&gt;Manfred Steyer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 Implementing Incremental Hydration in Angular
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://x.com/Michael_Hladky" rel="noopener noreferrer"&gt;Michael Hladky&lt;/a&gt;'s series about incremental hydration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://push-based.io/article/incremental-hydration-in-angular-introduction-part-1-3" rel="noopener noreferrer"&gt;Incremental Hydration in Angular: Introduction (Part 1)&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://push-based.io/article/the-game-changing-impact-of-incremental-hydration-in-angular-part-2" rel="noopener noreferrer"&gt;The Game-Changing Impact of Incremental Hydration in Angular (Part 2)&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://push-based.io/article/implementing-incremental-hydration-in-angular-part-3-3" rel="noopener noreferrer"&gt;Implementing Incremental Hydration in Angular (Part 3)&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angularspace.com/strategy-pattern-the-angular-way-di-and-runtime-flexibility/" rel="noopener noreferrer"&gt;Strategy Pattern the Angular Way: DI and Runtime Flexibility&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://www.linkedin.com/in/ivan-kudria/" rel="noopener noreferrer"&gt;Ivan Kudria&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://blog.angulartraining.com/the-angular-compiler-from-your-code-to-browser-code-9b20ac2cbac6" rel="noopener noreferrer"&gt;The Angular Compiler: From Your Code to Browser Code&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/AlainChautard" rel="noopener noreferrer"&gt;Alain Chautard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://angularexperts.ch/blog/zoneless-angular" rel="noopener noreferrer"&gt;Zoneless Angular&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/nivekcode" rel="noopener noreferrer"&gt;Kevin Kreuzer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://netbasal.medium.com/angulars-new-asynchronous-redirects-334f144c3ed0" rel="noopener noreferrer"&gt;Angular’s New Asynchronous Redirects&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/NetanelBasal" rel="noopener noreferrer"&gt;Netanel Basal&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://medium.com/@groupp/effective-debouncing-in-angular-keep-signals-pure-703eb105a495" rel="noopener noreferrer"&gt;Effective Debouncing in Angular: Keep Signals Pure&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/ArthurGroupp" rel="noopener noreferrer"&gt;Arthur Groupp&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://dev.to/ycmjason/introducing-ts-migrating-the-best-way-to-upgrade-your-tsconfig-2jmn"&gt;Introducing @ts-migrating: The Best Way To Upgrade Your TSConfig&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://x.com/ycmjason" rel="noopener noreferrer"&gt;YCM Jason&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📰 &lt;a href="https://www.angularspace.com/angular-error-handling/" rel="noopener noreferrer"&gt;Angular Error Handling&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;By &lt;a href="https://twitter.com/Armandotrue" rel="noopener noreferrer"&gt;Armen Vardanyan&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻About the author
&lt;/h2&gt;

&lt;p&gt;My name is &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;Gergely Szerovay&lt;/a&gt;, I worked as a data scientist and full-stack developer for many years, and I have been working as frontend tech lead, focusing on Angular based frontend development. As part of my role, I'm constantly following how Angular and the frontend development scene in general is evolving. To share my knowledge, I started the &lt;a href="https://angularaddicts.com/" rel="noopener noreferrer"&gt;Angular Addicts&lt;/a&gt; monthly newsletter and publication in 2022, so that I can send you the best resources I come across each month. Whether you are a seasoned Angular Addict or a beginner, I got you covered. Let me know if you would like to be included as a writer. Let’s learn Angular together! &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Angular has evolved very rapidly over the past few years, and in the past year, with the rise of generative AI, our software development workflows have also evolved rapidly. In order to closely follow the evolution of AI-assisted software development, I decided to start building AI tools in public, and publish my progress on &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;AIBoosted.dev&lt;/a&gt;. Join my on this learning journey: &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Subscribe here&lt;/a&gt; 🚀&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.angularaddicts.com/" rel="noopener noreferrer"&gt;Substack (Angular Addicts)&lt;/a&gt;, &lt;a href="https://aiboosted.dev" rel="noopener noreferrer"&gt;Substack (AIBoosted.dev)&lt;/a&gt;, &lt;a href="https://medium.com/@GergelySzerovay" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://dev.to/gergelyszerovay"&gt;Dev.to&lt;/a&gt;, &lt;a href="https://twitter.com/GergelySzerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/gergelyszerovay/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; to learn more about Angular, and how to build AI apps with AI, Typescript, React and Angular!&lt;/p&gt;

&lt;h2&gt;
  
  
  🕹️Previous issues
&lt;/h2&gt;

&lt;p&gt;If you missed the previous issues of the newsletter, you can read them &lt;a href="https://www.angularaddicts.com/t/angular-addicts-monthly" rel="noopener noreferrer"&gt;here&lt;/a&gt;, these are the latest 3 issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-38-angular-20-events-in-signal-store" rel="noopener noreferrer"&gt;Angular Addicts #38: Angular 20, Events plugin for SignalStore &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-37-rspack-aria-material" rel="noopener noreferrer"&gt;Angular Addicts #37: Angular and Rspack, ARIA, Custom Material styling &amp;amp; more &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.angularaddicts.com/p/angular-addicts-36-angular-19-2-nx-week" rel="noopener noreferrer"&gt;Angular Addicts #36: Angular 19.2, Angular week at Nx, Accessibility testing &amp;amp; more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📨 Submit your Angular resource
&lt;/h2&gt;

&lt;p&gt;Have you found or written an interesting Angular-related article, tweet or other resource lately? Please let me know here in the comments or send me a DM on &lt;a href="https://twitter.com/gergelyszerovay" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;! I might feature it in the next Angular Addicts issue!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
