Published Build3 min read
Rx.NET 7.0 is a packaging fix wearing a major version number
Splitting WPF and Windows Forms integration out of System.Reactive removes up to 90 MB of unused payload from self-contained Windows builds, according to endjin.
Written for builders.See today for builders

What happened
- Rx.NET 7.0 has been released with a narrowly focused change aimed at reducing deployment size for Windows applications.
- Version 7.0 separates WPF, Windows Forms, UWP and Windows Runtime integration from the main System.Reactive package.
- Reactive Extensions for .NET provides the IObservable<T>-based programming model and operators used to compose asynchronous and event-driven streams.
- The endjin company from the United Kingdom took over maintenance of Rx.NET in January 2023, and recent releases have concentrated largely on modernisation and accumulated technical debt rather than adding large sets of operators.
- Rx.NET 7.0 contains essentially one major functional change.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
Rx.NET 7.0 has shipped with essentially one functional change: WPF, Windows Forms, UWP and Windows Runtime integration have been moved out of the main System.Reactive package [1][2][5]. That matters because referencing System.Reactive from a Windows-specific target framework moniker such as net8.0-windows10.0.19041 could drag the entire WPF and Windows Forms frameworks into deployment output, even for applications that used neither [6][7].
The size numbers are the whole story. According to endjin, the UK company that took over maintenance of Rx.NET in January 2023, the unused UI dependencies added roughly 90 MB without trimming, around 47 MB with trimming, and about 11 MB for Native AOT builds [4][8]. The trimmer, in other words, was clawing back only about half of a payload that should never have been there [1]. For anyone shipping a self-contained desktop or console app, that was a hard floor on download size imposed by a library whose job is composing IObservable<T> streams [3].
The fix is unglamorous plumbing. UI functionality now lives in System.Reactive.Windows.Forms, System.Reactive.Wpf, System.Reactive.WindowsRuntime and System.Reactive.Uwp, and applications that use those integrations must add the relevant package explicitly after upgrading [9]. Projects that never touched them should need no source changes, and affected self-contained deployments get substantially smaller [10].
The compatibility approach is worth studying, because it is the part most teams will encounter. The old UI APIs remain in the runtime assemblies inside the NuGet package but have been stripped from the reference assemblies [11]. Precompiled components built against Rx.NET 6.1 keep running, while anything newly compiled cannot accidentally pick up a Windows UI dependency without the matching package [11]. An analyzer shipped with System.Reactive 7.0 flags affected source and names the package to add [12]. There is one leak: projects using the older packages.config mechanism cannot distinguish NuGet ref and lib assets, so they still see the UI APIs without referencing the new packages, a configuration the maintainers say they do not support and whose compatibility code may eventually be removed [15].
Other breaking changes are thin. Support for .NET 6 and .NET 7 is gone, with .NET 8, 9 and 10, .NET Framework 4.7.2, .NET Standard 2.0 and UWP retained [13]. The nullability annotations on OfType have been corrected; runtime behaviour is unchanged, but the signature change is what technically forced a major version under semantic versioning [14]. Since endjin took over, releases have concentrated on modernisation and accumulated technical debt rather than large batches of new operators, and 7.0 continues that [4].
The context is that users had already flagged this. Earlier discussion raised both the Windows packaging problem and broader concerns about Rx.NET keeping pace with modern .NET deployment models, including workarounds for missing Windows scheduler APIs in some target-framework combinations and requests for better trimming, AOT support and clearer package documentation [16]. Public discussion specifically following the 7.0 release is still limited, so reception is unknown [17].
Two things to watch. First, whether the retained compatibility shims actually get removed, which would end the packages.config escape hatch and force a real migration for older projects [15]. Second, direction: endjin says it has completed the main goals of the maintenance roadmap it published when it assumed stewardship, with future work possibly moving to lower-allocation implementations, code generation, support for ref-like elements and additional operators [18][19]. System.Reactive 7.0 is on NuGet, and the design notes for the split are in the Rx.NET GitHub repository [20].
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
Rx.NET 7.0 has been released with a narrowly focused change aimed at reducing deployment size for Windows applications.
ReportedView cited source - [2]
Version 7.0 separates WPF, Windows Forms, UWP and Windows Runtime integration from the main System.Reactive package.
ReportedView cited source - [3]
Reactive Extensions for .NET provides the IObservable<T>-based programming model and operators used to compose asynchronous and event-driven streams.
ReportedView cited source - [4]
The endjin company from the United Kingdom took over maintenance of Rx.NET in January 2023, and recent releases have concentrated largely on modernisation and accumulated technical debt rather than adding large sets of operators.
ReportedView cited source - [6]
The problem affected applications using both self-contained or Native AOT deployment and a Windows-specific target framework moniker such as net8.0-windows10.0.19041.
ReportedView cited source
Sources & coverage · 1 publisher
The reporting this story was synthesized from, earliest first. Every link goes to the original.
- infoq.comEdin KapićAug 14Rx.NET 7.0 Reduces Deployment Size by Splitting Windows UI Support
Additional citations
- endjin, as reported by InfoQ

