Durable Workflows
for Kubernetes

Build resilient, long-running workflows with regular Go code. Native Kubernetes integration with zero external dependencies.

Built for Production

Everything you need to build resilient, scalable workflows in Kubernetes.

Durable by Design

Every workflow step is automatically persisted. Your workflows resume exactly where they left off after any failure.

Kubernetes Native

All state is stored in Kubernetes resources. No external databases, queues, or services required.

Automatic Retries

Configurable retry policies with exponential backoff. Failed activities automatically retry without workflow restart.

Timers & Scheduling

Sleep for days, weeks, or months. Schedule recurring executions with cron expressions. All persisted and fault-tolerant.

Developer Friendly

Write workflows as regular Go code. No YAML, no DSLs. Full IDE support, debugging, and testing capabilities.

Execellent Tooling

Debug your workflows with the built-in UI or CLI tools, or monitor execution with standard Kubernetes tools.

How It Works

From code to production in three simple steps.

01

Define Your Workflow

Write workflows as regular Go functions. Use kontinue.Execute to call child workflows.

func Deploy(ktx *kontinue.ExecutionContext, args *Args) (*Res, error) {
    // Execute child workflows
    result, _ := kontinue.Execute[TestResult](
      ktx,
      "run-tests",
      &TestArgs{...},
      &kontinue.ExecuteOptions{},
    )

    return &Res{...}, nil
}
02

Register with a Worker

Register your function with a worker. kontinue uses Kubernetes CRDs to manage all execution state.

func main() {
    w := worker.NewWorker()

    worker.RegisterFunction(
      w,
      "deploy",
      Deploy,
      &function.Options{
        Description: "Run a deployment workflow with tests"
        Arguments:   function.ArgumentMetadata(&Args{}),
    })

    w.Run(ctx, &worker.Options{Namespace: "default"})
}
03

Execute with Confidence

Start workflows via the CLI, UI, client library or by applying Kubernetes resources. They automatically survive failures and resume from their last checkpoint.

// Spawn a workflow
exec, err := client.Spawn(ctx, "deploy", &Args{
    Cluster: "test-use1",
}, &client.SpawnOptions{})

// Wait for completion
result, err := client.Wait[OrderResult](ctx, exec.Name)

Ready to Build Resilient Workflows?

Get started with kontinue today and build workflows that never fail. Open source, Kubernetes native, and production ready.