Skip to main content
C# NATIVE CI/CD ORCHESTRATION

Build pipelines
that think in parallel.

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.

Strongly typed CI agnostic Built on .NET
LIVE ORCHESTRATION
release-pipeline running
STATUS activeBRANCH mainMODE parallel
completeRestore
completeTest
runningAnalyse
runningPackage
waitingPublish
> independent modules executing concurrently
YOUR CODE. YOUR RULES.

Stop scripting.
Start engineering.

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.

ORCHESTRATION

Declare dependencies.
Unlock concurrency.

Modules run the moment their dependencies are ready. Independent work fans out automatically—no hand-built job graph required.

FAMILIAR

Real C#. Real tooling.

Use generics, dependency injection, configuration, testing, and every library in the .NET ecosystem.

Module<TResult>
PORTABLE

One pipeline.
Run it anywhere.

GitHub Actions, Azure Pipelines, TeamCity, or your laptop. If it runs .NET, it runs your pipeline.

GHAZTC_
FROM ZERO TO ORCHESTRATED

Dependencies are
part of the type system.

Make the relationship explicit and Modular Pipelines takes care of ordering, parallelization, results, and cancellation.

Learn how modules work
RunTestsModule.csC#
[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);
    }
}
build succeededUTF-8
READY WHEN YOU ARE

Give your pipeline a proper architecture.

Read the quickstart