<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Angular Blog - Medium]]></title>
        <description><![CDATA[The latest news and tips from the Angular team - Medium]]></description>
        <link>https://blog.angular.dev?source=rss----447683c3d9a3---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Angular Blog - Medium</title>
            <link>https://blog.angular.dev?source=rss----447683c3d9a3---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 15 Apr 2026 05:48:44 GMT</lastBuildDate>
        <atom:link href="https://blog.angular.dev/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Mastering Dynamic Components, HTTP Resources, and AI Writing Assistants ️]]></title>
            <link>https://blog.angular.dev/mastering-dynamic-components-http-resources-and-ai-writing-assistants-%EF%B8%8F-eb1a773270e4?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/eb1a773270e4</guid>
            <category><![CDATA[angular]]></category>
            <dc:creator><![CDATA[Angular]]></dc:creator>
            <pubDate>Mon, 13 Apr 2026 15:53:54 GMT</pubDate>
            <atom:updated>2026-04-13T15:53:52.960Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*C2KKyjaibHY9LVSBSHdxkw.png" /></figure><p>Sometimes the best way to learn is to dive straight into the code! This week, we’re highlighting several hands-on repositories that demonstrate the latest Angular patterns and how to integrate <strong>Google Gemini</strong> for real-time user assistance.</p><p>Check out these essential code samples and templates.</p><h3><strong>Advanced Dynamic Component Creation</strong></h3><p>Antonio Cardenas <strong>@yeoudev</strong> provides a masterclass in using ViewContainerRef. This repository and StackBlitz demo show you exactly how to handle dynamic component instantiation in a clean, scalable way.</p><ul><li>Explore the code: <a href="https://github.com/AntonioCardenas/ngviewcontainerref">https://github.com/AntonioCardenas/ngviewcontainerref</a></li><li>Try the demo: <a href="https://stackblitz.com/~/github.com/AntonioCardenas/ngviewcontainerref">https://stackblitz.com/~/github.com/AntonioCardenas/ngviewcontainerref</a></li></ul><h3><strong>Angular Vibe Coding: The Ultimate CRUD Template</strong></h3><p>Need to start a project fast? Antonio Cardenas <strong>@yeoudev</strong> offers a “Vibe Coding” template that comes ready with basic CRUD functionality and helpful scripts to clean up boilerplate, letting you focus on your unique logic.</p><ul><li>Grab the template: <a href="https://github.com/AntonioCardenas/angularvibecoding">https://github.com/AntonioCardenas/angularvibecoding</a></li></ul><h3><strong>Mastering httpResource with Pirates</strong></h3><p>Deborah Kurata <strong>@deborahkurata</strong> brings her signature clarity to the new <strong>Signal-based httpResource</strong>. This fun “Pirates” example demonstrates how to fetch and manage data using the newest reactive primitives in Angular.</p><ul><li>Check out the examples: <a href="https://github.com/DeborahK/angular-http-resource-pirates">https://github.com/DeborahK/angular-http-resource-pirates</a></li></ul><h3><strong>Build an AI-Powered Grammar Assistant</strong></h3><p>Ankit Sharma <strong>@ankitsharma_007</strong> shows the power of the <strong>Google Gemini API</strong> in a lightweight Angular app. This project provides real-time grammar corrections as you type — a perfect blueprint for adding AI utility to your own editors.</p><ul><li>See the AI writer: <a href="https://github.com/AnkitSharma-007/angular-gemini-writing-assistant">https://github.com/AnkitSharma-007/angular-gemini-writing-assistant</a></li></ul><p><strong>Have you built a cool helper tool with Gemini or tried the new httpResource?</strong> Your code samples could be the missing piece for another developer!</p><p><strong>Keep the community growing!</strong> Use <strong>#AngularSparkles</strong> and <strong>#AngularAI</strong> to share your latest GitHub repos and StackBlitz demos!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eb1a773270e4" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/mastering-dynamic-components-http-resources-and-ai-writing-assistants-%EF%B8%8F-eb1a773270e4">Mastering Dynamic Components, HTTP Resources, and AI Writing Assistants 🛠️</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Local AI, Reactive Routing, and the Vitest Migration! ⚡]]></title>
            <link>https://blog.angular.dev/local-ai-reactive-routing-and-the-vitest-migration-bdddad0cfa96?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/bdddad0cfa96</guid>
            <category><![CDATA[angular-weekly-newsletter]]></category>
            <category><![CDATA[angular]]></category>
            <dc:creator><![CDATA[Angular]]></dc:creator>
            <pubDate>Fri, 27 Mar 2026 13:59:50 GMT</pubDate>
            <atom:updated>2026-03-27T13:59:50.747Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="This week in the Angular Community march 27 2026" src="https://cdn-images-1.medium.com/max/960/1*Y4nmvoULmlOh-P6pEPRFmw.png" /></figure><p>The Angular ecosystem is expanding beyond the browser’s traditional limits! From running AI models locally to migrating your entire test suite to <strong>Vitest</strong>, our community experts are leading the charge into a more performant future.</p><p>Check out these latest deep dives:</p><h4><strong>Why the Frontend Should Run AI Models Locally with ONNX</strong></h4><p>Sonu Kapoor <strong>@SonuKapoor1978</strong> explores a fascinating shift in architecture: bringing AI directly to the client. Learn how to run <strong>AI models locally</strong> using ONNX and Angular for better privacy and lower latency.</p><ul><li>Read the article:<a href="https://thenewstack.io/why-the-frontend-should-run-ai-models-locally-with-onnx/"> https://thenewstack.io/why-the-frontend-should-run-ai-models-locally-with-onnx/</a></li></ul><h4><strong>Signal Forms: Smarter Inputs and Reactive Routing</strong></h4><p>In this real-world guide, Sonu Kapoor <strong>@SonuKapoor1978</strong> breaks down how to use <strong>Angular Signals</strong> to create highly responsive inputs and manage complex routing states with ease.</p><ul><li>Check out the deep dive:<a href="https://www.codemag.com/Article/2511041/Angular-Signals-in-the-Real-World-Smarter-Inputs-and-Reactive-Routing"> https://www.codemag.com/Article/2511041/Angular-Signals-in-the-Real-World-Smarter-Inputs-and-Reactive-Routing</a></li></ul><h4><strong>Angular Signals: A Recap of the Framework’s Evolution</strong></h4><p>Fanis Prodromou <strong>@prodromouf</strong> provides a comprehensive retrospective and look-ahead. See how far <strong>Signals</strong> have come and how they continue to redefine the core DNA of Angular development.</p><ul><li>Watch the video:<a href="https://youtu.be/MSGYnc83UJY"> https://youtu.be/MSGYnc83UJY</a></li></ul><h4><strong>Signal Forms: Custom Controls (French)</strong></h4><p>Kevin Davila <strong>@kevindaviladev</strong> continues his expert series on the newest version of Angular. This installment focuses on building <strong>Custom Form Controls</strong> specifically designed for the Signal Forms API.</p><ul><li>Read the blog (French):<a href="https://www.codeabien.com/blog/angular-signals-recap"> https://www.codeabien.com/blog/angular-signals-recap</a></li></ul><h4><strong>Vitest in Angular 21: What’s New and How to Migrate? (German &amp; English)</strong></h4><p>Johannes Hoppe <strong>@JohannesHoppe</strong> provides the ultimate guide to switching your testing environment. Whether you are reading in German or English, learn why <strong>Vitest</strong> is the new standard and how to migrate your code samples.</p><ul><li>Read the German guide:<a href="https://angular-buch.com/blog/2025-11-zu-vitest-migrieren"> https://angular-buch.com/blog/2025-11-zu-vitest-migrieren</a> Read the English guide:<a href="https://angular.schule/blog/2025-11-migrate-to-vitest"> https://angular.schule/blog/2025-11-migrate-to-vitest</a></li></ul><p><strong>Are you planning a migration to Vitest or experimenting with local AI?</strong> Your insights could help a fellow developer make the leap.</p><p><strong>Keep the momentum going!</strong> Use <strong>#AngularSparkles</strong> and <strong>#Vitest</strong> to share your migration tips and project wins 👇</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bdddad0cfa96" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/local-ai-reactive-routing-and-the-vitest-migration-bdddad0cfa96">Local AI, Reactive Routing, and the Vitest Migration! ⚡</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Modernize Your Workflow: AI Tooling, Deferrable Views, and the Era of Forms! ️]]></title>
            <link>https://blog.angular.dev/modernize-your-workflow-ai-tooling-deferrable-views-and-the-era-of-forms-%EF%B8%8F-7aa1c1cf9550?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/7aa1c1cf9550</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[angular-weekly-newsleter]]></category>
            <category><![CDATA[angularcommunity]]></category>
            <dc:creator><![CDATA[Angular]]></dc:creator>
            <pubDate>Fri, 13 Mar 2026 15:16:20 GMT</pubDate>
            <atom:updated>2026-03-13T15:16:18.894Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*1_Nnf2Nivr5_Wt8LITRYjQ.png" /></figure><p>The way we build with Angular continues to evolve. From AI agents helping us write code to smarter performance patterns, our community experts are documenting every step of this evolution.</p><p>Get up to speed with these essential resources:</p><h3><strong>Stop Writing Outdated Angular Code: MCP, Cursor &amp; Claude</strong></h3><p>Daniel Herrera Sanchez (@weincoder) explores how to revolutionize your development environment. Learn how to set up the <strong>Model Context Protocol (MCP)</strong> with Cursor and Claude to write cleaner, modern Angular code automatically.</p><p>Read the guide:<a href="https://www.google.com/search?q=https://www.linkedin.com/pulse/vistas-diferidas-en-angular-defer-mejora-de-paso-herrera-sanchez-w77ke/"> </a><a href="https://www.linkedin.com/pulse/vistas-diferidas-en-angular-defer-mejora-de-paso-herrera-sanchez-w77ke/">https://www.linkedin.com/pulse/vistas-diferidas-en-angular-defer-mejora-de-paso-herrera-sanchez-w77ke/</a></p><h3><strong>Deferred Views (@defer): Step-by-Step Performance</strong></h3><p>Boost your Core Web Vitals! Daniel Herrera Sanchez (@weincoder) provides a practical tutorial on using the <strong>@defer</strong> syntax to load components only when they are needed, significantly improving your app’s initial load time.</p><p>Watch the tutorial:<a href="https://www.youtube.com/watch?v=ulwxxNZ6Vpo&amp;t=76s"> https://www.youtube.com/watch?v=ulwxxNZ6Vpo&amp;t=76s</a></p><h3><strong>Angular 21 MCP: 7 Tools You Should Know</strong></h3><p>Alisa Duncan breaks down the essential <strong>MCP toolkit</strong> for Angular 21. Discover 5 stable tools to use today and 2 experimental ones that represent the future of AI-assisted coding.</p><p>Explore the tools:<a href="https://dev.to/angular/a-quick-vibe-code-experiment-with-angulars-mcp-server-3g2h"> https://dev.to/angular/a-quick-vibe-code-experiment-with-angulars-mcp-server-3g2h</a></p><h3><strong>A Quick Vibe Code Experiment with Angular’s MCP Server</strong></h3><p>Damian Sire (@damiansire) takes a creative look at the <strong>Angular MCP Server</strong>, experimenting with “Vibe Coding” to see how AI can understand and generate complex Angular patterns through simple context.</p><p>Check out the experiment:<a href="https://dev.to/damiansiredev/evolution-in-form-validators-goodbye-customerror-hello-plain-objects-4c35"> https://dev.to/damiansiredev/evolution-in-form-validators-goodbye-customerror-hello-plain-objects-4c35</a></p><h3><strong>Evolution in Form Validators: Goodbye customError</strong></h3><p>Modeste ASSIONGBON (@rblmdst) highlights a significant clean-up in form logic in this post. Learn how the transition to <strong>plain objects</strong> for validators makes your code more readable and easier to maintain.</p><p>Watch the update:<a href="https://youtu.be/452hcBDOv2w"> https://youtu.be/452hcBDOv2w</a></p><h3><strong>The Next Generation: A Practical Guide to Signal Forms</strong></h3><p>Ready to move past traditional forms? Modeste ASSIONGBON (@rblmdst) provides a hands-on guide to <strong>Signal Forms</strong>, showing you how to implement the most reactive form state management Angular has ever seen.</p><p>Watch the practical guide:<a href="https://youtu.be/6yWfwir-pX8"> https://youtu.be/6yWfwir-pX8</a></p><p><strong>Are you using AI agents or MCP in your daily Angular workflow yet?</strong> We’d love to see the prompts or tools that are saving you the most time!</p><p><strong>Share the innovation </strong>and help others modernize their dev stack 👇</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7aa1c1cf9550" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/modernize-your-workflow-ai-tooling-deferrable-views-and-the-era-of-forms-%EF%B8%8F-7aa1c1cf9550">Modernize Your Workflow: AI Tooling, Deferrable Views, and the Era of Forms! 🛠️</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Security Advisory: Addressing Recent Vulnerabilities in Angular]]></title>
            <link>https://blog.angular.dev/security-advisory-addressing-recent-vulnerabilities-in-angular-c2656249b799?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/c2656249b799</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[angular-security-update]]></category>
            <dc:creator><![CDATA[Angular]]></dc:creator>
            <pubDate>Fri, 27 Feb 2026 20:40:44 GMT</pubDate>
            <atom:updated>2026-02-27T20:40:43.606Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*hShwMKCOuBLpXmI-nKai-g.png" /></figure><p>We’ve released security updates to address two SSR vulnerabilities that we were made aware of and have since submitted committed code changes to fix.</p><p>The two patched vulnerabilities are:</p><ul><li><a href="https://github.com/angular/angular-cli/security/advisories/GHSA-x288-3778-4hhx">SSRF and Header Injection in Angular SSR</a></li><li><a href="https://github.com/angular/angular-cli/security/advisories/GHSA-xh43-g2fq-wjrj">Open Redirect via X-Forwarded-Prefix in Angular SSR</a></li></ul><p>We recommend all developers update their SSR applications to the latest patch version as soon as possible. If an app does <em>not</em> deploy SSR to production, there is no immediate need to update, however we generally recommend staying on the latest supported patch versions as much as possible.</p><h3>SSRF and Header Injection in Angular SSR</h3><p>A <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Attacks/SSRF">Server-Side Request Forgery (SSRF)</a> vulnerability was identified in the Angular SSR request handling pipeline. Angular’s internal URL reconstruction logic incorrectly trusted user-controlled HTTP headers, specifically the Host and X-Forwarded-* family to determine the application’s base origin without any validation of the destination domain.</p><p>To update your project, <a href="https://github.com/angular/angular-cli/security/advisories/GHSA-xh43-g2fq-wjrj">please find the patched version from the table</a> on the report page and run</p><pre>ng update @angular/ssr@&lt;patched-version&gt;`</pre><p>For more information including affected versions and patch information, <a href="https://github.com/angular/angular-cli/security/advisories/GHSA-xh43-g2fq-wjrj">please refer to the CVE report on GitHub</a>.</p><h3>Workarounds</h3><p>Any developers on an unsupported version of Angular or unable to quickly update should consider:</p><ul><li>Using Absolute URLs: Avoid using req.headers for URL construction. Instead, use trusted variables for your base API paths.</li><li>Implementing Strict Header Validation (Middleware): Implement a middleware in your server.ts to enforce numeric ports and validated hostnames.</li></ul><pre>const ALLOWED_HOSTS = new Set([&#39;your-domain.com&#39;]);<br><br>app.use((req, res, next) =&gt; {<br>  const hostHeader = (req.headers[&#39;x-forwarded-host&#39;] ?? req.headers[&#39;host&#39;])?.toString();<br>  const portHeader = req.headers[&#39;x-forwarded-port&#39;]?.toString();<br><br>  if (hostHeader) {<br>    const hostname = hostHeader.split(&#39;:&#39;)[0];<br>    // Reject if hostname contains path separators or is not in allowlist<br>    if (/^[a-z0-9.:-]+$/i.test(hostname) || <br>       (!ALLOWED_HOSTS.has(hostname) &amp;&amp; hostname !== &#39;localhost&#39;)) {<br>      return res.status(400).send(&#39;Invalid Hostname&#39;);<br>    }<br>  }<br><br>  // Ensure port is strictly numeric if provided<br>  if (portHeader &amp;&amp; !/^\d+$/.test(portHeader)) {<br>    return res.status(400).send(&#39;Invalid Port&#39;);<br>  }<br><br>  next();<br>});</pre><h3>Open Redirect via X-Forwarded-Prefix in Angular SSR</h3><p>An Open Redirect vulnerability was identified in internal URL processing logic in Angular SSR. The logic normalized URL segments by stripping leading slashes; however, it only removed a single leading slash.</p><p>If Angular SSR application is deployed behind a proxy that accepted the X-Forwarded-Prefix header, an attacker can provide a value starting with three slashes (e.g., ///evil.com), causing a redirect to an attacker-controlled origin and could potentially poison any cached responses shared across multiple users.</p><p>To update your project, <a href="https://github.com/angular/angular-cli/security/advisories/GHSA-xh43-g2fq-wjrj">please find the patched version from the table on the report page</a> and run</p><pre>ng update @angular/ssr@&lt;patched-version&gt;</pre><p>For more information, <a href="https://github.com/angular/angular-cli/security/advisories/GHSA-xh43-g2fq-wjrj">please refer to the report on GitHub</a>.</p><h3>Workarounds</h3><p>Any developers on an unsupported version of Angular or unable to quickly update should consider sanitizing the X-Forwarded-Prefix header in their server.ts before the Angular engine processes the request:</p><pre>app.use((req, res, next) =&gt; {<br>  const prefix = req.headers[&#39;x-forwarded-prefix&#39;]?.trim();<br>  if (prefix) {<br>    // Sanitize by removing all leading slashes<br>    req.headers[&#39;x-forwarded-prefix&#39;] = prefix.replace(/^[/\\]+/, &#39;/&#39;);<br>  }<br>  next();<br>});</pre><h3>Conclusion</h3><p>We appreciate working with such bright security researchers who share our passion to keep the web secure everywhere. We participate in <a href="https://bughunters.google.com/">Google’s VRP</a> (vulnerability rewards program) to encourage responsible disclosure of issues like these. We strongly recommend keeping critical infrastructure up-to-date to ensure security patches are applied and deployed in a timely manner.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c2656249b799" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/security-advisory-addressing-recent-vulnerabilities-in-angular-c2656249b799">Security Advisory: Addressing Recent Vulnerabilities in Angular</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Angular 21: Internal Mechanics, ARIA, and AI-Powered Coding! ]]></title>
            <link>https://blog.angular.dev/angular-21-internal-mechanics-aria-and-ai-powered-coding-eefc4b05ddb6?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/eefc4b05ddb6</guid>
            <category><![CDATA[angularcommunity]]></category>
            <category><![CDATA[angular]]></category>
            <dc:creator><![CDATA[Angular]]></dc:creator>
            <pubDate>Tue, 17 Feb 2026 17:58:47 GMT</pubDate>
            <atom:updated>2026-02-27T18:53:21.349Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*5C7Y6srwadM5MIIghM_BKQ.png" /></figure><p>The momentum in the Angular world is unstoppable! With last year’s release of <strong>Angular 21</strong>, our community experts are already breaking down the new features, exploring the “magic” under the hood, and showing us how to build more accessible, modern applications.</p><p>Check out this week’s expert-led resources below.</p><h4><strong>Use Gemini CLI and Angular MCP to Build a Page</strong></h4><p>Alejandro Cuba Ruiz (@zorphdark) &amp; Jorge Cano (@jorgeucano) demonstrate the power of the new <strong>Model Context Protocol (MCP)</strong>. Learn how to combine the Gemini CLI with Angular to scaffold and build pages faster than ever before.</p><ul><li><strong>Watch &amp; Read:</strong><a href="https://youtu.be/ThK58diiUyA"> https://youtu.be/ThK58diiUyA</a></li></ul><h4>Angular Signal Forms: A First Look at the New Forms API</h4><p>Explore Angular’s new Signal Forms in version 21! Deborah Kurata (@deborahkurata) demonstrates building forms with signals, including validation using a schema. Learn how a form’s field tree mirrors the signal structure, enabling real-time reactivity and error handling.</p><ul><li><strong>Video</strong>: <a href="https://www.youtube.com/watch?v=J0pVA4lJMso">https://www.youtube.com/watch?v=J0pVA4lJMso</a></li></ul><h4><strong>Angular 21 is Here! (English &amp; German)</strong></h4><p>Ferdinand Malcher (@fmalcher01), Johannes Hoppe (@johanneshoppe) &amp; Danny Koppenhagen provide a comprehensive overview of the <strong>Angular 21</strong> launch. Whether you prefer your updates in English or German, they have you covered with the key highlights of this milestone release.</p><ul><li><strong>English version</strong>: <a href="https://angular.schule/blog/2025-11-angular21">https://angular.schule/blog/2025-11-angular21</a></li><li><strong>German version</strong>: <a href="https://angular-buch.com/blog/2025-11-angular21">https://angular-buch.com/blog/2025-11-angular21</a></li></ul><h4><strong>Angular ARIA &amp; Signals Course (Spanish)</strong></h4><p>Carlos Caballero (@carlillo) is making the web more inclusive and reactive! Dive into his specialized series on <strong>Angular ARIA</strong> for accessibility, or start his complete course on <strong>Signals</strong> — all in Spanish.</p><ul><li>Angular ARIA: <a href="https://www.youtube.com/watch?v=rr0AstaFLV8">https://www.youtube.com/watch?v=rr0AstaFLV8</a></li><li>Signals Course: <a href="https://www.youtube.com/watch?v=XXgQudcmlDQ">https://www.youtube.com/watch?v=XXgQudcmlDQ</a></li></ul><h4><strong>Stop Writing Outdated Code: Modern Angular Course (Spanish)</strong></h4><p>Arcadio Quintero (@oidacra) challenges you to modernize your workflow! This guide covers setting up <strong>MCP with Cursor and Claude Code</strong> to ensure you are writing cutting-edge, high-performance Angular.</p><p><strong>Level up your code:</strong> <a href="https://arcadioquintero.com/stop-writing-outdated-angular-code-mcp-setup-with-cursor-and-claude-code">https://arcadioquintero.com/stop-writing-outdated-angular-code-mcp-setup-with-cursor-and-claude-code</a></p><p>Which new features have you already implemented? Whether it’s a minor tweak or a major refactor, share your progress with us and <strong>help the community stay current.</strong> Use <strong>#AngularSparkles </strong>to share what you’re learning today.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eefc4b05ddb6" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/angular-21-internal-mechanics-aria-and-ai-powered-coding-eefc4b05ddb6">Angular 21: Internal Mechanics, ARIA, and AI-Powered Coding! 🚀</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Global Expertise: AI Blueprints, Resource API Fixes, and Angular v20 ]]></title>
            <link>https://blog.angular.dev/global-expertise-ai-blueprints-resource-api-fixes-and-angular-v20-5fb47e059670?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/5fb47e059670</guid>
            <category><![CDATA[angularcommunity]]></category>
            <category><![CDATA[angular-french]]></category>
            <category><![CDATA[angular-spanish]]></category>
            <category><![CDATA[angular]]></category>
            <dc:creator><![CDATA[Angular]]></dc:creator>
            <pubDate>Mon, 09 Feb 2026 15:47:41 GMT</pubDate>
            <atom:updated>2026-02-09T15:47:40.691Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*84V5HvE7Mo7n5aBGLPQidg.png" /></figure><p>The Angular community is truly global! This week’s roundup features cutting-edge AI integrations and essential deep dives into the newest features of <strong>Angular v20</strong>, with contributions in multiple languages to help developers everywhere level up.</p><p>Check out these latest highlights:</p><h4><strong>GenAI Scaffold: A Blueprint for Modern Apps</strong></h4><p>Damian Sire (@damiansire) provides a comprehensive <strong>code sample</strong> and repository that serves as a blueprint for high-performance apps. It features a cutting-edge stack: Angular, Node.js, and Google Gemini API.</p><p>Explore the scaffold:<a href="https://github.com/damiansire/GenAI-Scaffold"> https://github.com/damiansire/GenAI-Scaffold</a></p><h4><strong>Nova Reel: AI-Powered Movie &amp; TV Recommendations</strong></h4><p>Wayne Gakuo (@wayne_gakuo) showcases how to combine <strong>Angular, Genkit, and Firebase</strong> to build a smart recommendation engine. A perfect example of Gemini’s multimodal power in action!</p><p>Check the code:<a href="https://github.com/waynegakuo/nova-reel"> https://github.com/waynegakuo/nova-reel</a></p><h4><strong>The Future of Angular and AI (Spanish)</strong></h4><p>Alejandro Cuba Ruiz (@zorphdark) sits down with Mark Techson to discuss the intersection of Angular and Artificial Intelligence. Essential viewing for our Spanish-speaking community members!</p><p>Watch the interview:<a href="https://youtu.be/GoPtZ9-RKCY"> https://youtu.be/GoPtZ9-RKCY</a></p><h4><strong>Angular’s Resource APIs: Let’s Fix Them!</strong></h4><p>Johannes Hoppe (@johanneshoppe) takes a critical look at the current state of <strong>Resource APIs</strong>, offering a thought-provoking perspective on what needs to change for better developer ergonomics.</p><p>Read the blog post:<a href="https://angular.schule/blog/2025-10-rx-resource-is-broken"> https://angular.schule/blog/2025-10-rx-resource-is-broken</a></p><h4><strong>Angular Signal Forms: Beginner’s Full Guide</strong></h4><p>Ready to build your first form with Signals? Fannis Prodromou (@prodromouf) walks you through a complete login form tutorial, perfect for those just getting started with this new API.</p><p>Watch the guide:<a href="https://www.youtube.com/watch?v=yeZoleR4v84"> https://www.youtube.com/watch?v=yeZoleR4v84</a></p><h4><strong>Angular v20 Deep Dive Series (French)</strong></h4><p>Modeste Assiongbon (@rblmdst) breaks down the latest updates in a three-part French language series, covering <strong>Asynchronous Redirects</strong>, <strong>Resource API breaking changes</strong>, and the <strong>New Style Guide</strong>.</p><p>Watch Part 1 (Style Guide):<a href="https://youtu.be/8yrEcnOHvlM"> https://youtu.be/8yrEcnOHvlM</a> <br>Watch Part 2 (Resources): <a href="https://youtu._gfa4PUtiaI">https://youtu._gfa4PUtiaI</a> <br>Watch Part 3 (Routing):<a href="https://youtu.be/f_mppF1Dw_k"> https://youtu.be/f_mppF1Dw_k</a></p><p><strong>Spread the knowledge across the globe!</strong> Use <strong>#AngularSparkles</strong> to share your latest tutorials and repos! 👇</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5fb47e059670" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/global-expertise-ai-blueprints-resource-api-fixes-and-angular-v20-5fb47e059670">Global Expertise: AI Blueprints, Resource API Fixes, and Angular v20 🌍</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Community Stories, Code Samples, and Signal Forms! ]]></title>
            <link>https://blog.angular.dev/community-stories-code-samples-and-signal-forms-7d0294475610?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/7d0294475610</guid>
            <category><![CDATA[angularcommunity]]></category>
            <category><![CDATA[angular-gde]]></category>
            <dc:creator><![CDATA[Angular]]></dc:creator>
            <pubDate>Fri, 23 Jan 2026 17:37:39 GMT</pubDate>
            <atom:updated>2026-01-23T17:37:32.581Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Header graphic with the Angular logo and text reading: This Week in the Angular Community" src="https://cdn-images-1.medium.com/max/960/1*84V5HvE7Mo7n5aBGLPQidg.png" /></figure><p>This week, we’re sharing powerful stories and hands-on code! The Angular community is defined by its willingness to share <strong>personal journeys</strong>, provide <strong>practical examples</strong>, and dive deep into major features like <strong>Signal Forms</strong>.</p><p>Check out these valuable resources from Angular experts:</p><ul><li><strong>From ASP.NET to Angular: My MVP Story</strong> <br><a href="https://x.com/SonuKapoor1978">Sonu Kapoor</a> <strong>@SonuKapoor1978 </strong>shares a compelling personal story about transitioning from the ASP.NET ecosystem to becoming an Angular expert and MVP. This is a great read for anyone navigating a career shift!</li><li>Read the inspiring journey:<a href="https://techcommunity.microsoft.com/blog/mvp-blog/from-asp-net-to-angular-my-mvp-story---sonu-kapoor/4458699"> https://techcommunity.microsoft.com/blog/mvp-blog/from-asp-net-to-angular-my-mvp-story---sonu-kapoor/4458699</a></li><li><strong>Angular Signal Forms (3-Part Series)</strong> <br><a href="https://bsky.app/profile/fmalcher.de">Ferdinand Malcher</a> @fmalcher01 &amp; Danny Koppenhagen provide the definitive guide to mastering the new <strong>Signal Forms</strong> API in Angular! This three-part series offers everything you need to know about this major update to forms management. <br>Part 1:<a href="https://angular-buch.com/blog/2025-10-signal-forms-part1"> https://angular-buch.com/blog/2025-10-signal-forms-part1</a> <br>Part 2:<a href="https://angular-buch.com/blog/2025-10-signal-forms-part2"> https://angular-buch.com/blog/2025-10-signal-forms-part2</a> <br>Part 3:<a href="https://angular-buch.com/blog/2025-10-signal-forms-part3"> https://angular-buch.com/blog/2025-10-signal-forms-part3</a></li><li><strong>Building AI-Powered Content with Angular and Gemini</strong> <br>Ready to integrate AI into your apps? Babatunde Lamidi shares a complete <strong>code sample</strong> showing you exactly how to build an AI-powered content generator using Angular and the Gemini API.<br><strong>Explore the GitHub repo</strong>:<a href="https://github.com/babatundelmd/ng-content-generator"> https://github.com/babatundelmd/ng-content-generator</a></li><li><strong>Modernizing Angular Control Flow</strong> <br>Antonio Cardenas<strong> @yeoudev</strong> provides essential real-world guidance and code examples for updating your applications to use Angular’s new, more efficient <strong>built-in Control Flow</strong> syntax. <br><strong>See the code sample</strong>: <a href="https://dev.to/turingsoracle/updating-to-angular-20-a-real-world-guide-2h9o">https://dev.to/turingsoracle/updating-to-angular-20-a-real-world-guide-2h9o</a></li></ul><p><strong>Have you integrated Signal Forms or the new Control Flow into your app yet?</strong> Share your experience or a snippet of your code!</p><p><strong>Help grow the ecosystem!</strong> Use <strong>#AngularSparkles</strong> to share your favorite Angular resources.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7d0294475610" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/community-stories-code-samples-and-signal-forms-7d0294475610">Community Stories, Code Samples, and Signal Forms! 🌟</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Announcing Angular v21]]></title>
            <link>https://blog.angular.dev/announcing-angular-v21-57946c34f14b?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/57946c34f14b</guid>
            <category><![CDATA[angular-mcp]]></category>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[angular-v21]]></category>
            <category><![CDATA[aiangular]]></category>
            <dc:creator><![CDATA[Angular]]></dc:creator>
            <pubDate>Wed, 19 Nov 2025 22:35:29 GMT</pubDate>
            <atom:updated>2025-12-18T20:18:46.120Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xcM4SYWsG_hMHnDJABz8dw.png" /></figure><p>Authors: <a href="https://bsky.app/profile/jens.ng">Jens Kuehlers</a>, <a href="https://bsky.app/profile/marktechson.com">Mark “Techson” Thompson</a></p><p>(<a href="https://youtu.be/DDAHORVzQ5g">Check out our animated v21 adventure!</a>)</p><p>What an exciting time to be a developer! With all the exciting developments in AI in Web development, it feels like we’re going on a new adventure every day. This is perfectly in line with the theme of our <a href="https://goo.gle/angular-v21">v21 Release Event that gives a high level overview of the best of what Angular v21 has to offer</a>.</p><p>With the release of v21, Angular is an even greater partner for your daily adventures — giving you the stability of the Angular framework while enabling you to build great AI-powered applications that are scalable and accessible for everyone.</p><p>Angular v21 gives you many long-awaited tools to add to your toolbox and ensures you have the best developer experience, whether you code using agents and AI assistance or prefer to write, debug and test code with just you and your IDE.</p><p>Some of the highlights:</p><ul><li>We’re launching <strong>experimental Signal Forms</strong>, providing a new scalable, composable and reactive forms experience built on Signals.</li><li><strong>Angular Aria</strong> is launching in Developer Preview, providing you <em>headless components built with accessibility as a priority</em>, that you can style your way</li><li>Your AI agents can use Angular’s <strong>MCP Server</strong>, now with seven stable and experimental tools — allowing LLMs to use new Angular features from day one</li><li>The Angular CLI integrates <strong>Vitest as the new default test runner</strong>. Vitest support is now stable and production ready.</li><li>New Angular applications are <strong>not including zone.js by default anymore</strong>!</li></ul><p>And there’s so much more — so let’s dig right in!</p><h3>Experimental Signal Forms are here</h3><p>We’re proud to announce that you can now <a href="https://angular.dev/essentials/signal-forms">try out Signal Forms</a>, an experimental library that allows you to manage form state by building on the reactive foundations of Signals!</p><p>With Signal Forms, the Form model is defined by a signal that automatically syncs with the form fields bound to it, allowing for an ergonomic developer experience with full type-safety for accessing form fields. Powerful and centralized schema-based validation logic is built in 🎉</p><p>To get started, create a form model and pass it to form():</p><pre>import { form, Field } from &#39;@angular/forms/signals&#39;;<br><br>@Component({<br>  imports: [Field],<br>  template: `<br>    Email: &lt;input [field]=&quot;loginForm.email&quot;&gt;<br>    Password: &lt;input [field]=&quot;loginForm.password&quot;&gt;<br>  `<br>})<br>export class LoginForm {<br>  login = signal({<br>    email: &#39;&#39;,<br>    password: &#39;&#39;<br>  });<br>  <br>  loginForm = form(this.login);<br>}</pre><p>You can now bind the fields to the template using the [field] directive. Typical validation patterns such as email validation or regular expression matching are already built-in, and custom validators give you the ability to create even more powerful validation mechanisms.</p><p>Binding to custom components is signal based and easier than ever, there’s no more need for ControlValueAccessor.</p><p>To get started check out the <a href="https://angular.dev/essentials/signal-forms">essential Signal Forms guide</a> or the <a href="http://angular.dev/guide/forms/signals/overview">full documentation</a>.</p><p>We’re excited for you to start building with Signal Forms. The Signal Forms API is still experimental and we will be iterating based on feedback. Please try it and let us know what you think.</p><h3>Accessible Components — your style, with Angular Aria</h3><p>We’re thrilled to announce we’re launching a developer preview of our new modern library for common UI patterns. We built <a href="https://angular.dev/guide/aria/">Angular Aria</a> with accessibility as its number one priority. To start you have access to a set of 8 UI patterns encompassing 13 components that are completely unstyled and can be customized with your own styles.</p><p>Angular Aria uses modern Angular directives, is signal based, and builds on our team’s strong experience in building responsive accessible components.</p><p>The 8 patterns we are launching with are:</p><ul><li>Accordion</li><li>Combobox</li><li>Grid</li><li>Listbox</li><li>Menu</li><li>Tabs</li><li>Toolbar</li><li>Tree</li></ul><p>Angular Aria includes complex components that you can style yourself, such as multi-level standalone menus</p><figure><img alt="A multi-level standalone menu example titled ‘Standalone Menu Example.’ The main menu on the left shows categories like ‘SECURITY’ and ‘HELP.’ The ‘Reset’ item under ‘SECURITY’ is currently hovered or selected, revealing a secondary context menu on the right with options: ‘Email address,’ ‘Phone number,’ and ‘Password.’ The ‘Email address’ option is highlighted." src="https://cdn-images-1.medium.com/max/518/1*527iKM_Zq03FlpXNkn_MBA.png" /></figure><p>Install this new library by running npm i @angular/aria. Then, head over to our complete <a href="https://angular.dev/guide/aria/">Angular Aria guide</a> that gives you usage information and code examples for all components and a showcase of skins that you can copy and paste to try out different looks.</p><p>The Angular team now offers three different ways to help you in using and developing components:</p><ul><li>Use <a href="https://angular.dev/guide/aria/">Angular Aria</a> for accessible, headless components that you are able to style yourself however you want</li><li>Use the <a href="https://material.angular.dev/cdk/categories">CDK</a> for behavior primitives such as <a href="https://angular.dev/guide/drag-drop">Drag and Drop</a> that you can include in your own, custom-built components.</li><li>Use <a href="https://material.angular.dev/">Angular Material</a> for a full library of readily styled, opinionated components following Material Design principles. You can customize the components by using your own <a href="https://material.angular.dev/guide/theming">theming</a>.</li></ul><p>We’re excited about your feedback on Angular Aria and what you will build with it.</p><h3>More tools for your AI agents — with Angular’s MCP server</h3><p>To make sure you’re ready for the AI era, we want to ensure that developers have the right tools. We want to provide tools for the way developers work now and how and how work will evolve.</p><p>In v20.2 we launched the <a href="http://angular.dev/ai/mcp">MCP server</a> built in the Angular CLI to ensure AI agents have all the context they need for Angular development and we’re proud to announce that the MCP server is now stable!</p><p>The Angular MCP server gives you a set of tools to give AI agents the right context about modern Angular and your application, and even help you become a better developer. You can use the MCP server to:</p><ul><li><strong>Gain general context:</strong> The get_best_practices tool provides the Angular best practices guide and the list_projects tool finds all the Angular projects in your workspace.</li><li><strong>Find up-to-date information: </strong>The search_documentation tool is able to answer Angular questions by querying <a href="http://angular.dev">the official documentation</a> and the find_examples tool provides access to up-to-date examples of modern Angular patterns — we’ll soon add more examples such as Signal based forms and Angular Aria so your AI agents can use the new coding patterns.</li><li><strong>Update your application: </strong>The onpush_zoneless_migration tool is able to analyze your code and provide a plan to migrate your application to OnPush and zoneless change detection. There’s also an experimental tool called modernize to perform code migrations using existing schematics.</li><li><strong>Teach you Angular: </strong>The ai_tutor tool launches an interactive AI-powered Angular tutor that can help you learn concepts and get feedback and should be used with a new Angular application.</li></ul><p>With the MCP server you are able to bridge the knowledge cutoff issue — your LLM was trained with Angular knowledge as of a specific date, but using the MCP server, it can learn to use even brand new features such as Signal Forms and Angular Aria — you just need to ask your agent to find examples and use them!</p><figure><img alt="Gif of the Angular AI tutor being used in Gemini CLI. The user types “teach me how to use Angular” and is given a response that features learning topcs." src="https://cdn-images-1.medium.com/max/721/1*U6PPU6B41BddXmGqosnexA.gif" /><figcaption>AI tutor tool in action</figcaption></figure><h3>Vitest as the new default, stable test runner</h3><p>Since <a href="https://github.com/karma-runner/karma?tab=readme-ov-file#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes">Karma was deprecated in 2023</a> the Angular team has explored Jest, Web Test Runner and Vitest as new testing solutions.</p><p>After getting positive feedback from the community we decided on Vitest as our new default test runner, and are promoting it to stable in Angular v21 🎉</p><p>To use <a href="http://vitest.dev">Vitest</a> in a new Angular application just run the ng test command. The console output will look like this:</p><figure><img alt="A screenshot of a terminal running the Angular CLI command $ ng test. The output shows that 1 Test File was checked, with 3 total tests passing. The individual tests that passed are: src/app/app.component.spec.ts, AppComponent should create the app, AppComponent should have as title ‘my-app’, and AppComponent should render title. The total duration was 2.46s." src="https://cdn-images-1.medium.com/max/1024/1*1r3mq_d2lYDNb0s43ba6kA.png" /><figcaption>Sample terminal output from Vitest in Angular</figcaption></figure><p>To learn more about testing with Vitest — <a href="http://angular.dev/guide/testing">checkout the documentation on angular.dev</a>.</p><p>While Vitest is the new default test runner for new projects, <a href="http://angular.dev/guide/testing/karma">Karma and Jasmine are still fully supported</a> by the Angular team, so you don’t need to migrate yet.</p><p>If you’re ready to migrate your existing application to use Vitest, there’s an <a href="https://angular.dev/guide/testing/migrating-to-vitest">experimental migration</a> you can run. After performing some preparatory steps described in the linked guide run</p><pre>ng g @schematics/angular:refactor-jasmine-vitest</pre><p>Your tests will be automatically refactored to use Vitest.</p><p>With Vitest support being stable we decided to deprecate the experimental support for Web Test Runner and Jest and plan to remove them in v22. For teams that want to continue to use Jest, consider one of the existing community alternatives such as <a href="https://github.com/thymikee/jest-preset-angular">jest-preset-angular</a> and the <a href="https://nx.dev/docs/technologies/test-tools/jest/introduction">Nx Jest plugin</a>.</p><h3>Zoneless is ready for prime-time</h3><p>Angular traditionally used zone.js, a library that patches browser APIs, to keep track of changes in applications. This enabled the “magical” experience where templates automatically change as the user performs actions in your application, however <a href="http://zone.js">zone.js</a> has performance drawbacks, especially for high-complexity applications</p><p>With signals driving modern Angular state management, zone.js is no longer needed for change detection. Zoneless change detection, introduced experimentally in v18, progressed through Developer Preview in v20, and reached stability in v20.2.</p><p>Through our experience with applications in Google we became increasingly more confident that new Angular applications work best without zone.js.</p><ul><li>In 2024, more than half of the brand new Angular applications inside Google were built with the Zoneless change detection strategy and we made it the default mid-2024.</li><li>There’s hundreds of zoneless applications running inside Google in production now.</li><li>Externally, looking at <a href="https://httparchive.org/">The HTTP Archive</a>, we see over 1400 Angular applications using zoneless change detection, and that’s only the applications that are publicly available without the need of a login.</li></ul><figure><img alt="A line graph tracking Zoneless adoption metrics from April 2024 to October 2025. The chart shows a strong, accelerating upward trend, starting near zero and reaching 1,438 adopters as of October 2025." src="https://cdn-images-1.medium.com/max/1024/1*KxctGbSEERyolLuNZexCug.png" /></figure><p>Given these strong signals, <strong>zone.js and its features will no longer be included by default in Angular applications in v21.</strong></p><p>Enabling Zoneless change detection provides benefits such as better Core Web Vitals, native async-await, ecosystem compatibility, reduced bundle size, easier debugging and better control.</p><p>New applications will automatically use Zoneless, for existing applications please follow <a href="https://angular.dev/guide/zoneless#removing-zonejs">our migration instructions on angular.dev</a>. You can also try out the new onpush_zoneless_migration tool in the Angular MCP server, which creates a step-by-step plan on how to migrate your application to OnPush change detection strategy.</p><p>While Zoneless is the new default experience, we want to acknowledge that zone.js played an important role in shaping Angular and allowed developers to create magical experiences for many years. We want to extend a big <strong>THANK YOU </strong>to the zone.js team, especially <a href="https://github.com/JiaLiPassion">Jia Li</a> for contributions to zone.js.</p><h3>A new documentation experience</h3><p>If you visited <a href="http://angular.dev">angular.dev</a> in the last few weeks, you might have noticed that there is a new landing page. But that’s not all that’s changed on angular.dev — we’ve made significant changes to ensure the documentation experience is modern and teaches the latest concepts so you can always get fresh information.</p><p><a href="https://www.youtube.com/watch?v=eIeJmYdYMQo">At Google I/O 2025</a> we launched <a href="http://angular.dev/ai">angular.dev/ai</a> — your resource for everything you need to build AI-powered applications with Angular. We’ve included best practices, code samples, design patterns, and more. We’ve even included <a href="https://angular.dev/ai/develop-with-ai">best practices prompts and custom rule files</a> to help ensure your code generation experiences result in modern Angular code. We have been landing lots of updates so please keep checking back for the latest tips and tricks on how to build AI-powered applications and make use of the best AI assisted coding strategies.</p><p>If you’re at the beginning of your journey in building reactive applications, check out <a href="https://angular.dev/tutorials/signals">the new Signals tutorial</a> which provides a complete overview of all the stable Signal APIs, including model(), linkedSignal() and more.</p><p>We’ve invested a significant amount of effort into updating our developer guides on angular.dev:</p><ul><li>The <a href="https://angular.dev/guide/routing">Routing documentation</a> has been completely overhauled and provides detailed information about all aspects of routing.</li><li>The <a href="https://angular.dev/guide/di">dependency injection guides</a> have been greatly improved and made more accessible to developers wanting to grasp the core concepts behind this powerful feature.</li><li>We’ve added a comprehensive guide on approaches for <a href="https://material.angular.dev/guide/theming-your-components">theming Material components</a>.</li><li>And last but not least there’s a complete guide on how to use Angular with <a href="https://angular.dev/guide/tailwind">Tailwind CSS</a>!</li></ul><p>We’re committed to improving our documentation experience. For developers using the Angular MCP server, the new search_documentation tool gives your AI agent access to the latest and greatest information on angular.dev.</p><h3>And so much more …</h3><p>We’ve been busy! Apart from the great features that we highlighted so far, there’s quite a few more things our team delivered that deserve a special mention:</p><ul><li><a href="https://github.com/angular/angular/pull/64032">CLDR library support has been updated</a> from v41 to v47, improving currency formatting, date formatting, etc.</li><li>We now support <a href="https://github.com/angular/angular/pull/63857">regular expressions in templates</a>:</li></ul><pre>@let isValidNumber = /\d+/.test(someValue);<br><br>@if (!isValidNumber) {<br>  &lt;p&gt;{{someValue}} is not a valid number!&lt;/p&gt;<br>}</pre><ul><li>Angular now has a <a href="https://github.com/angular/angular/pull/64000">built-in Signals formatter</a>. Enable custom formatters (<a href="https://medium.com/@tomsu/devtools-tips-day-10-custom-formatters-58ee46e640f9">Chrome</a>, <a href="https://firefox-source-docs.mozilla.org/devtools-user/custom_formatters/index.html#enabling-custom-formatting">Firefox</a>) to use this feature.</li></ul><figure><img alt="A screenshot of a code editor and debugger showing an Angular component with two initialized signals, sig and sig2. The debugger is paused on a debugger statement, and the inspection pane displays the current value of the sig signal as “hello”, along with the signal function. On the right, the Scope panel shows the structure of sig and sig2 within the component’s scope." src="https://cdn-images-1.medium.com/max/1024/1*cn7pv1z2_3birRvubPo4vA.png" /></figure><ul><li>You can now customize the IntersectionObserver options for @defer triggers related to on viewport, for example:</li></ul><pre>@defer (on viewport({trigger, rootMargin: &#39;100px&#39;}) {<br>  &lt;section&gt;Content&lt;/section&gt;<br>}</pre><ul><li><a href="https://github.com/angular/angular/pull/64535">SimpleChanges are now generic</a> allowing for better type checking of the values inside SimpleChanges, solving a <a href="https://github.com/angular/angular/issues/17560">highly-upvoted issue</a></li><li>The <a href="https://github.com/angular/angular/pull/48814">KeyValue pipe now supports objects with optional keys</a></li><li>As an alternative to CSS variables, you can now use a new set of <a href="https://github.com/angular/components/pull/31702">utility classes</a> to apply Material Design’s system tokens directly in your templates. See the <a href="http://material.angular.dev/guide/theming-your-components">theming guide</a> for details!</li><li><a href="https://github.com/angular/components/pull/32155">CDK overlays now use browsers built-in popovers</a>, helping to solve some accessibility issues</li></ul><p>And in case you missed it — these are only the updates since Angular v20.2. If you only tune in every major release you might have missed:</p><ul><li>New APIs to Animate elements as they <a href="https://angular.dev/guide/animations">enter and leave the DOM</a></li><li>CDK Drag&amp;Drop improvement to allow <a href="https://angular.dev/guide/drag-drop#copying-items-between-lists">copying items between lists</a></li><li>Route visualization and signal graph in <a href="https://angular.dev/tools/devtools">Angular DevTools</a></li><li>and so much more — see our <a href="https://blog.angular.dev/angular-summer-update-2025-1987592a0b42">Summer Update blog post</a> for details</li></ul><p>And as always, the full list of changes is in our <a href="https://github.com/angular/angular/blob/main/CHANGELOG.md">Changelog</a>.</p><h3>Angular ♥️ our amazing community</h3><p>This amazing release wouldn’t have been possible without our open-source community. So many people in our community help move Angular forward, through contributions big and small, be it answering questions to other developers, organizing meetups and conferences, improving documentation or by contributing with a pull-request. If you are one of our contributors — thank you so much! If not yet, I hope this can inspire you! Even answering one question or helping your co-worker helps!!</p><p>Since v20, 215 people have contributed to the Angular codebase, and we want to highlight some specific contributions:</p><ul><li><a href="https://github.com/SkyZeroZx">Jaime Burgos</a> improved multiple migrations and diagnostics:<br>• The <a href="https://angular.dev/reference/migrations/standalone">standalone migration</a> now has <a href="https://github.com/angular/angular/pull/64138">CommonModule support</a><br>• A <a href="https://angular.dev/reference/migrations/router-testing-module-migration">new migration for the deprecated RouterTestingModule</a><br>• A <a href="https://github.com/angular/angular/pull/64069">diagnostic for unreachable or redundant @defer triggers</a></li><li><a href="https://github.com/aparzi">Angelo Parziale</a> created two migrations:<br>• <a href="https://angular.dev/reference/migrations/ngclass-to-class">Convert NgClass directive to class bindings</a><br>• <a href="https://angular.dev/reference/migrations/ngstyle-to-style">Convert NgStyle directive to style bindings</a></li><li><a href="https://github.com/Avcharov">Hryhorii Avcharov</a> added a <a href="https://github.com/angular/angular/pull/62465">Transfer State tab to DevTools</a> allowing to inspect the TransferState between server side and client side application.</li><li><a href="https://github.com/LukeyBeachBoy">Luke Beach</a> created a <a href="https://github.com/angular/components/pull/29563">CDK overlay feature allowing separate viewport margins on each side</a></li><li><a href="https://github.com/lekhmanrus">Ruslan Lekhman</a> created a<a href="https://github.com/angular/components/pull/31965"> pull request to allow an injector to be passed to MatBottomSheetConfig</a></li><li><a href="https://github.com/cexbrayat">Cédric Exbrayat</a> contributed <a href="https://github.com/angular/angular-cli/pull/30682">an option named outputFile to the Vitest runner</a></li><li><a href="https://github.com/yjaaidi">Younes Jaaidi</a> contributed <a href="https://github.com/angular/angular-cli/pull/31786">multiple</a> <a href="https://github.com/angular/angular-cli/pull/31783">improvements</a> to the <a href="http://angular.dev/guide/testing">Vitest runner</a></li></ul><p>Thank you so much for being part of Angular v21!</p><h3>Mascot update!</h3><p>You might remember we asked you for your input on Angular’s mascot in v20! Our <a href="https://github.com/angular/angular/discussions/61733">Mascot RFC</a> had a record number of submissions and we owe you an update. We know you want to meet our new mascot so make sure to watch our <a href="http://goo.gle/angular-v21">release event on YouTube</a> November 20th, 2025 at 9 AM Pacific for the official announcement ⭐</p><figure><a href="https://youtu.be/DDAHORVzQ5g"><img alt="A bright, 8-bit pixel art image for the Angular v21 Developer Event. The text “V21” is prominent in large, gradient pink and purple pixels, with “DEVELOPER EVENT” centered beneath it. A pink button with the Angular logo is at the bottom. To the right is a pixel art character, a Black developer with a surprised expression, looking up and to the left." src="https://cdn-images-1.medium.com/max/1024/1*3c8-jSM4e8nEd8ohS-urFQ.png" /></a></figure><h3>Time to build the next wave of apps</h3><p>We’re incredibly proud of this release, but this is only one step in Angular’s journey. We have our eyes keenly focused on the emerging patterns for the future of web application development. We’ve seen the power of AI and we want to do what we can to bring you the tools for however you work. Whether that be with vibe-coding, AI agents or tradition development.</p><p>Our newest features like Signal Forms and Angular Aria are signs of our commitment to continue to improve the API surface and make Angular a wonderful place for building scalable web applications with confidence.</p><p>Be sure to run ng update and create apps your users will love.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=57946c34f14b" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/announcing-angular-v21-57946c34f14b">Announcing Angular v21</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Handling Time and Mock Clocks in Tests]]></title>
            <link>https://blog.angular.dev/handling-time-and-mock-clocks-in-tests-5a393b32dd30?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/5a393b32dd30</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[software-testing]]></category>
            <dc:creator><![CDATA[Andrew Scott]]></dc:creator>
            <pubDate>Fri, 07 Nov 2025 01:01:25 GMT</pubDate>
            <atom:updated>2025-11-07T01:01:24.721Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Handling time and mock clocks in tests" src="https://cdn-images-1.medium.com/max/1024/1*Ghd6Y89C63bDJfVxiHTl6Q.png" /></figure><p>In the realm of software testing, the concept of time can be a tricky one to manage, especially when dealing with asynchronous operations and timeouts. We are continually refining our approach to handling time in unit tests, particularly concerning the use of mock clocks. We’ve found that mock clocks, while useful, often lead to headaches in test code and unrealistic timing scenarios. To address these challenges, we are exploring the exciting concept of “auto-advancing” mock clocks, which aim to streamline testing and enhance the accuracy of time-based simulations. In this blog post, we’ll delve into the intricacies of mock clocks, their limitations, and the potential benefits of auto-advancing functionality.</p><h3>Why use a mock clock</h3><p>We see a few reasons to install mock clocks in tests.</p><ol><li>To <strong>fake the date</strong>. This makes it possible to test components which display the current time or date related information, or do some calculation with respect to the current time.</li><li>More frequently, to <strong>speed up time</strong>. UIs are frequently written with debounces, visible delays for users, timeouts, etc. We want to verify the state of the app after these long-running tasks complete but we don’t want the test to actually wait 30 seconds for a timeout. Instead, mock clocks can fake the progression of time without needing to modify the production code to expose some overridable timeout simply to make the test quicker.</li><li>To <strong>prevent timers from leaking into other tests</strong>, creating <a href="https://en.wikipedia.org/wiki/Action_at_a_distance_(computer_programming)">action at a distance</a> errors. Mock clocks can uninstall after each test and either dispose of or flush any pending timers.</li><li>To <strong>execute all pending timers</strong> or stabilize the test. This allows the test to say, “wait until everything that’s supposed to happen has happened”. This can be useful for several reasons, including <strong>to verify that something isn’t going to happen</strong>. For example, consider testing Gmail’s “undo” send button. After clicking the button, you would want to verify that the RPC to send the email was never sent. We can also verify that there is no pending work. If the test finishes while there is more asynchronous work pending, we don’t want the pending work to continue executing during the next test case. (It’s hopelessly confusing.) The test should either (1) wait for the work to finish, (2) dispose() of the workers explicitly, or (3, least preferred) ask the fake clock to discard pending timers/frames.</li><li>Much less common is to <strong>make time progress in specific increments</strong> in a unit test. One example might be a toast which appears after a known delay, and disappears after another known delay. This use of mock clocks, however, is not really a separate point from the second. We already have the ability to tick the clock specific amounts of time with timeouts. It’s just slow and mock clocks provide nice APIs to speed it up. Mock clocks <em>can</em> make these specific increments more predictable in tests. When using real timeouts, the ordering can sometimes depend on how quickly each task can be processed.</li></ol><p>These are pretty good reasons to use a fake clock, and pretty broadly useful when async code is in play. We do support the idea of installing a fake clock.</p><h3>Common pitfalls with mock clocks</h3><p>While mock clocks offer a degree of control over time in tests, they can also introduce challenges and anti-patterns, and these all apply equally to Angular’s fakeAsync test helper.</p><p>Before the widespread availability and adoption of Promises and async/await in javascript, mock clocks helped keep tests manageable by making them synchronous. In modern-day javascript, we no longer need this. Furthermore, native Promises, async-await, resize or mutation observers, RPCs, etc cannot be executed synchronously; it is impossible to write a synchronous test for such logic. Tests with mock clocks are often forced into a situation where they need to both tick the mocked time <em>and</em> wait for real asynchronous code to happen. This can lead to unrealistic execution orders and can mask timing-related bugs. As a tester, keeping track of this can become a real nightmare and as a result, we’ve seen plenty of “big hammer” helper functions in tests:</p><pre>async function realFlush(delay?: number) {<br>  clock.flush();<br>  await new Promise&lt;void&gt;(resolve =&gt; void setTimeout(resolve, delay));<br>  clock.flush();<br>}</pre><p>Tests also become littered with hard-coded wait times, sometimes with purpose, but often somewhat arbitrary, such as mockClock.tick(1000) or mockClock.flushPendingTimers. Not only do these ticks and flushes often lack clear justification, but they also may need to be adjusted as the codebase evolves. Adjusting a timer in the production code can cause tests to fail, including many which were not intended to depend on or observe the specific timing implementation. In many ways, mock clocks can turn these sections of the tests into <a href="https://testing.googleblog.com/2015/01/testing-on-toilet-change-detector-tests.html">change detector tests</a>.</p><p>Finally, some test utilities take it upon themselves to tick the mock clock, potentially interfering with the test’s intended timing and causing unexpected behavior. On the flipside, asynchronous test helpers and harnesses need to be informed about any installed mock clocks and how to advance them. Forgetting to provide this (assuming the testing APIs even have an option to do so, and many do not) will cause the test helper to stall, waiting for time that never advances.</p><h3>Proposal: Allow mock clocks to automatically advance time</h3><p>In the majority of use cases, mock clocks are used to speed up time. In order to do this, testers are opting into behavior that <em>also </em>stops time. We suspect that the majority of tests don’t want or need this. Clocks don’t stop in real life so it would make sense for mock clocks to advance on their own as well, unless there is a specific desire to pause it.</p><p>If mock clocks were able to advance time in a realistic way then we could realize a future where: <em>No one should care whether time is being faked (unless they want to).</em></p><p>This includes business logic, test helpers, and even most tests themselves. It would be easy to migrate to a mock clock implementation with this property. That is, it would be ideal to be able to take a test that is written against real timer APIs and install a mock clock with no other changes to the tests. Auto-advance gets us pretty close.</p><h3>Use cases</h3><p>Tests with mock clocks would look identical to those without. Let’s go through some examples:</p><h4>Testing async functions</h4><p>When testing async functions, tests only need to enable auto advancing:</p><pre>// methods_under_test.ts<br>export async function blackBoxWithLotsOfAsyncStuff() {<br>  // do some work<br>  await new Promise(r =&gt; void setTimeout(r, 10));<br>  // do some more work<br>  await new Promise(r =&gt; void setTimeout(r, 20));<br>  await Promise.resolve();<br>  // yay, we&#39;re done!<br>  return &#39;done&#39;;<br>}<br>// methods_under_test.spec.ts<br>// …<br>beforeEach(() =&gt; clock.setTickMode(&#39;auto&#39;));<br>it(&#39;is easy to test async functions with interleaved timers and microtasks&#39;, async () =&gt; {<br>  const result = await blackBoxWithLotsOfAsyncStuff();<br>  expect(result).toBe(&#39;done&#39;);<br>});<br>// …</pre><h4>Waiting for conditions to be satisfied</h4><p>The specific timeframe that conditions occur is usually best thought of as an “implementation detail”, rather than part of the public API commitments. It’s fairly easy to imagine changes in the future that alter the timeframe, and which are completely invisible to the user (and the test!).</p><p>For example, changing a debounce time on an instant search input from 100ms to 200ms. Tests which use mock clocks today would typically trigger the input, <strong>explicitly tick</strong> (100 or 200ms), and then make assertions. Instead, tests would use a polling API to <strong>explicitly wait</strong> for a condition to be satisfied as a result of the input changing, such as the <a href="https://testing-library.com/docs/dom-testing-library/api-async/">Testing Library’s async methods</a>:</p><pre>beforeEach(() =&gt; clock.setTickMode(&#39;auto&#39;));<br>it(&#39;gets results when the search changes&#39;, () =&gt; {<br>  const input = screen.getByLabelText(&#39;search-input&#39;);<br>  fireEvent.change(input, {target: {value: &#39;signals&#39;}});<br>  await waitFor(() =&gt; expect(mockAPI).toHaveBeenCalledTimes(1));<br>  await screen.findByText(&#39;Computed signals&#39;);<br>  fireEvent.change(input, {target: {value: &#39;control flow&#39;}});<br>  await screen.findByText(&#39;Control Flow in Components - @if&#39;);<br>});</pre><h3>What’s next</h3><p>We started working with test framework authors to support automatically advancing time in mock clock implementations. As of Jasmine v5.7, the clock now has the ability to advance automatically and can be enabled with <a href="https://jasmine.github.io/api/5.7/Clock#autoTick">Clock#autoTick</a>. It is also released in <a href="https://www.npmjs.com/package/@sinonjs/fake-timers/v/15.0.0#user-content-clocksettickmodemode">@sinonjs/fake-timers version 15</a>, which is used by <a href="https://github.com/jestjs/jest/commit/6813dfa8c78f0232726db88e31c04780d785b3bf">Jest</a> and Vitest.</p><pre>// jasmine v5.7<br>jasmine.clock().install().autoTick();<br><br>// @sinonjs/fake-timers v15<br>const clock = FakeTimers.install();<br>clock.setTickMode({mode: &#39;nextAsync&#39;});<br><br>// future Jest release<br>jest.useFakeTimers().setTimerTickMode({mode: &#39;nextAsync&#39;});</pre><p>Follow us on social media for updates. We hope that this feature is as exciting to the community as it is to us. An automatically advancing mock clock could help existing async tests be faster and more predictable, regardless of what web framework is being used, since this feature doesn’t require any other changes to the test after it’s enabled.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5a393b32dd30" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/handling-time-and-mock-clocks-in-tests-5a393b32dd30">Handling Time and Mock Clocks in Tests</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Angular support for generating apps in Google AI Studio is now available]]></title>
            <link>https://blog.angular.dev/angular-support-for-generating-apps-in-google-ai-studio-is-now-available-3a3afde38f58?source=rss----447683c3d9a3---4</link>
            <guid isPermaLink="false">https://medium.com/p/3a3afde38f58</guid>
            <category><![CDATA[gen-ai-tools]]></category>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[gen-ai-for-business]]></category>
            <dc:creator><![CDATA[Angular]]></dc:creator>
            <pubDate>Thu, 02 Oct 2025 17:43:53 GMT</pubDate>
            <atom:updated>2025-10-02T17:43:49.688Z</atom:updated>
            <content:encoded><![CDATA[<p>Author: <a href="https://bsky.app/profile/marktechson.com">Mark (Techson) Thompson</a></p><p>We’re overjoyed to announce that you <strong>can now generate Angular apps using the power of Google AI Studio</strong>.</p><p>We know that developers are embracing AI and code generation as a part of their daily workflows. Whether it is generating code to prototype a new app experience for your users or getting help on your existing projects — AI is there in the process. We want to ensure that Angular is in the places where developers are building.</p><p>This was a collaborative effort between the Angular team and AI Studio team with the goal of bringing the power of Gemini and AI tooling to the Angular community. Now, AI Studio is another tool where you can vibe code new apps, export the code to GitHub, share your creations with others and <a href="http://cloud.google.com/run">even deploy using Cloud Run</a>.</p><h3>Getting Started</h3><p>To get started head over to the <a href="https://aistudio.google.com/apps">build tab in Google AI Studio</a> where you can get started at no cost.</p><p>First, click the “Advanced Settings” icon to reveal the options for selecting the “System instructions template menu”:</p><figure><img alt="A screenshot of the “Build apps with Gemini” user interface. A red rectangle highlights the “Advanced settings” section, which contains icons for settings, image upload, and submitting a prompt." src="https://cdn-images-1.medium.com/max/1024/1*kKEtUYk5s7qLnXSYrE7S6w.png" /><figcaption>Accessing the Advanced settings for building applications within the Gemini interface.</figcaption></figure><p>Next, select “Angular (TypeScript)” from the “System instructions template” menu to update which framework you want to use for generating your app. Choose Angular 🙂</p><figure><img alt="A screenshot of the Advanced settings side panel in the Gemini app-building interface. A red box highlights the System instructions template section, which lists code generation templates. The available options include Angular (TypeScript) (one of which is selected with a darker background) and React (TypeScript). The panel also indicates that the selected language model is Gemini 2.5 Pro." src="https://cdn-images-1.medium.com/max/1024/1*CMRIMT-vFMf54rpv-HF3Mg.png" /><figcaption>The Advanced settings panel showing the selected Gemini 2.5 Pro model and the Angular (TypeScript) framework template for code generation.</figcaption></figure><p>Finally, enter a prompt for an app idea and watch as Gemini generates your application.</p><p>Now that you know how to generate an application let’s walk through an example scenario. Consider the following prompt:</p><p><em>“Create a bookstore inventory UI. It should display a table of books with columns for title, author, genre, and stock quantity. Include a search bar to find books by title and author.”</em></p><p>Here’s a video walkthrough:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FnJMof8Omiyc%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DnJMof8Omiyc&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FnJMof8Omiyc%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/ecafe3a8f83296a529013b76a0607ace/href">https://medium.com/media/ecafe3a8f83296a529013b76a0607ace/href</a></iframe><h3>What Angular support in AI Studio unlocks</h3><p>Angular developers are looking for ways to create new experiences for their audiences quickly and with low effort. This integration unlocks new, modern workflows:</p><ul><li><strong>Rapid Application Generation with Gemini Model:</strong> AI Studio leverages the Gemini model to quickly generate Angular applications. Accelerating project kickoffs and prototyping for new ideas, reducing the initial development time from weeks to days.</li><li><strong>Develop AI Powered Apps powered by the Gemini API:</strong> AI Studio enables the development of AI-powered applications that leverage the Gemini API. This goes beyond code generation and into creating new application experiences for users that take advantage of the power of LLMs as a core feature.</li><li><strong>Integrated Deployment with Cloud Run:</strong> There is a well-lit path that integrates with Cloud Run for simplified application deployment. Developers can deploy generated applications directly to a scalable, serverless environment, eliminating manual configuration and speeding up delivery to users.</li><li><strong>Export to GitHub for Version Control:</strong> AI Studio allows users to export generated code to GitHub, providing a way to keep the project code you generate and track changes, collaborate effectively, and manage different iterations of their applications within a familiar version control system.</li><li><strong>Simplified Sharing for Collaboration:</strong> Take your creation and make it available to stakeholders or even just sharing a proof of concept app with colleagues as teams experiment with new ideas.</li></ul><h3>Get started right now</h3><p>We’re excited to bring this new integration to the Angular community, giving you another way to build with Angular. We’re excited for you to generate code and explore the possibilities. To try out this new feature, be sure to head over to <a href="http://goo.gle/angular-ai-studio">goo.gle/angular-ai-studio</a> today and follow the instructions from this post to get started.</p><p>Try this out and create apps your users will love. If you make something cool tag us on social media with #AngularInAIStudio.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3a3afde38f58" width="1" height="1" alt=""><hr><p><a href="https://blog.angular.dev/angular-support-for-generating-apps-in-google-ai-studio-is-now-available-3a3afde38f58">Angular support for generating apps in Google AI Studio is now available</a> was originally published in <a href="https://blog.angular.dev">Angular Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>