All projects

AOT-first property observation

ProMvvm

Observe changing view-model state without making reflection the default architecture.

StatusActive
TierMaintained
DomainFrameworks
Repositorywieslawsoltes/ProMvvm

A high-performance .NET MVVM property-observation library with generated typed paths, nested rewiring, ReactiveUI-compatible WhenAnyValue APIs, and no required reactive runtime.

ProMvvm makes typed property descriptors the fast path while retaining familiar expression APIs for incremental migration. Each subscription owns its notification chain, current-value emission, equality policy, and cleanup without requiring a global provider registry.

01

Generated, reflection-free property paths

02

Nested observation and automatic rewiring

03

ReactiveUI-compatible migration APIs

04

Trim-safe and NativeAOT-safe typed path

Where it fits.

  • MVVM applications that need lightweight observable property streams
  • ReactiveUI or CommunityToolkit.Mvvm teams adopting NativeAOT
  • Library authors avoiding global service locators and runtime reflection
.NET

10.0

NativeAOT / trimming

Typed APIs

ReactiveUI 24

Models + migration API

CommunityToolkit.Mvvm

Generated properties

Real output,
not a mockup.

ProMvvm GitHub repository preview
ProMvvm packages the runtime, generator, samples, benchmarks, architecture notes, and release gates for AOT-first property observation.

Clear layers.
Replaceable seams.

01

Describe

Generated or handwritten property paths capture strongly typed getters and notification names.

02

Subscribe

Cold observable sinks attach directly to INotifyPropertyChanged or an explicit local adapter.

03

Rewire

Nested paths detach and reconnect when an intermediate object changes.

04

Compose

BCL IObservable results work directly or compose with optional System.Reactive operators.

12 valuesmulti-source overload arity
Zerorequired reactive dependencies
TypedNativeAOT observation path
LiveGitHub metadata

From package
to first frame.

Choose the package workflow used by your repository, then start from the smallest working example. Replace VERSION with the current stable or prerelease version shown on NuGet.

01 · Install
Terminal
dotnet add package ProMvvm
02 · Use · csharp
QuickStart.cs
[GeneratePropertyPaths]
public partial class SearchViewModel : ObservableObject
{
[ObservableProperty]
private string _searchText = string.Empty;
}
using var subscription = viewModel
.WhenAnyValue(SearchViewModelPropertyPaths.SearchText)
.Subscribe(Console.WriteLine);

Start focused.
Compose as needed.

The repository is the source of truth.

Use the current documentation and samples, inspect changes, report issues, or support continued open-source maintenance.

DisposableGenerator

Search everything.

Loading the index…

move open esc close

Preparing metadata and full-text search…