Skip to content

feat: add ReactiveUI Uno reactive variant and examples#364

Merged
glennawatson merged 5 commits into
mainfrom
CP_Update
Jul 4, 2026
Merged

feat: add ReactiveUI Uno reactive variant and examples#364
glennawatson merged 5 commits into
mainfrom
CP_Update

Conversation

@ChrisPulman

Copy link
Copy Markdown
Member

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.Reactive builds from the same source as ReactiveUI.Uno with REACTIVE_SHIM, ReactiveUI.Reactive, and ReactiveUI.Primitives.Reactive.
  • Uno scheduler integration uses ReactiveUI.Primitives/ReactiveUI scheduler abstractions instead of direct System.Reactive package references in the core package.
  • Examples live under src/Examples and are excluded from coverage.
  • A new unpackaged IoT dashboard example demonstrates live telemetry, ReactiveUI commands, activation, bindings, OAPH, interactions, and Uno scheduler usage.
  • The SQLite Studio example is updated to demonstrate current ReactiveUI.Uno usage.
  • TUnit/MTP coverage is scoped to ReactiveUI.Uno and ReactiveUI.Uno.Reactive and reports 100% line and branch coverage.

What is the current behavior?

ReactiveUI.Uno only ships the non-reactive package variant, examples are under the old lowercase src/examples folder, and there is no ReactiveUI.Uno.Reactive example application demonstrating live ReactiveUI behavior with Uno.

Checklist

  • Tests have been added or updated (for bug fixes / features)
  • Docs have been added or updated (for bug fixes / features)
  • Changes target the main branch
  • PR title follows Conventional Commits

Additional information

Local verification completed before opening this PR:

  • Visual Studio MSBuild: ReactiveUI.Uno.slnx /restore /p:Configuration=Release /warnaserror /m /v:minimal
  • TUnit/MTP: dotnet test --project tests/ReactiveUI.Uno.Tests/ReactiveUI.Uno.Tests.csproj -c Release --coverage --coverage-output-format cobertura -- --report-trx
  • TUnit/MTP: dotnet test --project tests/ReactiveUI.Uno.Reactive.Tests/ReactiveUI.Uno.Reactive.Tests.csproj -c Release --coverage --coverage-output-format cobertura -- --report-trx
  • MTP coverage MCP: 100.00% line coverage and 100.00% branch coverage for ReactiveUI.Uno and ReactiveUI.Uno.Reactive
  • Runtime smoke test: ReactiveUI.Uno.Reactive.IoTDashboard on net9.0-desktop, confirming live card values and timestamps update.

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.
@ChrisPulman ChrisPulman marked this pull request as ready for review July 4, 2026 14:12
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 glennawatson merged commit c2cd650 into main Jul 4, 2026
4 checks passed
@glennawatson glennawatson deleted the CP_Update branch July 4, 2026 23:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants