Six months ago I started migrating the MKX Capital frontend from a BehaviorSubject-heavy architecture to Angular Signals. Here is what I learned.
Where Signals win
Computed state is where Signals are genuinely superior to RxJS. With computed(), derived state is lazy, memoized, and glitch-free. The mental model is simpler: a Signal is a value, not a stream.
Where they fall short
Time-based operations. Anything involving debounceTime, throttleTime, or complex multicasting still belongs in RxJS. The async pipe story for Signals is better with toSignal(), but the interop layer adds cognitive overhead.
The rule I settled on
Signals for synchronous reactive state. RxJS for async streams (HTTP, WebSockets, timers). The two cooperate well via toSignal() and toObservable().
Originally published on ysndmr.com.
Top comments (0)