finds.dev← search

// the find

CommunityToolkit/dotnet

★ 3,691 · C# · NOASSERTION · updated Mar 2026

.NET Community Toolkit is a collection of helpers and APIs that work for all .NET developers and are agnostic of any specific UI platform. The toolkit is maintained and published by Microsoft, and part of the .NET Foundation.

The .NET Community Toolkit is a set of platform-agnostic C# libraries covering argument validation, high-performance memory primitives, and an MVVM framework with source generators. It's maintained by Microsoft and actively used in production first-party apps like the Microsoft Store. The target is .NET developers building anything from WPF to MAUI to server-side code who want well-tested, allocation-conscious utilities without pulling in a full framework.

The MVVM Toolkit's source generators are the real draw — `[ObservableProperty]` on a partial property generates the backing field, `INotifyPropertyChanged` plumbing, and even `[NotifyPropertyChangedFor]` chains at compile time, zero reflection, AOT-safe. HighPerformance is genuinely useful: `Span2D<T>` and `Memory2D<T>` let you work with 2D slices of contiguous memory without copying, and `StringPool` gives you interning with bounded memory — the kind of thing you'd otherwise write yourself. The `Guard`/`ThrowHelper` split in Diagnostics is a thoughtful design: validation calls stay at the call site, throw paths get outlined into separate methods so JIT can inline the happy path. Roslyn versioning is handled correctly — separate projects for Roslyn 4.0, 4.1.2, 5.0 rather than one package that breaks on older toolchains.

The multi-Roslyn-version setup (four separate SourceGenerators projects) is a maintenance burden that leaks into the consuming developer experience — if you're on an older VS/Roslyn, you silently get fewer features with no obvious explanation why. `CommunityToolkit.Common` is a catch-all that hasn't aged well: `ISettingsStorageHelper`, `IFileStorageHelper`, and `IncrementalLoadingCollection` are Windows/UWP leftovers that feel out of place in a platform-agnostic package. The MVVM messenger (`IMessenger`) has no dead-letter handling and weak-reference token cleanup is manual — easy to lose messages in partially constructed object graphs. Documentation lives on learn.microsoft.com, which is good for API reference but bad for understanding non-obvious interactions like `[ObservableRecipient]` + `[RelayCommand]` in a source-generated class.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →