feat: add ReactiveUI Uno reactive variant and examples#364
Merged
Conversation
Upgrades ReactiveUI/Splat packages to v24/v20 beta, migrates from IScheduler to ISequencer for main-thread schedulers, replaces System.Reactive.Unit with RxVoid, adds DeferredScheduler and SchedulerSequencerAdapter, implements ISequencer on dispatcher schedulers, removes Windows SDK/AppSDK explicit references, updates TFMs to drop net9.0 mobile targets, and adds AGENTS.md redirect.
Core changes: - add ReactiveUI.Uno.Reactive as a linked-source package variant using ReactiveUI.Reactive and ReactiveUI.Primitives.Reactive - replace System.Reactive dependencies in the Uno package with ReactiveUI.Primitives scheduler and observable aliases - update Uno scheduler registration so WithUno(window) uses the startup window dispatcher Examples: - move examples under src/Examples and keep them excluded from coverage - add an unpackaged ReactiveUI.Uno.Reactive IoT dashboard sample with live local telemetry - update SQLiteStudio to demonstrate current ReactiveUI.Uno usage patterns Tests and coverage: - add the ReactiveUI.Uno.Reactive TUnit test project - extend TUnit coverage for the core and reactive Uno variants - remove stale coverage artifacts and configure MTP coverage for the two package assemblies
Disable apphost generation for TUnit/MTP test projects through shared build props so macOS CI does not attempt to copy a missing generated apphost for net10.0 test targets. Verification: dotnet build ReactiveUI.Uno.Tests -c Release -f net10.0 /warnaserror; dotnet build ReactiveUI.Uno.Reactive.Tests -c Release -f net10.0 /warnaserror; dotnet test for both TUnit projects with MTP coverage from src; Visual Studio MSBuild Release solution build with /warnaserror.
Parse persisted XML state headers without assuming CRLF line endings so Unix-style payloads keep the full assembly-qualified type name. This fixes Linux and macOS test failures where PublicKeyToken=null was truncated to PublicKeyToken=nul. Add TUnit coverage for LF, CRLF, missing-header, and empty-header XML state payloads through the shared test suite used by both ReactiveUI.Uno and ReactiveUI.Uno.Reactive. Verification: dotnet test for both TUnit projects with MTP coverage from src; MTP coverage 100% line and branch for ReactiveUI.Uno and ReactiveUI.Uno.Reactive; Visual Studio MSBuild Release solution build with /warnaserror.
Rewrite the README into a full reference guide for both `ReactiveUI.Uno` and `ReactiveUI.Uno.Reactive`. Document package selection, target frameworks, startup/configuration APIs, views, routing, schedulers, suspension state, examples, and build/test commands, while also cleaning up badges, formatting, and a few wording/HTML issues.
glennawatson
approved these changes
Jul 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What kind of change does this PR introduce?
Feature and migration update for ReactiveUI.Uno.
This adds the ReactiveUI.Uno.Reactive package variant, migrates the Uno implementation to ReactiveUI.Primitives scheduler/observable contracts, adds a ReactiveUI.Uno.Reactive IoT dashboard example, and moves examples under
src/Examples.What is the new behavior?
ReactiveUI.Uno.Reactivebuilds from the same source asReactiveUI.UnowithREACTIVE_SHIM,ReactiveUI.Reactive, andReactiveUI.Primitives.Reactive.src/Examplesand are excluded from coverage.ReactiveUI.UnoandReactiveUI.Uno.Reactiveand reports 100% line and branch coverage.What is the current behavior?
ReactiveUI.Unoonly ships the non-reactive package variant, examples are under the old lowercasesrc/examplesfolder, and there is no ReactiveUI.Uno.Reactive example application demonstrating live ReactiveUI behavior with Uno.Checklist
Additional information
Local verification completed before opening this PR:
ReactiveUI.Uno.slnx /restore /p:Configuration=Release /warnaserror /m /v:minimaldotnet test --project tests/ReactiveUI.Uno.Tests/ReactiveUI.Uno.Tests.csproj -c Release --coverage --coverage-output-format cobertura -- --report-trxdotnet test --project tests/ReactiveUI.Uno.Reactive.Tests/ReactiveUI.Uno.Reactive.Tests.csproj -c Release --coverage --coverage-output-format cobertura -- --report-trxReactiveUI.UnoandReactiveUI.Uno.ReactiveReactiveUI.Uno.Reactive.IoTDashboardonnet9.0-desktop, confirming live card values and timestamps update.