ReactiveUI¶
An advanced, composable, functional reactive model-view-viewmodel framework for all .NET platforms.
this.WhenAnyValue(x => x.SearchQuery)
.Calm(TimeSpan.FromSeconds(0.8), RxSchedulers.TaskpoolScheduler)
.Select(query => query?.Trim())
.Unique()
.Where(query => !string.IsNullOrWhiteSpace(query))
.WitnessOn(RxSchedulers.MainThreadScheduler)
.InvokeCommand(this, x => x.ExecuteSearch);
this.WhenAnyValue(fun x -> x.SearchQuery)
.Calm(TimeSpan.FromSeconds(0.8), RxSchedulers.TaskpoolScheduler)
.Select(fun (query: string) -> if isNull query then null else query.Trim())
.Unique()
.Where(fun query -> not (String.IsNullOrWhiteSpace(query)))
.WitnessOn(RxSchedulers.MainThreadScheduler)
.InvokeCommand(this.ExecuteSearch)
-
Declarative
Describe what you want, not how to do it. Code is communication between people that also happens to run on a computer; optimising for human readability pays off over a project's lifetime.
-
Composable
Build re-usable chunks of functionality that slot into your reactive pipelines. Write and test code once, leverage it many times.
-
Cross-platform
Share business logic between mobile and desktop. First-class support for .NET (WPF, WinForms, WinUI), MAUI, Avalonia, and Uno. Xamarin remains supported for legacy apps.
-
Scalable & Testable
ReactiveUI copes gracefully as your application grows. Control time in tests — no more 3-second waits.
-
Built on ReactiveUI.Primitives
Streams are LINQ for events. ReactiveUI.Primitives makes them fast, small and ready for Native AOT, and works alongside System.Reactive when a library still needs it.
-
Async-aware commands
ReactiveCommandruns your async work, surfacesCanExecute, funnels errors to one handler, and cancels on demand — bind it to a button and forget the plumbing. -
Less boilerplate
Decorate fields and methods with
[Reactive],[ObservableAsProperty], and[ReactiveCommand]; source generators write the property and command code for you. -
Open-source community
Contribute under an OSI-approved licence. Free for commercial use. Maintained by the ReactiveUI Association and Contributors.