The recording of the first ever ReactiveUI virtual conference is available on our YouTube Channel.


ReactiveUI has been going through rapid changes since version 7.

Here are some guides on how to upgrade to newer features.

Net Standard 2.0

As of version 8.0 of ReactiveUI, support for .NET Standard will be included. We recommend using .Net Standard in any utility libraries you develop that are meant to be cross platform.

Edit your .Net Standard project file and locate the following:

  <PackageReference Include="ReactiveUI" Version="9.9.1" />

Use PackageReference NuGet

Older projects need to upgrade from packages.config to the newer PackageReference format. This is because we rely on SemVer 2.0 features in our packages.

Follow the Upgrade Guide on how to upgrade.

If you have any packages that rely on System.Reactive less than v4, make sure you include a PackageReference to System.Reactive.Compatibility.

A tip in the new PackageReference you no longer have to include dependencies such as System.Reactive unless you want to deliberately upgrade to a newer version then we have set. We recommend only including ReactiveUI and Platform Packages.

TIP: if the upgrade option does not show when right clicking on the packages.config file, make sure that PackageReference are your default choice under Tools -> Options -> NuGet Package Manager -> General, You can change the "Default package management format" to "PackageReference".

Use the platform ReactiveUI NuGet packages for Xamarin Forms, WinForms, WPF

We had to introduce a number of new NuGet packages for various platforms. This is because Visual Studio for Mac would be looking for Windows only symbols if we didn't exclude them from the main package.

See Platform Package for more details.

NOTE: The Event packages also are separated for some platforms also.

Use subscribe with ReactiveCommand.Execute()

ReactiveCommand<TParam, TReturn>.Execute() is now a IObservable. As such it is now lazy evaluated and won't trigger until you Subscribe().





Use Interactions instead of UserError

UserError were replaced by a much more generic mechanism called Interactions.

Use DynamicData instead of ReactiveList

ReactiveList was starting to get rather buggy and a maintenance issue for maintainers.

We decided to recommend DynamicData as many of the maintainers were already using that library.