Declare dependencies.
Unlock concurrency.
Modules run the moment their dependencies are ready. Independent work fans out automatically—no hand-built job graph required.
Break delivery work into focused C# modules. Declare what depends on what. Modular Pipelines works out what can run now and what needs to wait.
Your delivery logic deserves the same structure, tooling, and confidence as the software it ships. Write ordinary C# and let the dependency graph handle the choreography.
Modules run the moment their dependencies are ready. Independent work fans out automatically—no hand-built job graph required.
Use generics, dependency injection, configuration, testing, and every library in the .NET ecosystem.
Module<TResult>GitHub Actions, Azure Pipelines, TeamCity, or your laptop. If it runs .NET, it runs your pipeline.
Make the relationship explicit and Modular Pipelines takes care of ordering, parallelization, results, and cancellation.
Learn how modules work[DependsOn<RestoreModule>]
public sealed class RunTestsModule
: Module<TestResult>
{
protected override async Task<TestResult>
ExecuteAsync(ModuleContext context,
CancellationToken cancellationToken)
{
// Your pipeline is just C#.
return await context.Tools.DotNet.TestAsync(..., cancellationToken);
}
}