
Fast, lightweight CQRS library built for .NET applications. Competitive with MediatR while offering more flexibility and control.
dotnet add package Routya.Core --version 1.0.5Everything you need for high-performance CQRS message dispatching in modern .NET applications
High-performance dispatching with registry-based optimization. 30% faster than MediatR for notifications with Singleton handlers.
Choose Singleton, Scoped, or Transient per handler. Optimize for your specific use case with flexible lifetime management.
Optional cross-cutting concerns support. Add logging, validation, and custom behaviors that execute around your requests.
Clean interface-based abstraction for Requests/Responses and Notifications. Minimal overhead with maximum clarity.
Supports both sequential and parallel notification dispatching. Choose the right strategy for your scenario.
Zero memory leaks with proper scope management. 56% less memory than MediatR for Singleton notification handlers.
Benchmarked against MediatR 13.1.0 using BenchmarkDotNet on .NET 8
Execution time in nanoseconds
Execution time in nanoseconds
Extend your .NET applications with additional tools built on the same principles of performance and simplicity
Lightweight result wrapper, validation and transformation toolkit for clean Result<T> handling.
dotnet add package Routya.ResultKitASP.NET Core integration providing seamless ProblemDetails conversion and automatic exception handling.
dotnet add package Routya.ResultKit.AspNetCoreAll packages are open source and actively maintained
View All Projects on GitHubEverything you need to get started with Routya in your .NET applications
dotnet add package Routya.Core --version 2.0.0// Register with assembly scanning
builder.Services.AddRoutya(
cfg => cfg.Scope = RoutyaDispatchScope.Scoped,
Assembly.GetExecutingAssembly()
);public class HelloRequest(string name) : IRequest<string>
{
public string Name { get; } = name;
}public class HelloHandler : IAsyncRequestHandler<HelloRequest, string>
{
public async Task<string> HandleAsync(
HelloRequest request,
CancellationToken cancellationToken)
{
return await Task.FromResult($"Hello, {request.Name}!");
}
}var result = await _dispatcher.SendAsync<HelloRequest, string>(
new HelloRequest("World")
);