Orchestrate .NET background jobs the way you always should have

A Pythonically-inspired, DX-obsessed, durable job orchestrator for .NET background jobs and workflows.
SomeFlow.cs

The Mission

The Python Job Orchestrators

For years, Python has enjoyed a thriving ecosystem of job orchestrators. Apache Airflow trailblazed the category, followed by platforms like Prefect, Dagster, and others that redefined data engineering and background job execution.

The same question always burdened me: why don't we have this tech in .NET?

pythonic-job-orchestrator-logos

Why so tedious?

It's a demoralizing comparison when surveying the .NET options. Why do we always have to wire up worker engines in messy console apps? Why do we have to shut down our entire system to push one job update out? Why do we have to use the ancient UI of Windows Task Scheduler? Is SSIS really the best we can do? SQL Server Agents can only do so much.

Why do .NET background jobs have so much friction and ugliness?

why-so-tedious

Best of both worlds

What if we could take the type-safety, parallelism, and mature ecosystem of .NET and give it a prebuilt, config-driven, ready-to-run, always-on job orchestrator like the Pythonic ones? What if .NET could reap these benefits like everyone else has?

The only remaining question: who is willing to endure the pain to build this?

best-of-both-worlds
Orchestrate, Observe, Self-host

Introducing Didact, your new dotnet job orchestrator.

Didact is my vision to solve these specific, and very annoying, problems in .NET background job orchestration. It's a very difficult problem to solve with a compiled, non-Pythonic language like C#, there's no mistake about it. But it is possible, and Didact is the only solution willing to deliver this for you.

Rather than take the same, predictable path everyone else does and introduce you to the same set of problems above for the millionth time, Didact does what I always wanted another solution to do.

Apps > NuGet packages

You are provided with prebuilt apps - yes, apps, not NuGet packages - for both the execution engine and the web dashboard. The apps have a companion CLI for easy installs, quick configs, and CI/CD deployments. The only NuGet package required is a small one for flow definitions in your flow libraries.

Class Libraries

Your background jobs are called flows, and they're actually separate from the execution engine host app. Didact accomplishes this by taking a novel class-library approach for your flow definitions. Flows are contained in dedicated class libraries of your making, termed flow libraries.

Runtime Plugins

The magic of the class library approach works by loading your flow libraries as runtime plugins inside of Didact Engine. This approach enables you to take the prebuilt engine, modify behavior as necessary through a config file, and otherwise spend time in your IDE focused only on your flow libraries - not the rest of the orchestration lifecycle.

Self-hosted and Simple

Most job orchestrators constructed this way upsell on a cloud offering. For Didact, I instead elected to make it an exclusively self-hosted platform with a dead-simple architecture. It runs lean, requires a minimal infrastructure setup, and stays in your network. Commercial enhancements are available via a license key upsell with a generous free tier.

Stay informed

Stay informed about the latest updates, follow the founder's journey, and receive discounted pricing for Didact's commercial offerings.