What are Angular signals, and how do they differ from RxJS observables?
A signal is a wrapper around a value that knows when it is read and notifies anything depending on it when it changes. It was introduced in Angular 16 and is the framework's direction of travel for reactivity.
count = signal(0);
double = computed(() => this.count() * 2);
increment() { this.count.update(n => n + 1); }Reading a signal is a function call. computed derives a value and recalculates lazily only when a dependency actually changed, and effect runs side effects when dependencies change.
How they differ from observables:
- Signals are synchronous and always hold a current value. Observables are streams over time and may not have emitted yet.
- Signals track dependencies automatically. You never subscribe or unsubscribe, so there is no leak to manage.
- Observables are far richer for asynchronous work — cancellation, retries, debouncing, and combining streams are what RxJS is for.
The practical division: signals for component state and derived values; RxJS for events and asynchronous streams such as HTTP and user input. toSignal and toObservable bridge the two.
Note: The reason this matters is performance. Signals tell Angular exactly which templates depend on a changed value, enabling fine-grained updates instead of walking the component tree — which is what makes zoneless Angular possible.





