Durable Workflows
Autonomous Agents
Connected Systems
Durable Workflows
Autonomous Agents
Connected Systems
The enterprise platform for workflow orchestration, service discovery and pub/sub, powered by Dapr. Build apps and AI agents that are compliant, secure and failure-proof.
Start for free

Battle-tested APIs for AI agents and cloud apps
A developer platform built on Dapr
Workflow
Orchestrate business transactions and AI agents
Durable, long-running executions
Fault-tolerant & automatic recovery of state
Scheduled reminders
& external events
& external events
Publish/Subscribe
Integrate and abstract
any message broker
any message broker
At-least-once guaranteed message delivery
Automatic CloudEvents support
Time-to-live message expiry
Service Connectivity
Cross-cloud, cross-region, cross-compute
Application and agentic identity
Zero trust, secure
communication
Discovery & registry
for apps and AI agents
for apps and AI agents
Built on a foundation of open-source projects
Swappable services and LLMs
Dapr component integrations abstract away the complexity of back-end infrastructure
Pub/Sub Message Brokers
NATS
Jetstream
Jetstream
Solace AMQP
KubeMQ
Azure Event Hubs
MQTT
Apache Pulsar
Kafka
RabbitMQ
GCP Pub/Sub
Redis Streams
RocketMQ
Azure Service Bus
AWS SNS/SQS
Azure Service Bus Topics
Databases and Storage
CockroachDB
Hazelcast
CounchBase
etcd
CloudflareWorkers KV
Memcached
GCP Firestore
Azure Blob Storage
Aerospike
Microsoft
SQL Server
MySQL
Oracle DB
OracleCloud
MariaDB
Cassandra
Azure Table Storage
HashicorpConsul
NATS
Jetstream
Jetstream
MongoDB
PostgreSQL
Redis
RethinkDB
SQLite
ZooKeeper
AliCloud TableStore
AWSDynamo DB
AzureCosmosDB
Oracle Coherence
Secret Stores
AWS SSM Param Store
Tencent CloudSecrets Manager
HuaweiCloud CSMS
Alibaba OOS Param Store
AWS Secrets Mngr
HashicorpVault
Kubernetes
Secrets
Secrets
GCP Secret Mngr
Azure Key Vault
Configuration Stores
Azure App Configuration
Redis
PostgreSQL
LLMs
DeepSeek
Google AI Gemini
Anthropic Claude
HuggingFace
Mistral
OpenAI
Ollama
AWS Bedrock
Azure Open AI
Middleware
OAuth2
OpenID Connect
OPA
Sentinel
Wasm
(Wazero)
Durable execution for the agentic era
// Workflow Definition
public class RequestEscalationWorkflow : Workflow<OrderRequest, object>
{
public override async Task<object> RunAsync(WorkflowContext context, OrderRequest order)
{
// Auto-approve orders under $1000
if (order.Amount < 1000)
{
await context.CallActivityAsync(nameof(AutoApproveActivity), order);
return null;
}
// Orders $1000+ require human approval (7 days max)
try
{
var approval = await context.WaitForExternalEventAsync<ApprovalResult>(
eventName: "human_approval",
timeout: TimeSpan.FromDays(7));
// Handle approval event
await context.CallActivityAsync(nameof(ProcessApprovalActivity), approval);
return null;
}
catch (TaskCanceledException)
{
// Handle timeout - no approval received within 7 days
await context.CallActivityAsync(nameof(HandleTimeoutActivity), order);
return null;
}
}
}
@wfr.workflow(name="request_escalation")
def request_escalation_workflow(ctx: DaprWorkflowContext, order_str: str):
order = json.loads(order_str) if isinstance(order_str, str) else order_str
amount = order.get("amount", 0)
# Auto-approve orders under $1000
if amount < 1000:
yield ctx.call_activity(auto_approve_activity, input=order)
return
# Orders $1000+ require human approval (7 days max)
approval_event = ctx.wait_for_external_event("human_approval")
timeout = ctx.create_timer(timedelta(days=7))
winner = yield when_any([approval_event, timeout])
# Handle approval event or timeout
if winner == timeout:
yield ctx.call_activity(handle_timeout_activity, input=order)
return
approval_result = approval_event.get_result()
yield ctx.call_activity(process_approval_activity, input=approval_result)
const requestEscalationWorkflow: TWorkflow = async function* (
ctx: WorkflowContext,
order: OrderRequest
): any {
// Auto-approve orders under $1000
if (order.amount < 1000) {
yield ctx.callActivity(autoApproveActivity, order);
return;
}
// Orders $1000+ require human approval (7 days max)
const approvalEvent = ctx.waitForExternalEvent("human_approval");
const timeout = ctx.createTimer(7 * 24 * 60 * 60);
const winner = yield ctx.whenAny([approvalEvent, timeout]);
// Handle approval event or timeout
if (winner == timeout) {
yield ctx.callActivity(handleTimeoutActivity, order);
return;
}
const approvalResult = approvalEvent.getResult();
yield ctx.callActivity(processApprovalActivity, approvalResult);
};
// Workflow Definition
@Component
public static class RequestEscalationWorkflow implements Workflow {
@Override
public WorkflowStub create() {
return ctx -> {
OrderRequest order = ctx.getInput(OrderRequest.class);
// Auto-approve orders under $1000
if (order.amount < 1000) {
ctx.callActivity("AutoApproveActivity", order).await();
ctx.complete("approved");
return;
}
// Orders $1000+ require human approval (7 days max)
try {
ApprovalResult approval = ctx.waitForExternalEvent("human_approval", Duration.ofDays(7), ApprovalResult.class).await();
ctx.callActivity("ProcessApprovalActivity", approval).await();
} catch (TaskCanceledException e) {
// Handle timeout
ctx.callActivity("HandleTimeoutActivity", order).await();
}
ctx.complete("order completed");
};
}
}
// Workflow Definition
func RequestEscalationWorkflow(ctx *workflow.WorkflowContext) (any, error) {
var order OrderRequest
if err := ctx.GetInput(&order); err != nil {
return nil, err
}
// Auto-approve orders under $1000
if order.Amount < 1000 {
return nil, ctx.CallActivity(AutoApproveActivity, workflow.WithActivityInput(order)).Await(nil)
}
// Orders $1000+ require human approval (7 days max)
var approval ApprovalResult
err := ctx.WaitForExternalEvent("human_approval", time.Hour*24*7).Await(&approval)
// Handle approval event or timeout
if err == nil {
return nil, ctx.CallActivity(ProcessApprovalActivity, workflow.WithActivityInput(approval)).Await(nil)
}
return nil, ctx.CallActivity(HandleTimeoutActivity, workflow.WithActivityInput(order)).Await(nil)
}
Author workflows in code to automate complex business processes that are stateful, durable, and long-running.
Automatic handling of failures and errors
Support for task chaining, fan-out/fan-in, monitor and external system interaction
Workflow state can be stored in your database
async def main():
order_processor = DurableAgent(
name="OrderProcessingAgent",
role="Order Processing Specialist",
goal="Process customer orders with appropriate approval workflows",
instructions=[
"You are an order processing specialist that handles customer orders.",
"For orders under $1000, automatically approve them.",
"For orders $1000 or more, escalate them for manual approval.",
"Use the process_order tool to handle order processing.",
"Provide clear status updates to customers."
],
tools=[process_order],
# Dapr conversation api for LLM interactions
llm=DaprChatClient(),
# Execution state (workflow progress, retries, failure recovery)
state_store_name="statestore",
state_key="execution-orders",
# Long-term memory (order history, customer preferences)
memory=ConversationDaprStateMemory(
session_id=f"session-orders-{uuid.uuid4().hex[:8]}"
),
# Pub/Sub input for real-time interaction
message_bus_name="message-pubsub",
# Agent discovery store
agents_registry_store_name="registry-state",
)Python
Write agents that have built-in reliability, observability and identity. Use CNCF’s Dapr Agents framework or bring your own.
Built-in reliability, observability and identity
Support for task chaining, fan-out/fan-in, monitor, and external system interaction
Secure Agent-to-Agent communication using HTTP, gRPC or Pub/Sub
What Catalyst helps you achieve
Orchestrate and understand complex processes
Guarantee your applications execute workflows to completion, irrespective of crashes, outages or full cluster shutdowns. Visualize and observe every activity from start to finish.
Build autonomous AI agents without sacrificing reliability
Bring resiliency and flexibility to your agentic applications, with the LLMs of your choice.
Connect and secure apps across any platform
Safely connect all your apps and agents across clouds and regions, with no new code. Keep connectivity simple as your application scales.
Accelerate development
Achieve 30% to 50% developer velocity gains, bringing applications to production faster.
Enforce governance, enable collaboration
With enterprise access control and project structures, foster collaboration while reducing risk.
Integrate and swap cloud services and LLMs without rewrites
Abstract away the storage and state concerns to speed up development and maintain portability.
Deliver on critical use cases
Your App. Your Compute
SDKs
APIs for agents and microservices
Your Infrastructure and LLMs
Dapr SDKs
Build connected applications, workflows and agents
Unified microservices programming model
Build applications and workflows with Dapr APIs including service invocation, pub/sub, secrets, jobs, and state.
Code-first workflow
Write workflows using familiar patterns in any programming language. Generate workflows from diagrams with Workflow Composer.
Any language, any framework, any cloud
Dapr is built to run with any framework or language and provides SDK support for Spring, Spring AI, .NET Aspire, ASP .NET Core, JS Express, FastAPI, and more.
Secure, durable agents
Use an agentic SDK that ensures non-deterministic, complex AI workflows run to completion and recover from failures. Enable secure communication between agents using open standards.
Catalyst Platform
Orchestrate workflows and agents
Centralized Dapr, distributed workflows
Run workflows that span across Kubernetes, VMs, bare metal, and hybrid environments. Implement durable timers, child workflows, human-in-the-loop scenarios, and more.
Bring governance to your projects
Ensure proper structure and access control across all your applications.
Optimized workflow engine performance
Execute long-running, stateful processes reliably without managing infrastructure concerns or scaling.
Orchestrate long-lived agents with memory
Durable execution layer for AI-powered applications running anywhere with immediate insight into your agent’s actions and tool calls.
Catalyst deployment models
Get started today
Catalyze an application in under five minutes
Get Started for Free
1
Sign up for
Catalyst
Catalyst
2
Download the
Diagrid CLI
Diagrid CLI
3
Clone a
quickstart app
quickstart app




