Skip to content

Pragmatic.ControlPlane

SignalR-based coordination for distributed Pragmatic hosts — identity, heartbeat, commands, health aggregation, migration coordination, and deploy orchestration. Degrades gracefully: works without a control plane (NoOp defaults), adds distributed features when active.

Two-plus instances need coordination. Without it, hosts migrate simultaneously (data corruption), deploys cause downtime (no drain/restart orchestration), there’s no visibility into which hosts are healthy, and maintenance mode is per-instance instead of cluster-wide.

Without Control Plane: With Control Plane:
Host A ─┐ ┌─ migrate (race!) Host A ─┐ ┌─ leader migrates
Host B ─┤─ start ─┤─ migrate (race!) Host B ─┤─ register ─CP┤─ followers wait
Host C ─┘ └─ migrate (race!) Host C ─┘ heartbeat └─ all start serving
Data corruption risk. Coordinated, observable.

Hosts register with a SignalR hub, heartbeat, and coordinate: a leader runs migrations while followers wait, deploys drain and restart in order, health aggregates across the cluster, and maintenance mode is cluster-wide. In a monolith you need none of this — so it’s opt-in, with NoOp defaults that keep a single host working unchanged.

Terminal window
dotnet add package Pragmatic.ControlPlane

Enable it on the host (app.UseControlPlaneHub(...) / hub URL config); without it, the NoOp defaults apply and a single instance runs normally.

Identity, heartbeat, commands, health aggregation, leader-elected migration coordination, and graceful degradation are functional within the 0.8 preview. See the roadmap.

| Concepts | The coordination model, leader election, graceful degradation | | Getting Started | Wire the hub, register hosts, coordinate migrations | | Common Mistakes | The most frequent control-plane pitfalls | | Troubleshooting | Problem/solution guide |

  • .NET 10.0+

Part of the Pragmatic.Design ecosystem — see Licensing. Pragmatic.ControlPlane is licensed under the PolyForm Small Business 1.0.0 license (free for small businesses; commercial license above the threshold).