Skip to content

ZeroAlloc-Net/ZeroAlloc.Validation

Repository files navigation

ZeroAlloc.Validation

NuGet Build License

Source-generated, attribute-based validation for .NET that allocates nothing on the valid path. The source generator emits a strongly-typed validator class at build time — no reflection at runtime. When all rules pass, the entire validation cycle produces zero heap allocations.

Install

dotnet add package ZeroAlloc.Validation

30-Second Example

using ZeroAlloc.Validation;

[Validate]
public class CreateOrderRequest
{
    [NotEmpty][MaxLength(50)] public string  Reference { get; set; } = "";
    [GreaterThan(0)]          public decimal Amount    { get; set; }
    [NotEmpty][EmailAddress]  public string  Email     { get; set; } = "";
}

// The source generator emits CreateOrderRequestValidator at build time
var request   = new CreateOrderRequest
{
    Reference = "ORD-2026-001",
    Amount    = 99.99m,
    Email     = "customer@example.com"
};
var validator = new CreateOrderRequestValidator();
var result    = validator.Validate(request);

if (!result.IsValid)
    foreach (ref readonly var f in result.Failures)
        Console.WriteLine($"{f.PropertyName}: {f.ErrorMessage}");

Performance

Scenario ZeroAlloc.Validation FluentValidation Speedup Allocation (valid)
Flat model 6.7 ns 327 ns ~49× 0 B
Nested model 10.1 ns 619 ns ~61× 0 B
Collection (3×) 14.3 ns 2,043 ns ~143× 0 B

See Performance for full benchmark results.

Packages

Package Purpose
ZeroAlloc.Validation Core library — attributes, source generator, ValidationResult
ZeroAlloc.Validation.AspNetCore Auto-validates request models; returns HTTP 422 on failure
ZeroAlloc.Validation.Inject Emits AddZeroAllocValidators() — bulk DI registration in one call
ZeroAlloc.Validation.Options Emits ValidateWithZeroAlloc() — plugs validators into Microsoft.Extensions.Options
ZeroAlloc.Validation.Testing Fluent assertions for unit-testing validators

Features

  • Zero heap allocation on the valid path
  • 25+ built-in validation attributes
  • Nested object and collection validation
  • ASP.NET Core auto-validation (HTTP 422 on failure)
  • Zero-friction DI registration (AddZeroAllocValidators())
  • Source-generated Microsoft.Extensions.Options integration (ValidateWithZeroAlloc())
  • Per-rule severity (Error, Warning, Info)
  • Conditional rules (When / Unless / [SkipWhen])
  • Short-circuit with [StopOnFirstFailure]
  • Custom rules via [Must] predicates or [CustomValidation] methods
  • Testing helpers via ZeroAlloc.Validation.Testing

Documentation

About

A zero-allocation validation library for .NET. Roslyn source generator wires all rule evaluation at compile time — no reflection, no boxing, no runtime overhead.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages