Whipstaff is a multi-project .NET/C# collection of libraries, UI integrations, developer tools, and example apps. It provides reusable building blocks for web, desktop, and cross-platform applications (ASP.NET Core, Blazor, WPF, MAUI, WinUI, Avalonia), integrations with common libraries (Entity Framework, MediatR, Syncfusion, Playwright, Markdig, Mermaid, OpenXml), and several developer tools (dotnet tools, diagram & markdown generators).
- About
- Build & test
- Repository layout — notable files
- Projects
- Examples & samples
- Testing & benchmarks
- Contributing
- License
- Contact
This repository is organized as a multi-project .NET solution (Whipstaff.sln) composed of many small focused projects. Most projects are libraries or integrations intended to be used independently or composed together. The design favors small, single-responsibility packages and includes multiple UI adapter libraries and provider/adapters for persistence and tooling.
To build everything from the solution root:
dotnet build src/Whipstaff.slnTo run unit and integration tests:
dotnet test src/Whipstaff.UnitTests
dotnet test src/Whipstaff.IntegrationTestsTo run or build a sample app (example):
cd src/Whipstaff.Example.WebApiApp
dotnet runFor the dotnet tools included in the repo (MarkdownGen, EF diagram generator), run them via dotnet run from the tool project folder during development or install them when published:
# Example local invocation pattern
dotnet run --project src/Whipstaff.CommandLine.MarkdownGen.DotNetTool- src/Whipstaff.sln — main solution file that ties projects together
- src/Directory.build.props, src/Directory.build.targets — centralized MSBuild configuration used by projects
- src/stylecop.json, src/analyzers.ruleset — shared code-style and analyzer configurations
- src/_shared — shared source/items used across multiple projects (MSBuild SharedItems)
- src/*.csproj — project-level metadata and package references
Below is a table summarizing the projects in src/, their likely purpose, primary technology, and type. Use the links to inspect each project for exact metadata and usage.
| Project | Purpose | Primary tech | Type | Link |
|---|---|---|---|---|
| Whipstaff.Avalonia | Avalonia UI components for cross-platform desktop | C# / Avalonia | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Avalonia |
| Whipstaff.AspNetCore | ASP.NET Core middleware and helpers | C# / ASP.NET Core | Library / Middleware | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.AspNetCore |
| Whipstaff.AspNetCore.StaticFiles | Static/embedded static-file helpers for ASP.NET Core | C# / ASP.NET Core | Middleware | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.AspNetCore.StaticFiles |
| Whipstaff.Benchmarks | BenchmarkDotNet benchmarks for performance testing | C# / BenchmarkDotNet | Benchmarks | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Benchmarks |
| Whipstaff.Blazor | Blazor UI utilities and shared components | C# / Blazor | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor |
| Whipstaff.Blazor.MudBlazor | MudBlazor integration/wrappers for Blazor | C# / MudBlazor | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.MudBlazor |
| Whipstaff.Blazor.Syncfusion | ReactiveUI Vetuviem Binding Models for Syncfusion Blazor components | C# / Syncfusion / Blazor | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion |
| Whipstaff.Blazor.Syncfusion.BarcodeGenerator | ReactiveUI Vetuviem Binding Models for the Syncfusion BarcodeGenerator component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.BarcodeGenerator |
| Whipstaff.Blazor.Syncfusion.Buttons | ReactiveUI Vetuviem Binding Models for the Syncfusion Buttons component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Buttons |
| Whipstaff.Blazor.Syncfusion.Calendars | ReactiveUI Vetuviem Binding Models for the Syncfusion Calendars component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Calendars |
| Whipstaff.Blazor.Syncfusion.Charts | ReactiveUI Vetuviem Binding Models for the Syncfusion Charts component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Charts |
| Whipstaff.Blazor.Syncfusion.Core | ReactiveUI Vetuviem Binding Models and core helpers for Syncfusion integrations | C# / Syncfusion | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Core |
| Whipstaff.Blazor.Syncfusion.Data | ReactiveUI Vetuviem Binding Models for Syncfusion data components | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Data |
| Whipstaff.Blazor.Syncfusion.DataVizCommon | ReactiveUI Vetuviem Binding Models and shared data-viz helpers for Syncfusion | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.DataVizCommon |
| Whipstaff.Blazor.Syncfusion.Diagram | ReactiveUI Vetuviem Binding Models for the Syncfusion Diagram component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Diagram |
| Whipstaff.Blazor.Syncfusion.DropDowns | ReactiveUI Vetuviem Binding Models for the Syncfusion DropDowns component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.DropDowns |
| Whipstaff.Blazor.Syncfusion.Inputs | ReactiveUI Vetuviem Binding Models for the Syncfusion Inputs component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Inputs |
| Whipstaff.Blazor.Syncfusion.Lists | ReactiveUI Vetuviem Binding Models for the Syncfusion Lists component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Lists |
| Whipstaff.Blazor.Syncfusion.Navigations | ReactiveUI Vetuviem Binding Models for the Syncfusion Navigations component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Navigations |
| Whipstaff.Blazor.Syncfusion.Notifications | ReactiveUI Vetuviem Binding Models for the Syncfusion Notifications component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Notifications |
| Whipstaff.Blazor.Syncfusion.Popups | ReactiveUI Vetuviem Binding Models for the Syncfusion Popups component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Popups |
| Whipstaff.Blazor.Syncfusion.Schedule | ReactiveUI Vetuviem Binding Models for the Syncfusion Schedule component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Schedule |
| Whipstaff.Blazor.Syncfusion.Spinner | ReactiveUI Vetuviem Binding Models for the Syncfusion Spinner component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.Spinner |
| Whipstaff.Blazor.Syncfusion.SplitButtons | ReactiveUI Vetuviem Binding Models for the Syncfusion SplitButtons component | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Blazor.Syncfusion.SplitButtons |
| Whipstaff.CommandLine | Command-line utilities and helpers | C# / .NET | CLI / Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.CommandLine |
| Whipstaff.CommandLine.MarkdownGen.DotNetTool | dotnet tool to generate Markdown documentation | C# / dotnet tool | Tool | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.CommandLine.MarkdownGen.DotNetTool |
| Whipstaff.Core | Core utilities and primitives shared across packages | C# / .NET | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Core |
| Whipstaff.Couchbase | Couchbase provider utilities | C# / Couchbase | Provider | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Couchbase |
| Whipstaff.CsvHelper | CSV parsing/writing utilities | C# / CsvHelper | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.CsvHelper |
| Whipstaff.EntityFramework | Entity Framework helper utilities | C# / EF Core | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.EntityFramework |
| Whipstaff.EntityFramework.Diagram.DotNetTool | Tool for generating EF diagrams/schema visualizations | C# / dotnet tool | Tool | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.EntityFramework.Diagram.DotNetTool |
| Whipstaff.Entityframework.Relational | Relational EF helpers and adapters | C# / EF Core | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Entityframework.Relational |
| Whipstaff.Example.AspireAppHost | Example Aspire host demonstrating hosting patterns | C# / Aspire | Example app | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Example.AspireAppHost |
| Whipstaff.Example.AspireServiceDefaults | Default services for Aspire examples | C# / Aspire | Example helper | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Example.AspireServiceDefaults |
| Whipstaff.Example.WebApiApp | Example ASP.NET Core Web API demonstrating usage | C# / ASP.NET Core | Example app | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Example.WebApiApp |
| Whipstaff.Example.WebMvcApp | Example ASP.NET Core MVC app | C# / ASP.NET Core MVC | Example app | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Example.WebMvcApp |
| Whipstaff.Example.WpfApp | Example WPF desktop app | C# / WPF | Example app | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Example.WpfApp |
| Whipstaff.Healthchecks.EntityFramework | EF-based health checks for ASP.NET Core | C# / HealthChecks / EF Core | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Healthchecks.EntityFramework |
| Whipstaff.IntegrationTests | Integration test project | C# / test frameworks | Tests | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.IntegrationTests |
| Whipstaff.Markdig | Markdown processing utilities (Markdig) | C# / Markdig | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Markdig |
| Whipstaff.Maui | .NET MAUI components and helpers | C# / .NET MAUI | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Maui |
| Whipstaff.Maui.AspNetCore.WebView | WebView integration to host ASP.NET Core in MAUI | C# / MAUI / ASP.NET Core | Integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Maui.AspNetCore.WebView |
| Whipstaff.Maui.Syncfusion.Toolkit | ReactiveUI Vetuviem Binding Models for Syncfusion toolkit (MAUI) | C# / Syncfusion / MAUI | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Maui.Syncfusion.Toolkit |
| Whipstaff.MediatR | MediatR helpers and patterns | C# / MediatR | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.MediatR |
| Whipstaff.MediatR.EntityFrameworkCore | MediatR + EF Core integration helpers | C# / MediatR / EF Core | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.MediatR.EntityFrameworkCore |
| Whipstaff.MediatR.Foundatio | MediatR + Foundatio integration helpers | C# / MediatR / Foundatio | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.MediatR.Foundatio |
| Whipstaff.Mermaid | Mermaid diagram generation utilities | C# | Tool/Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Mermaid |
| Whipstaff.MsSql | MSSQL provider/adapters and helpers | C# / MSSQL | Provider | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.MsSql |
| Whipstaff.Nuget | Utilities for NuGet packaging/publishing | C# / NuGet | Tool/Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Nuget |
| Whipstaff.OpenXml | Utilities for working with OpenXML documents | C# / OpenXML SDK | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.OpenXml |
| Whipstaff.Oracle | Oracle provider/adapters and helpers | C# / Oracle | Provider | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Oracle |
| Whipstaff.Playwright | Playwright helpers for browser automation & E2E | C# / Playwright | Testing helper | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Playwright |
| Whipstaff.ReactiveUI | ReactiveUI helpers and view-model utilities | C# / ReactiveUI | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.ReactiveUI |
| Whipstaff.Rx | Reactive Extensions (Rx) helpers | C# / Rx.NET | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Rx |
| Whipstaff.Statiq | Statiq modules/integrations for static site generation | C# / Statiq | Tool/Plugin | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Statiq |
| Whipstaff.Syncfusion.Pdf | Helpers for generating PDFs (Syncfusion) | C# / Syncfusion | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Syncfusion.Pdf |
| Whipstaff.TestableIO.System.IO.Abstractions.TestingHelpers | Testable file I/O helpers (System.IO.Abstractions) | C# / System.IO.Abstractions | Testing helper | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.TestableIO.System.IO.Abstractions.TestingHelpers |
| Whipstaff.Testing | Testing utilities and helpers | C# / test frameworks | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Testing |
| Whipstaff.UnitTests | Unit test project | C# / test frameworks | Tests | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.UnitTests |
| Whipstaff.WinUI | WinUI helpers and components | C# / WinUI | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.WinUI |
| Whipstaff.Windows | Windows-specific helpers/integrations | C# / Windows | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Windows |
| Whipstaff.Wpf | WPF helpers and components | C# / WPF | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Wpf |
| Whipstaff.Wpf.AvalonEdit | AvalonEdit integration for WPF | C# / AvalonEdit | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Wpf.AvalonEdit |
| Whipstaff.Wpf.AspNetCore.WebView | WebView integration to host ASP.NET Core in WPF | C# / WPF / ASP.NET Core | Integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Wpf.AspNetCore.WebView |
| Whipstaff.Wpf.CefSharp | CefSharp (embedded browser) integration for WPF | C# / CefSharp | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Wpf.CefSharp |
| Whipstaff.Wpf.Mahapps | MahApps theming/controls integrations for WPF | C# / MahApps | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Wpf.Mahapps |
| Whipstaff.Wpf.MaterialDesign | MaterialDesign integration for WPF | C# / MaterialDesign | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Wpf.MaterialDesign |
| Whipstaff.Wpf.Syncfusion.SfDiagram | ReactiveUI Vetuviem Binding Models for the Syncfusion SfDiagram component (WPF) | C# / Syncfusion | UI integration | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Wpf.Syncfusion.SfDiagram |
| Whipstaff.Runtime | Runtime and hosting helpers | C# / .NET | Library | https://github.com/dpvreony/whipstaff/tree/main/src/Whipstaff.Runtime |
- Whipstaff.Example.WebApiApp — example ASP.NET Core Web API demonstrating usage with Whipstaff libraries.
- Whipstaff.Example.WebMvcApp — MVC sample app.
- Whipstaff.Example.WpfApp — WPF sample application demonstrating desktop scenarios.
- Whipstaff.Example.AspireAppHost, Whipstaff.Example.AspireServiceDefaults — Aspire hosting examples.
- Unit tests: src/Whipstaff.UnitTests
- Integration tests: src/Whipstaff.IntegrationTests
- Benchmarks: src/Whipstaff.Benchmarks
Run with:
dotnet test src/Whipstaff.UnitTests
dotnet test src/Whipstaff.IntegrationTests
dotnet run --project src/Whipstaff.Benchmarks- Open an issue to propose major changes.
- Fork the repo and create a topic branch for changes.
- Add tests for new features and run linters/formatters.
- Follow the repository's StyleCop/analyzer rules (see src/stylecop.json and src/analyzers.ruleset).
This project is licensed under the MIT License — see the LICENSE file for details.