Skip to content
Purview Dev logo

Beta This site is in beta — release data and documentation are refreshed from the source repositories on an ongoing basis.

Making development easier.

.NET tooling shaped by real work.

Purview is where I turn repeated engineering problems into open-source tools — removing boilerplate, catching mistakes earlier, and automating the work developers shouldn't have to keep doing by hand.

Automate the repetition

If a problem is predictable and repeatable, I would rather solve it once in tooling than ask developers to remember the same manual steps forever.

Catch problems earlier

Source generation and compile-time validation feature heavily because clear feedback during development is better than reflection, runtime wiring, and late surprises.

Adopt only what helps

Each project should stand on its own. Use one because it solves a problem you have, then combine projects where their shared conventions genuinely add value.

What it looks like in practice

Concrete examples drawn from the projects — the code you write, and what the tooling gives you back.

Developer Telemetry SourceGenerator

Tracing, logging, and metrics from a single interface

You want OpenTelemetry activities, structured logs, and metrics around an order service, but you do not want to hand-write the ActivitySource, ILogger, and Meter wiring in every class.

csharp
[ActivitySource]
[Logger]
[Meter]
public interface IOrderServiceTelemetry
{
    [Activity]
    [Info]
    [AutoCounter]
    Activity? PlacingOrder(int orderId, [Baggage] string region);
}

What you get: The generator emits the implementation and an AddOrderServiceTelemetry() DI extension; you register it once and inject the interface wherever telemetry is needed.

One interface replaces the ActivitySource, ILogger, and Meter boilerplate you would otherwise repeat in every service.

Read the guide →
Developer Event Sourcing

An aggregate that persists as events

You want aggregate-based event sourcing without hand-writing the event stream, snapshot, and transaction plumbing.

csharp
[Aggregate]
public partial class OrderAggregate : AggregateBase
{
    public string CustomerId { get; private set; } = default!;
    public decimal Total { get; private set; }

    [Event]
    public partial void CreateOrder(string customerId);

    [Event]
    public partial void AddLineItem(string productId, string productName, int quantity, decimal unitPrice);
}

What you get: The source generator produces the aggregate plumbing; provider packages add stores for SQL Server, PostgreSQL, MongoDB, Azure Storage, Cosmos DB, or in-memory.

One [Aggregate] declaration, and switching storage means swapping a provider package rather than rewriting the domain.

Read the guide →
Developer ZodSharp

Validate input without exceptions or allocations

You need to validate values at an application boundary and prefer a result you can inspect over exception-driven control flow.

csharp
var nameSchema = Z.String().Min(3).Max(50);
var result = nameSchema.Validate("John");

if (result.IsSuccess)
    Console.WriteLine($"Valid name: {result.Value}");

What you get: Validate/SafeParse return a ValidationResult<T> with no exceptions, while Parse still throws ZodException when you want that behaviour.

Validation is zero-allocation on every valid input path, so the performance claim is a property of the code rather than an aspiration.

Read the guide →

The principle

Automation, not operation.

Purview grew from solving the same real-world engineering problems repeatedly. If the work is predictable, I want the tooling to handle it—not another checklist for developers to operate by hand.

Why I started building Purview →

Featured projects

A selection of the tools that have grown from repeated problems in real .NET projects.

Package status

See the latest stable and prerelease versions across active projects. This summary rolls each project's packages into one row; the releases page has the full package-level view.

Project Stable Prerelease Latest release
5.0.4 — v5.0.4 15 Oct 2026
Event Sourcing Preview 9 packages
1.1.1 2.0.0-prerelease.39 v2.0.0-prerelease.39 29 Sept 2026
ZodSharp Stable 4 packages
2.0.2 — v2.0.2 8 Oct 2026
Value Objects Stable 1 package
1.0.1 — v1.0.1 8 Oct 2026
SourceGenerator Framework Stable 3 packages
1.1.1 — v1.1.1 15 Oct 2026
Results Stable 5 packages
1.0.0.1 — v1.0.0.1 8 Oct 2026
Aspire ResourceKit Stable 1 package
1.0.0.1 — v1.0.0.1 7 Oct 2026
AspireC4 Stable 1 package
13.5.3.11 — v13.5.3.11 7 Oct 2026
Build Stable 1 package
0.5.4 — v0.5.4 15 Oct 2026
Build SDK Stable 1 package
1.0.6 — v1.0.6 15 Oct 2026
Containers Experimental 11 packages
— 1.0.0-prerelease.6 v1.0.0-prerelease.6 6 Oct 2026
Engineering Playbook Experimental 0 packages
— — v0.1.0-prerelease.2 16 Oct 2026

Release data retrieved on 2026-10-16 (cache source).

Find the tool that fits

1 · Start with the problem

Explore 12 active projects covering generation, validation, telemetry, event sourcing, Aspire, and build automation.

2 · Adopt one piece

Purview is not an all-or-nothing stack. Add the package that helps, without replacing choices that already work for your application.

3 · Go deeper when needed

The documentation is brought together from each project's repository, so guides, examples, and technical detail stay close to the code they describe.