Forma is a lightweight and modular .NET library that provides abstractions and infrastructure for implementing common behavioral design patterns such as Mediator, Decorator, Pipeline, and more.
Build composable, decoupled, and maintainable application flows using clean architectural principles.
- ✅ Abstract and extensible interfaces (
IMediator,IRequestHandler,IPipelineBehavior,IDecorator, etc.) - ✅ Built-in support for request/response messaging (Mediator Pattern)
- ✅ Seamless integration with .NET Dependency Injection
- ✅ Auto-registration of handlers and behaviors via reflection
- ✅ Support for custom pipeline behaviors (e.g. logging, retry, caching)
- ✅ Zero dependencies in the core package
Available on NuGet.org:
# Core components
dotnet add package Forma.Core
dotnet add package Forma.Mediator
dotnet add package Forma.Decorator
# Additional components
dotnet add package Forma.Chains
dotnet add package Forma.PubSub.InMemory| Method | Categories | Mean | Error | StdDev | Median | Rank |
|---|---|---|---|---|---|---|
| Forma_RequestWithResponse | RequestWithResponse | 334.8 ns | 6.23 ns | 10.92 ns | 332.0 ns | 1 |
| MediatR_RequestWithResponse | RequestWithResponse | 492.4 ns | 9.54 ns | 10.98 ns | 491.9 ns | 2 |
| Forma_SendAsync_object | SendAsObject | 335.7 ns | 6.46 ns | 8.63 ns | 335.2 ns | 1 |
| MediatR_Send_object | SendAsObject | 452.4 ns | 9.31 ns | 26.25 ns | 441.3 ns | 2 |
| Forma_SimpleRequest | SimpleRequest | 283.0 ns | 5.50 ns | 5.40 ns | 282.7 ns | 1 |
| MediatR_SimpleRequest | SimpleRequest | 412.1 ns | 7.47 ns | 10.71 ns | 408.1 ns | 2 |
- .NET 9.0 SDK or higher
- Visual Studio 2025 or other .NET-compatible IDE
# Build the project
dotnet build
# Run tests
dotnet test
# Run benchmarks
dotnet run -c Release --project src/Forma.Benchmarks/Forma.Benchmarks.csproj- Installation - How to install Forma packages
- Features - Overview of Forma capabilities
- Development - Local development setup
- Release Guide - Comprehensive guide for releasing packages
- Testing GitHub Actions - How to test workflows locally
- Project vs NuGet References - Development vs CI/CD build configuration
- Workflow Documentation - GitHub Actions workflows overview
- Logo Assets - Forma logo and branding guidelines
- See the Release Guide Quick Reference for common commands
Forma uses a hybrid approach for releasing its NuGet packages:
- Core Releases (
Forma.Core,Forma.Mediator,Forma.Decorator): Released together with the same version - Component Releases (
Forma.Chains,Forma.PubSub.InMemory): Released independently
For more information on the release process, see the Release Guide.
Contributions are welcome! If you'd like to contribute to Forma:
- Fork the repository
- Create a branch for your feature (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Before contributing, please review the development documentation in the docs/ folder.