All reflections
3 min read

🎯 TL;DR: Angular 20 with Signals + Zoneless = -10.4% transfer size, no Zone.js polyfills, faster performance

🧠 Signals: The New Reactivity#

What it is: A reactivity system that replaces RxJS for local state management.

// Before (complex)
this.userService.getUser().pipe(map(user => user.name)).subscribe(...)

// After (simple)
count = signal(0)
doubleCount = computed(() => this.count() * 2)

Ultra-simple template:

<div>{{ count() }}</div> <!-- No more | async needed -->

⚡ Zoneless: Maximum Performance#

Zone.js completely removed = No polyfills + granular change detection

// Angular 19: polyfills needed (34.52 kB)
// Angular 20: ✅ No polyfills needed!

// Simple configuration
export const appConfig: ApplicationConfig = {
  providers: [
    provideZonelessChangeDetection(),
    // ...
  ],
}

📊 Real Measured Results (Custom Starter Kit)#

Bundle Size Comparison#

VersionRaw SizeTransfer SizeFeatures
Angular 19744.97 kB144.87 kBStandard setup
Angular 20725.47 kB129.78 kBSignals + Zoneless + Enhanced features

Performance Gains#

MetricImprovementImpact
Raw Bundle-19.5 kB (-2.6%)Faster initial load
Transfer Size-15.09 kB (-10.4%)Faster network performance
Build Time2.720sOptimized compilation
Zone.js✅ RemovedNo polyfills needed

📈 Key insight: These metrics are from a custom starter kit comparing Angular 19 vs 20. Even with more features in Angular 20, better performance is achieved thanks to Zoneless architecture!

🎨 Winning Pattern#

export class ModernComponent {
  // Simple state
  data = signal<User[]>([])

  // Automatic derived state
  activeUsers = computed(() => this.data().filter(u => u.active))

  // Reactive updates
  updateData(newData: User[]) {
    this.data.set(newData) // All computed values update automatically
  }
}

🏆 Why Adopt Now?#

✅ Performance: Granular change detection + faster builds (2.720s)
✅ Simplicity: No more RxJS complexity for local state
✅ Bundle: No Zone.js polyfills (34.52 kB saved)
✅ Network: -10.4% transfer size for better loading

🚦 Express Migration#

  1. New project: provideZonelessChangeDetection()
  2. Existing project: Progressive migration by component
  3. Pattern replacement: BehaviorSubject → signal()

🔗 Resources#

📚 Learn more#

🛠️ Community#

Angular 20 represents a significant evolution in the framework. Signals provide intuitive reactivity and Zoneless architecture delivers measurable performance gains. The combination of simplified state management, reduced bundle size, and better developer experience makes this a worthwhile upgrade.