MSL.Plumber.Pipeline
5.1.1
dotnet add package MSL.Plumber.Pipeline --version 5.1.1
NuGet\Install-Package MSL.Plumber.Pipeline -Version 5.1.1
<PackageReference Include="MSL.Plumber.Pipeline" Version="5.1.1" />
<PackageVersion Include="MSL.Plumber.Pipeline" Version="5.1.1" />
<PackageReference Include="MSL.Plumber.Pipeline" />
paket add MSL.Plumber.Pipeline --version 5.1.1
#r "nuget: MSL.Plumber.Pipeline, 5.1.1"
#:package MSL.Plumber.Pipeline@5.1.1
#addin nuget:?package=MSL.Plumber.Pipeline&version=5.1.1
#tool nuget:?package=MSL.Plumber.Pipeline&version=5.1.1

Plumber
Another weapon from the MSL Armory
Middleware pipelines for host-free .NET projects. Plumber brings the ASP.NET Core middleware model — a request, a response, and a chain of steps with dependency injection and configuration — to .NET projects that run without a host: console apps, AWS Lambdas, Azure Functions, queue consumers, file processors, and similar workloads.
The wiki is the full documentation: concepts, a tutorial, per-type reference, and deployment recipes.
Packages
MSL.Plumber.Pipeline— the core builder, handler, middleware, and request context. See Pipeline.MSL.Plumber.Pipeline.Testing—PlumberApplicationFactoryfor exercising a real pipeline in tests. See Testing.MSL.Plumber.Serilog.Extensions— per-request Serilog request logging. See Serilog Extensions.MSL.Plumber.Diagnostics— per-request OpenTelemetry tracing and metrics middleware. See Diagnostics.
Install
dotnet add package MSL.Plumber.Pipeline
Plumber targets .NET 10.
Hello, World
using Plumber;
using var handler = RequestHandlerBuilder
.Create<string, string>()
.Build();
handler.Use((context, next) =>
{
context.Response = $"Hello, {context.Request}!";
return next(context);
});
var greeting = await handler.InvokeAsync("World");
Console.WriteLine(greeting); // Hello, World!
A Plumber application has four pieces: a builder, the handler it builds, one or more middleware, and an InvokeAsync call. Each invocation gets its own dependency injection scope and cancellation token.
Where to go next
- New to middleware pipelines? Start with Concepts, then the Tutorial.
- Know the shape already? Jump into Building a pipeline, Middleware, and Request lifecycle.
- Looking for a specific scenario? Browse the recipes — AWS Lambda, Azure Functions, queue consumers, webhooks, and more — from the wiki home.
- Migrating from an earlier version? See Migration. v5 makes no breaking changes; v4 and v3 are covered with before-and-after examples.
Repository · NuGet — Pipeline · NuGet — Testing · MIT License · Report an issue
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Configuration.Binder (>= 10.0.9)
- Microsoft.Extensions.Configuration.CommandLine (>= 10.0.9)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 10.0.9)
- Microsoft.Extensions.Configuration.Json (>= 10.0.9)
- Microsoft.Extensions.Configuration.UserSecrets (>= 10.0.9)
- Microsoft.Extensions.DependencyInjection (>= 10.0.9)
- Microsoft.Extensions.Diagnostics.Abstractions (>= 10.0.9)
- Microsoft.Extensions.Logging (>= 10.0.9)
- Microsoft.Extensions.Options (>= 10.0.9)
- Ulid (>= 1.4.1)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on MSL.Plumber.Pipeline:
| Package | Downloads |
|---|---|
|
MSL.Plumber.Serilog.Extensions
Serilog middleware for the Plumber pipeline framework: structured per-request logging through a Serilog DiagnosticContext, with configurable level, message template, and enrichment. Completion events carry the active trace's TraceId and SpanId, so logs correlate with your Plumber.Diagnostics spans. |
|
|
MSL.Plumber.Pipeline.Testing
WebApplicationFactory-style integration testing for Plumber pipelines. PlumberApplicationFactory bootstraps your application's real builder and pipeline, then lets tests override services, configuration, and logging before the pipeline is built. |
|
|
MSL.Plumber.Diagnostics
OpenTelemetry tracing and metrics for the Plumber pipeline framework, with no OpenTelemetry SDK dependency: per-request spans and metrics are emitted through the in-box ActivitySource and Meter primitives, so you export to any backend — OTLP, Jaeger, Prometheus, or the console — with your own SDK setup. Configurable per-request enrichment. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 5.1.1 | 56 | 6/25/2026 |
| 5.1.0 | 150 | 6/14/2026 |
| 5.0.0 | 119 | 6/13/2026 |
| 4.0.0 | 106 | 6/13/2026 |
| 3.1.0 | 112 | 6/13/2026 |
| 3.0.0 | 130 | 5/9/2026 |
| 2.3.3 | 404 | 3/19/2025 |
| 2.3.2 | 224 | 1/23/2025 |
| 2.3.1 | 231 | 11/15/2024 |
| 2.3.0 | 169 | 7/26/2024 |
| 2.2.0 | 279 | 7/22/2024 |
| 2.1.0 | 180 | 7/3/2024 |
| 2.0.2 | 226 | 6/26/2024 |
| 2.0.1 | 252 | 6/26/2024 |
| 2.0.0 | 168 | 6/25/2024 |
| 1.1.1 | 227 | 6/22/2024 |
| 1.1.0 | 190 | 6/22/2024 |
| 1.0.50 | 214 | 6/22/2024 |
| 1.0.49 | 259 | 5/16/2024 |
| 1.0.48 | 221 | 5/10/2024 |