Angular 20: what’s new in May 2025 - Signals, Zoneless, Hydration & Smarter DX
Angular 20, released on May 28, 2025, ushers in a new era of performance, developer experience, and modern reactive programming for Angular developers. In this post, we’ll explore the top features of Angular 20 and explain why upgrading now can yield faster apps, cleaner code, and long-term maintainability.
Signals reached stability - a breakthrough in reactivity
Angular’s reactive foundation continues to mature, with APIs like signal,
You can now build reactive data flows in your application with strong type safety.
effect, linkedSignal, and toSignal now officially stable You can now build reactive data flows in your application with strong type safety.
Example:
import { signal, effect } from '@angular/core';const count = signal(0); effect(() => { console.log(`Count changed: ${count()}`);}); count.set(1); // Triggers effect — "Count changed: 1"Zoneless change detection - now stable (from v20.2 Onward)
Zoneless mode removes the need for Zone.js, optimizing performance, easing debugging, and reducing bundle size. As of Angular 20.2, Zoneless is officially stable.
CLI integration:
bootstrapApplication(AppComponent, { providers: [ provideZonelessChangeDetection(), provideBrowserGlobalErrorListeners() ]});This setup also adds global error listeners to catch unhandled exceptions gracefully.
Incremental Hydration - faster SSR & SEO
Incremental hydration allows selective hydration of components based on interactions or viewport visibility, improving Time to Interactive (TTI) and First Input Delay (FID) - a major win for SEO and performance
Markup snippet:
<ng-container *defer> <app-heavy-widget></app-heavy-widget> </ng-container>
Modern Control-Flow Directives with Type Safety
Angular 20 introduces clean, expressive template control flow using
@if, @for, and @switch, replacing older *ngIf, *ngFor, and *ngSwitch, with full compile-time type checking Example:
@if (items().length > 0) { <ul> @for (item of items(); track item.id; let idx = $index;) { <li>{{ idx + 1 }}: {{ item.name }}</li> } </ul> }@else { <p>No items found.</p>}Smarter templates & diagnostics
Angular’s template compiler now allows TS-like syntax—like template literals,
in, **, void, etc., for powerful expressions Angular.loveMedium.New diagnostics help catch common template errors, such as missing structural directive imports, incorrect
@for track usage, and misuse of nullish coalescing with boolean logic Ninja Squad.Enhanced type checking & host binding validation
With
typeCheckHostBindings enabled, Angular now type-checks properties used in @HostBinding and @HostListener—catching invalid bindings at compile time.createComponent() API - now more flexible
Creating dynamic components just got easier - Angular 20 lets you add directives, inputs, two-way bindings, and event listeners at creation time, enhancing testability and component reuse
Example:
const compRef = createComponent(User, { bindings: [ twoWayBinding("name", nameSignal) ], directives: [ { type: CdkDrag, bindings: [ inputBinding("cdkDragLockAxis", () => 'x'), outputBinding("cdkDragEnded", e => console.log(e)), ] } ] }); Resource APIs & HttpClient enhancements
The experimental
resource() and httpResource() APIs remain a powerful, reactive layer for data fetching. Angular 20 improves naming consistency—resource() now uses params (not query), and httpResource requires a reactive function rather than static URL literal const userResource = httpResource<User>(() => `/api/users/${userId()}`);Also,
keepalive is now supported on HttpClient when using the Fetch API.9. DevTools & Debugging Improvements
Angular DevTools now highlights
OnPush components, shows defined signals and deferred blocks, and allows profiling through enableProfiling() from @angular/coreMigration Tips & SEO Boosters
ng update @angular/cli@angular/core --nextnpm install- Ensure TypeScript v5.9+ for new language feature support.
- Leverage incremental hydration and SSR improvements to enhance SEO and Core Web Vitals.
- Use template diagnostics and type checking to catch issues early and ship safer code.
Final thoughts
Angular 20 isn't just an upgrade - it’s a leap toward faster, cleaner, more reactive applications. From fully stabilized Signals to smarter SSR techniques and better tooling, this release is poised to shape the next chapter of Angular development. If you'd like guidance upgrading your project, code examples, or further SEO tuning—just let me know!