FRP is about programming with asynchronous data streams declaratively. Reactive programming treats everything as an asynchronous data stream. FRP uses concepts from functional programming like immutable data and first class functions. The key abstraction in FRP is IObservable which represents a stream of events or values over time. FRP is useful for handling events, stateful applications, and incoming data streams from sources like the file system, sensors, or HTTP requests.