Goodbye RxJS? A Deep Dive into Angular Signals Goodbye RxJS? A Deep Dive into Angular Signals

Goodbye RxJS? A Deep Dive into Angular Signals

What Are Angular Signals?

Angular Signals are a new reactive primitive introduced to simplify how we manage reactive state.

Example:

import { signal } from '@angular/core';
const counter = signal(0);
// Read signal
console.log(counter()); // 0
// Update signal
counter.set(1);

Signals are:

  • Synchronous
  • Fine-grained
  • Dependency-tracked
  • Built into the Angular change detection system (no async pipe needed)

Signals vs RxJS: The Key Differences

FeatureSignalsRxJS
Reactivity ModelPull-basedPush-based
Change Detection IntegrationNativeNeeds async pipe or manual trigger
Asynchronous streamsNoYes
Composition toolscomputed, effectmap, merge, switchMap, etc..
Dependency trackingAutomaticManual via subscriptions
Learning curveEasier for stateSteeper for streams

Real-World Example: Counter with RxJS vs Signals

RxJS Version

import { BehaviorSubject } from 'rxjs';
export class CounterRxComponent {
private count$ = new BehaviorSubject(0);
increment() {
this.count$.next(this.count$.value + 1);
}
}

Signals Version

import { signal } from '@angular/core';
export class CounterSignalComponent {
count = signal(0);
increment() {
this.count.set(this.count() + 1);
}
}

Same feature, less boilerplate, easier tracking.

When to use Signals vs RxJS

Use signals when

  • You’re managing UI state
  • You want tight integration with Angular’s change detection
  • You need simplicity and performance

Use RxJS when

  • You deal with streams (HTTP, websockets)
  • You need advanced operators
  • You’re already in a RxJS-heavy codebase

Conclusion

RxJS isn’t going anywhere — but Signals are here to change how we think about reactivity in Angular.

If you can find an example project with both RxJS and signals on my github.

Happy Coding!


← Back to blog