<?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: MOHAMED MOUROUH</title>
    <description>The latest articles on DEV Community by MOHAMED MOUROUH (@mmourouh).</description>
    <link>https://dev.to/mmourouh</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%2F403404%2F096d8245-a268-4a78-b9ed-c4420f14a833.png</url>
      <title>DEV Community: MOHAMED MOUROUH</title>
      <link>https://dev.to/mmourouh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mmourouh"/>
    <language>en</language>
    <item>
      <title>Angular 21 is Here: Real Features That Actually Improve Your Daily Workflow</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Mon, 17 Nov 2025 02:25:51 +0000</pubDate>
      <link>https://dev.to/mmourouh/angular-21-is-here-real-features-that-actually-improve-your-daily-workflow-ogk</link>
      <guid>https://dev.to/mmourouh/angular-21-is-here-real-features-that-actually-improve-your-daily-workflow-ogk</guid>
      <description>&lt;h2&gt;
  
  
  What Angular 21 Is Really About
&lt;/h2&gt;

&lt;p&gt;Angular 21 builds on the foundation of v20 (signals, standalone components, new control flow) and refines it. The theme? &lt;strong&gt;Less configuration, better performance, smarter defaults.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's what the Angular team prioritized:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;HttpClient included by default&lt;/strong&gt; - Zero configuration HTTP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zoneless change detection production-ready&lt;/strong&gt; - Performance leap forward
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signal Forms progression&lt;/strong&gt; - The future of reactive forms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced template syntax&lt;/strong&gt; - NgStyle + new control flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-powered development tools&lt;/strong&gt; - Smarter scaffolding and generation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build optimizations&lt;/strong&gt; - 25-40% smaller bundles&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's dive into each.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature #1: HttpClient by Default (Finally!)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Old Way (Angular ≤20)
&lt;/h3&gt;

&lt;p&gt;Every single project required this dance:&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="c1"&gt;// app.config.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApplicationConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;provideHttpClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/common/http&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;appConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApplicationConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;provideHttpClient&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="c1"&gt;// Had to remember this every time&lt;/span&gt;
    &lt;span class="c1"&gt;// ... other providers&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;Or with NgModules:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;HttpClientModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/common/http&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;NgModule&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;HttpClientModule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Boilerplate in every project&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppModule&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;h3&gt;
  
  
  The New Way (Angular 21)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;It just works.&lt;/strong&gt; HttpClient is now provided at the root level automatically.&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="c1"&gt;// app.component.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;inject&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;HttpClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/common/http&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;standalone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`

      @if (users()) {

          @for (user of users(); track user.id) {
            {{ user.name }}
          }

      }

  `&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;HttpClient&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Works immediately, no config needed&lt;/span&gt;

  &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

  &lt;span class="nf"&gt;ngOnInit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&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;Why This Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One less thing to configure in every project&lt;/li&gt;
&lt;li&gt;New developers don't stumble on "HttpClient not provided" errors&lt;/li&gt;
&lt;li&gt;Aligns with Angular's "just works" philosophy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Migration Impact:&lt;/strong&gt; If you're already using &lt;code&gt;provideHttpClient()&lt;/code&gt;, nothing breaks. Angular handles both approaches seamlessly.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Feature #2: Zoneless Change Detection (Production Ready)
&lt;/h2&gt;

&lt;p&gt;This is the big one. Angular has been working toward this for years, and v21 makes it production-ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Zone.js and Why Remove It?
&lt;/h3&gt;

&lt;p&gt;Zone.js has been Angular's change detection mechanism since the beginning. It patches browser APIs to know when to check for changes. The problem?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adds ~30KB to your bundle&lt;/li&gt;
&lt;li&gt;Creates complex stack traces during debugging&lt;/li&gt;
&lt;li&gt;Introduces performance overhead&lt;/li&gt;
&lt;li&gt;Makes interop with other frameworks tricky&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How Zoneless Works
&lt;/h3&gt;

&lt;p&gt;Angular now uses a signals-based reactivity system. Changes propagate automatically without Zone.js's monkey-patching.&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;computed&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-counter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;standalone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`

      Count: {{ count() }}
      Double: {{ doubled() }}
      +1

  `&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CounterComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;doubled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Auto-updates&lt;/span&gt;

  &lt;span class="nf"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Change detection automatic&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;h3&gt;
  
  
  Enabling Zoneless in Your App
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.config.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApplicationConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;provideExperimentalZonelessChangeDetection&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;appConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApplicationConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;provideExperimentalZonelessChangeDetection&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="c1"&gt;// ... other providers&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;h3&gt;
  
  
  Real-World Performance Impact
&lt;/h3&gt;

&lt;p&gt;From community reports and benchmarks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bundle size:&lt;/strong&gt; 25-40% reduction (depending on your dependencies)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Initial render:&lt;/strong&gt; 30% faster on average&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime performance:&lt;/strong&gt; 50% reduction in unnecessary re-renders&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LCP (Largest Contentful Paint):&lt;/strong&gt; Noticeable improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; If you use third-party libraries that depend on Zone.js, test thoroughly. Most modern libraries work fine, but older ones might need updates.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature #3: NgStyle + New Control Flow
&lt;/h2&gt;

&lt;p&gt;Angular's control flow syntax (@if, &lt;a class="mentioned-user" href="https://dev.to/for"&gt;@for&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/switch"&gt;@switch&lt;/a&gt;) launched in v17 and is now mainstream. In v21, NgStyle finally plays nice with it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before (Clunky)
&lt;/h3&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="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`

      Content here

  `&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  After (Clean)
&lt;/h3&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="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
    @if (isVisible) {

        Content here

    }
  `&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DynamicStylingComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;bgColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#f0f0f0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;fontSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;isVisible&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;updateTheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dark&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="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bgColor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dark&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#1a1a1a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#f0f0f0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&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;Pro Tip:&lt;/strong&gt; For most cases, prefer native class bindings:&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="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`

    Better performance than NgStyle

`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NgStyle is great for truly dynamic values (user-selected colors, calculated dimensions), but class bindings are more performant for toggle-style logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature #4: Signal Forms (Developer Preview Evolution)
&lt;/h2&gt;

&lt;p&gt;Signal-based forms are still in developer preview, but they're maturing fast. This is Angular's vision for the future of form handling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Reactive Forms (Still Valid)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;FormBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Validators&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/forms&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserFormComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;fb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;FormBuilder&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;userForm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Validators&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Validators&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Validators&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
    &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Validators&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;)]]&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userForm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userForm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&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;h3&gt;
  
  
  Signal Forms (Preview - Coming Soon)
&lt;/h3&gt;

&lt;p&gt;The goal is unifying Angular's reactivity model:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;signalForm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;min&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/forms&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserFormComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Hypothetical API (based on RFC discussions)&lt;/span&gt;
  &lt;span class="nx"&gt;userForm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signalForm&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;required&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
    &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;required&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nf"&gt;email&lt;/span&gt;&lt;span class="p"&gt;()]],&lt;/span&gt;
    &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Direct signal access&lt;/span&gt;
  &lt;span class="nx"&gt;nameValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userForm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="c1"&gt;// Automatic reactivity&lt;/span&gt;
  &lt;span class="nx"&gt;isValid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userForm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="nf"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isValid&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userForm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Type-safe&lt;/span&gt;
      &lt;span class="c1"&gt;// Submit logic&lt;/span&gt;
    &lt;span class="p"&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;Status in v21:&lt;/strong&gt; Still experimental. Don't use in production yet, but start experimenting in side projects. The Angular team is actively collecting feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forms become fully reactive, no more &lt;code&gt;valueChanges&lt;/code&gt; subscriptions&lt;/li&gt;
&lt;li&gt;Better TypeScript inference&lt;/li&gt;
&lt;li&gt;Cleaner mental model aligned with signals everywhere else&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤖 Feature #5: AI-Powered Development Tools
&lt;/h2&gt;

&lt;p&gt;Angular 21 introduces the Angular MCP (Model Context Protocol) Server, integrating AI assistance directly into your workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Can It Do?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Smart Scaffolding:&lt;/strong&gt; Generate components with proper structure based on description&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Suggestions:&lt;/strong&gt; Context-aware completions and refactoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration Assistance:&lt;/strong&gt; Help upgrade legacy code patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Practice Enforcement:&lt;/strong&gt; Suggest improvements aligned with Angular style guide&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Example Workflow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Using Angular CLI with AI assistance&lt;/span&gt;
ng generate component user-profile &lt;span class="nt"&gt;--ai-enhanced&lt;/span&gt;

&lt;span class="c"&gt;# AI suggests:&lt;/span&gt;
&lt;span class="c"&gt;# - Standalone component structure&lt;/span&gt;
&lt;span class="c"&gt;# - Signal-based state management&lt;/span&gt;
&lt;span class="c"&gt;# - Proper accessibility attributes&lt;/span&gt;
&lt;span class="c"&gt;# - Test file setup&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Current State:&lt;/strong&gt; Early days. It's most useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating boilerplate with best practices&lt;/li&gt;
&lt;li&gt;Suggesting migration paths&lt;/li&gt;
&lt;li&gt;Code review assistance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Not magic:&lt;/strong&gt; Still requires your judgment and domain knowledge. Think of it as a very knowledgeable pair programmer, not a replacement for thinking.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Feature #6: Build Optimizations
&lt;/h2&gt;

&lt;p&gt;Angular 21's build pipeline got serious upgrades:&lt;/p&gt;

&lt;h3&gt;
  
  
  Bundle Size Reduction
&lt;/h3&gt;

&lt;p&gt;Through improved tree-shaking and dead code elimination:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Typical production build comparison&lt;/span&gt;
Angular 20: 
- main.js: 180KB &lt;span class="o"&gt;(&lt;/span&gt;gzipped&lt;span class="o"&gt;)&lt;/span&gt;
- Total:   245KB

Angular 21 &lt;span class="o"&gt;(&lt;/span&gt;zoneless&lt;span class="o"&gt;)&lt;/span&gt;:
- main.js: 110KB &lt;span class="o"&gt;(&lt;/span&gt;gzipped&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# ~39% reduction&lt;/span&gt;
- Total:   155KB             &lt;span class="c"&gt;# ~37% reduction&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Faster Compilation
&lt;/h3&gt;

&lt;p&gt;The esbuild-based builder is now the default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Development build times&lt;/span&gt;
Angular 20: ~8s initial, ~2s rebuilds
Angular 21: ~5s initial, ~1s rebuilds

&lt;span class="c"&gt;# Production builds&lt;/span&gt;
Angular 20: ~35s
Angular 21: ~22s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Configuration in angular.json:&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;"projects"&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;"your-app"&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;"architect"&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;"build"&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;"builder"&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/build:application"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&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;"optimization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"budgets"&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="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"initial"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"maximumWarning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"500kb"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"maximumError"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1mb"&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;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;
  
  
  Migration Guide: Upgrading to Angular 21
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Check Your Current Version
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Update Angular CLI Globally (Optional)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @angular/cli@21
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Run the Update Command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
ng update @angular/core@21 @angular/cli@21
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Update Other Angular Packages
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng update @angular/material@21 @angular/cdk@21
&lt;span class="c"&gt;# Update other @angular/* packages as needed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Review Breaking Changes
&lt;/h3&gt;

&lt;p&gt;Most apps won't hit breaking changes, but check:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deprecated APIs:&lt;/strong&gt; If you were using deprecated features, they might be removed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party libraries:&lt;/strong&gt; Ensure they're compatible with Angular 21&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom build scripts:&lt;/strong&gt; Verify they work with the new builder&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 6: Adopt New Features Gradually
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Don't rush to adopt everything:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Safe to adopt immediately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HttpClient by default (no code changes needed if you already used it)&lt;/li&gt;
&lt;li&gt;NgStyle with new control flow&lt;/li&gt;
&lt;li&gt;Build optimizations (automatic)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ Test carefully:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zoneless change detection (enable in dev first)&lt;/li&gt;
&lt;li&gt;AI tools (experiment in non-critical areas)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Wait for stable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Signal forms (still experimental)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Testing Your Migration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Add this to catch issues early&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApplicationConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;appConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApplicationConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;// Your existing providers&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Run your test suite&lt;/span&gt;
&lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="nx"&gt;test&lt;/span&gt;

&lt;span class="c1"&gt;// Check for console warnings&lt;/span&gt;
&lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="nx"&gt;serve&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💭 Real Talk: Is Angular 21 Worth Upgrading?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Upgrade if:
&lt;/h3&gt;

&lt;p&gt;✅ You start new projects regularly (get the defaults)&lt;br&gt;&lt;br&gt;
✅ Bundle size impacts your users (mobile-first apps)&lt;br&gt;&lt;br&gt;
✅ You're on Angular 20 already (smooth path)&lt;br&gt;&lt;br&gt;
✅ Performance is critical (zoneless is a game-changer)&lt;/p&gt;

&lt;h3&gt;
  
  
  Wait if:
&lt;/h3&gt;

&lt;p&gt;⏸️ You're on Angular 17 or earlier (too big a jump, upgrade incrementally)&lt;br&gt;&lt;br&gt;
⏸️ Critical third-party dependencies aren't ready&lt;br&gt;&lt;br&gt;
⏸️ You're mid-sprint on a major feature (finish, then upgrade)&lt;/p&gt;

&lt;h3&gt;
  
  
  My Take
&lt;/h3&gt;

&lt;p&gt;As someone working on production Angular apps at scale, here's what I appreciate about v21:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Good:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removes friction (HttpClient by default saves time every single project)&lt;/li&gt;
&lt;li&gt;Performance gains are real, not theoretical&lt;/li&gt;
&lt;li&gt;Backward compatible (I can upgrade without rewriting)&lt;/li&gt;
&lt;li&gt;Predictable release cycle (no surprises)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The "Meh":&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Signal forms still experimental (I want this stable!)&lt;/li&gt;
&lt;li&gt;AI tools are early (useful but not game-changing yet)&lt;/li&gt;
&lt;li&gt;Some features feel incremental (but that's okay - stability matters)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Philosophy:&lt;/strong&gt;&lt;br&gt;
Angular 21 respects your time and existing codebase. It's not trying to be revolutionary; it's trying to be reliable while moving forward. For enterprise teams and serious applications, that's exactly what you want.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Over the next few weeks, I'll be diving deeper into:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zoneless Architecture Patterns&lt;/strong&gt; - How to structure apps without Zone.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signal Forms RFC Analysis&lt;/strong&gt; - What the future of forms looks like&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Benchmarks&lt;/strong&gt; - Real-world tests with Angular 21&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration Stories&lt;/strong&gt; - Upgrading production apps, lessons learned&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Building modern web apps with Angular, sharing what I learn along the way. If you found this helpful, follow me for more Angular deep dives, performance tips, and real-world patterns from production applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://angular.dev/events/v21" rel="noopener noreferrer"&gt;Official Angular 21 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://angular.dev/update" rel="noopener noreferrer"&gt;Angular Update Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://angular.dev/roadmap" rel="noopener noreferrer"&gt;Angular Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Questions? Drop them in the comments. Let's learn together.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Today's react tip: use Memoization for Expensive Calculations.</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Wed, 28 Aug 2024 17:28:37 +0000</pubDate>
      <link>https://dev.to/mmourouh/todays-react-tip-use-memoization-for-expensive-calculations-2l20</link>
      <guid>https://dev.to/mmourouh/todays-react-tip-use-memoization-for-expensive-calculations-2l20</guid>
      <description>&lt;p&gt;useMemo hook prevents recalculating values on every render if dependencies haven’t changed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqskaynxtafc46a7xk5r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqskaynxtafc46a7xk5r.png" alt=" " width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>web</category>
    </item>
    <item>
      <title>Just uploaded a new video on arrays in Java Dive in and check it out now!</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Tue, 27 Aug 2024 22:29:04 +0000</pubDate>
      <link>https://dev.to/mmourouh/just-uploaded-a-new-video-on-arrays-in-java-dive-in-and-check-it-out-now-9el</link>
      <guid>https://dev.to/mmourouh/just-uploaded-a-new-video-on-arrays-in-java-dive-in-and-check-it-out-now-9el</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/pLLzRJEuoHg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>java</category>
      <category>arrays</category>
      <category>datastructures</category>
      <category>coding</category>
    </item>
    <item>
      <title>Today's Javascript Tip: Dynamic Object Keys</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Mon, 26 Aug 2024 23:31:15 +0000</pubDate>
      <link>https://dev.to/mmourouh/todays-javascript-tip-dynamic-object-keys-32hc</link>
      <guid>https://dev.to/mmourouh/todays-javascript-tip-dynamic-object-keys-32hc</guid>
      <description>&lt;p&gt;This technique allows us to create object properties dynamically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7kxjmavx24x7u3sja95.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7kxjmavx24x7u3sja95.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>web</category>
      <category>code</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Object Property Shorthand: When the property name and variable name are the same, you can omit the value.</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Sun, 25 Aug 2024 21:31:23 +0000</pubDate>
      <link>https://dev.to/mmourouh/object-property-shorthand-when-the-property-name-and-variable-name-are-the-same-you-can-omit-the-value-5dhb</link>
      <guid>https://dev.to/mmourouh/object-property-shorthand-when-the-property-name-and-variable-name-are-the-same-you-can-omit-the-value-5dhb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fus2tflos54kuwxtk3bkk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fus2tflos54kuwxtk3bkk.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>frontend</category>
      <category>web</category>
      <category>coding</category>
    </item>
    <item>
      <title>Today's Javascript Tip: extract multiple properties from an object into variables using destructuring assignment.</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Sat, 24 Aug 2024 18:32:37 +0000</pubDate>
      <link>https://dev.to/mmourouh/todays-javascript-tip-extract-multiple-properties-from-an-object-into-variables-using-destructuring-assignment-12e</link>
      <guid>https://dev.to/mmourouh/todays-javascript-tip-extract-multiple-properties-from-an-object-into-variables-using-destructuring-assignment-12e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gndtagdkvgfkr8ekzkg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gndtagdkvgfkr8ekzkg.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>codetips</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Today's Javascript Tip: Use ?? to provide a default value only when the left operand is null or undefined.</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Fri, 23 Aug 2024 19:23:35 +0000</pubDate>
      <link>https://dev.to/mmourouh/todays-javascript-tip-use-to-provide-a-default-value-only-when-the-left-operand-is-null-or-undefined-2139</link>
      <guid>https://dev.to/mmourouh/todays-javascript-tip-use-to-provide-a-default-value-only-when-the-left-operand-is-null-or-undefined-2139</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpakbywkkyakaxz6aslks.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpakbywkkyakaxz6aslks.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>coding</category>
    </item>
    <item>
      <title>Today's CSS Trick: Shorten your code by using CSS shorthand properties.</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Thu, 22 Aug 2024 20:35:24 +0000</pubDate>
      <link>https://dev.to/mmourouh/todays-css-trick-shorten-your-code-by-using-css-shorthand-properties-2n46</link>
      <guid>https://dev.to/mmourouh/todays-css-trick-shorten-your-code-by-using-css-shorthand-properties-2n46</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufwd1nujchu2m35ti8dp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufwd1nujchu2m35ti8dp.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>coding</category>
      <category>csstips</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Coding IOS iPhone Calculator</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Sun, 31 Mar 2024 13:40:18 +0000</pubDate>
      <link>https://dev.to/mmourouh/coding-ios-iphone-calculator-13of</link>
      <guid>https://dev.to/mmourouh/coding-ios-iphone-calculator-13of</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xZySuy7TTds"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>css</category>
    </item>
    <item>
      <title>MCDONALD's Resposive Landing Page using only HTML CSS</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Mon, 02 May 2022 17:50:05 +0000</pubDate>
      <link>https://dev.to/mmourouh/mcdonalds-resposive-landing-page-using-only-html-css-3oi4</link>
      <guid>https://dev.to/mmourouh/mcdonalds-resposive-landing-page-using-only-html-css-3oi4</guid>
      <description>&lt;p&gt;watch the tutorial :&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/K_IjMCDdYNQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>landingpage</category>
      <category>mcdonalds</category>
      <category>css</category>
      <category>html</category>
    </item>
    <item>
      <title>Pure CSS Vertical Image Slider Using Only HTML &amp; CSS</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Mon, 18 Apr 2022 20:17:00 +0000</pubDate>
      <link>https://dev.to/mmourouh/pure-css-vertical-image-slider-using-only-html-css-gk7</link>
      <guid>https://dev.to/mmourouh/pure-css-vertical-image-slider-using-only-html-css-gk7</guid>
      <description>&lt;p&gt;Hi Guys, in this video , we are going to see how to create an awesome vertical image slider with pure css .&lt;br&gt;
No javascript needed to make this vertical image slider.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/QE1cugQggjk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>image</category>
      <category>slider</category>
      <category>pure</category>
      <category>css</category>
    </item>
    <item>
      <title>How to make Google Maps Darker in CSS | Google Maps Dark Mode</title>
      <dc:creator>MOHAMED MOUROUH</dc:creator>
      <pubDate>Sun, 09 Jan 2022 15:52:40 +0000</pubDate>
      <link>https://dev.to/mmourouh/how-to-make-google-maps-darker-in-css-google-maps-dark-mode-2ljh</link>
      <guid>https://dev.to/mmourouh/how-to-make-google-maps-darker-in-css-google-maps-dark-mode-2ljh</guid>
      <description>&lt;p&gt;Hi guys in post I am going to show you how to set your google map to a dark mode.&lt;br&gt;
To do this, follow the steps mentioned in this video :&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/HTtbJ8oh27s"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>dark</category>
      <category>google</category>
      <category>map</category>
      <category>css</category>
    </item>
  </channel>
</rss>
