FRP is a programming paradigm that uses reactive and functional programming concepts. It models real-time user interfaces and event-driven applications using streams of events and cells that hold values. This allows the program structure to be declarative by describing what the program does rather than how it works. Common FRP concepts include streams that represent events, cells that hold values over time, and primitives like map, filter and merge that transform and combine streams and cells. Sodium is an FRP library for Java that uses push-based evaluation.