Programowanie reaktywne to koncepcja informatyczna, która opisuje właściwości języka programowania komputerowego skoncentrowanego na automatycznym utrzymywaniu stanu aplikacji w miarę zmiany danych używanych w programie. Jedną z głównych cech reaktywnego języka programowania jest to, że zmienne deklarowane i obliczane są stale ponownie oceniane, ponieważ zmieniają się inne zmienne używane w ich obliczeniach. Oznacza to, że język reaguje na zmiany stanu danych, w przeciwieństwie do używania bardziej imperatywnych poleceń do zarządzania stanem, tak jak robi to wiele tradycyjnych języków programowania. Teoretycznym rezultatem aplikacji wykorzystującej filozofię programowania reaktywnego byłby program, który stale i automatycznie zmienia wyświetlacz lub inne czynniki na podstawie zmieniających się danych napływających do programu. Chociaż kilka imperatywnych modeli programowania może być użytych do osiągnięcia takich samych wyników jak programowanie reaktywne, celem stworzenia języka reaktywnego byłoby posiadanie natywnej obsługi reaktywnych zmian na poziomie pierwotnym, a nie na poziomie obiektu.
Jednym ze sposobów wyjaśnienia, jak działa programowanie reaktywne, jest porównanie go z programowaniem imperatywnym. Gdy dwie liczby są dodawane w języku imperatywnym, wynik dodawania jest zwykle przechowywany w danej lokalizacji pamięci. Operacja ma miejsce w momencie wykonania polecenia, a wynik jest oddzielony od dwóch liczb, które zostały dodane w celu utworzenia sumy. Oznacza to, że jeśli jedna z dwóch dodanych liczb zmieni się po dodaniu, wartość sumy nie zmieni się, ponieważ jest już przechowywana w pamięci i oddzielona od oryginalnych operandów.
Kiedy reaktywny język programowania doda dwie zmienne, aby utworzyć sumę, a jedna z dwóch zmiennych zmieni się w pewnym momencie w przyszłości, suma również się zmieni. Oznacza to, że reaktywny program ma możliwość monitorowania stanu używanych danych i automatycznego reagowania na zmiany, potencjalnie zmieniając ogólny stan całej aplikacji. Istnieje kilka modeli programowania imperatywnego, w tym programowanie oparte na zdarzeniach i modele danych obserwatora, które mogą wykonywać te same zadania, tworząc struktury monitorujące zmiany danych, ale język reaktywny miałby wbudowane mechanizmy do tego celu.
Zastosowanie reaktywnego języka programowania może być w obszarach, w których potrzebna jest interpretacja w czasie rzeczywistym dowolnych strumieni danych. Może to obejmować wizualizację naukową, graficzne interfejsy użytkownika (GUI), a nawet komunikację w czasie rzeczywistym, w której program stale się zmienia w zależności od odbieranego strumienia danych. Należy jednak zauważyć, że tak naprawdę nie ma w pełni zaimplementowanych, niezależnych, reaktywnych języków programowania. Większość działających implementacji tej koncepcji przybiera formę bibliotek zewnętrznych dla bardziej tradycyjnych języków imperatywnych lub funkcjonalnych.