DuraGraphThe durable control plane · open source

Durable AI workflows,
on your infrastructure.

The open-source control plane for AI agents. Every step is an event, so runs replay, resume after a crash, and audit exactly — in a single binary you run yourself.

$curl -fsSL https://duragraph.ai/install.sh | sh
Event log · run_4f2a9clive
12:04:01.402RunCreatedassistant=support
12:04:01.419NodeStartedretrieve
12:04:01.659NodeCompletedretrieve · 240ms
12:04:01.661NodeStartedllm.call
12:04:02.841NodeCompletedllm.call · 1180ms
12:04:02.843NodeStartedtool.exec
12:04:03.487NodeCompletedtool.exec · 644ms
append-only event logp. 1
Fig. 01Why DuraGraph

Reliability is not a feature you add later. It is the substrate.

Agentic systems fail where ordinary services don't — a model times out mid-plan, a tool runs twice, an approval never arrives. DuraGraph records every transition as an immutable event, so a crashed run resumes exactly where it stopped, and the same log powers replay, audit, and observability. One mechanism, three guarantees.

All of it is Apache 2.0 and self-hosted — your graphs, prompts, and data never leave your infrastructure.

Fig. 02The request path

Event sourcing & CQRS, all the way down.

request
persist
publish
pull
reconcile
SSE · HITL
Client app
browser · SDK
Agent Gateway
control plane
PostgreSQL
Event store
append-only
NATS
Event stream
JetStream
Worker poolSCALES →N
Python
Customer support
consumer
TypeScript
Research analyst
consumer
Go
HR/People ops
consumer
worker.N
scales horizontally

The gateway persists to the append-only Postgres event store; events publish to NATS JetStream; workers pull the stream, run agents, and reconcile state back. Drag any node to rearrange.

Fig. 03The method

From graph to durable run.

  1. 01Define

    Design the graph

    Model the workflow as nodes and edges: the graph is the program.

  2. 02Author

    Write in Python or Go

    Familiar SDKs and patterns. First-class support for any LLM provider.

  3. 03Run

    Execute durably

    Every step is appended to the log with at-least-once delivery guarantees.

  4. 04Observe

    Replay & monitor

    Real-time metrics and OpenTelemetry traces, plus full-fidelity replay.

Fig. 04Your first agent

Define a graph, in Python or Go.

Model the workflow as nodes and edges, then point a worker at duragraph dev. It registers on startup — no codegen, no DSL.

pythonpypi · duragraph
from duragraph import Graph, llm_node, entrypoint

@Graph(id="customer_support")
class CustomerSupportAgent:
    @entrypoint
    @llm_node(model="gpt-4o-mini")
    def classify(self, state):
        return {"intent": "billing"}

    @llm_node(model="gpt-4o-mini")
    def respond(self, state):
        return {"response": f"handling {state['intent']}"}

    classify >> respond

# deploy to the running control plane
CustomerSupportAgent().serve("http://localhost:8081")
gogo-sdk
type ChatState struct {
    Result string `json:"result,omitempty"`
}

type ThinkNode struct{}

func (n *ThinkNode) Execute(
    ctx context.Context, state *ChatState,
) (*ChatState, error) {
    state.Result = "Hello from Go!"
    return state, nil
}

func main() {
    g := graph.New[ChatState]("my_agent")
    g.AddNode("think", &ThinkNode{})
    g.SetEntrypoint("think")

    // connect to the running control plane
    w := worker.New(g,
        worker.WithControlPlane("http://localhost:8081"))
    w.Start(context.Background())
}
Fig. 05In practice

From single agents to enterprise workflows.

i.

AI Agents

Memory, tool use, multi-step reasoning.

ii.

Data Pipelines

ETL with retries and fault tolerance.

iii.

Research Labs

Reproducible runs with full lineage.

iv.

Enterprise Apps

Mission-critical workflows, audited.

What's in the box
a91f · created
3e7c · step.ran
b204 · reduced
+ append  ∎ immutable
Event sourcing
immutable append-only log
openaianthropicgooglegeminihuggingface
Multi-LLM native
per-node model choice
run.step_4 · needs review
✓ Approve
✕ Deny
Human-in-the-loop
inline approvals
data: {"tok":"Dura"}
data: {"tok":"Graph"}
data: [DONE]
Real-time streaming
server-sent events
auth0clerkokta
Pluggable auth
RBAC · OAuth · SSO
OpenTelemetry
OpenTelemetry
traces · metrics
msg#118
msg#119
msg#120↻ retry
Reliable delivery
transactional outbox
ctl
w1w2w3
Horizontal scale
lease-epoch fencing
Vendor neutral
no lock-in · swap any piece
PythonGoTypeScript
Polyglot SDKs
Python · Go · TypeScript
At a glance

The spec sheet.

Control planeGo
Event storePostgreSQL
MessagingNATS JetStream
SDKsPython · Go · TypeScript (coming soon)
Dev modeSingle binary, embedded PG + NATS
ObservabilityPrometheus · OpenTelemetry
APIREST + SSE streaming
LicenseApache 2.0
Questions

Before you self-host.

Where does my data live?

On your own Postgres and network. Self-hosted, never phones home.

Can I run it air-gapped?

Yes — a single binary with embedded Postgres and NATS, no required outbound calls.

How does it scale?

Workers scale horizontally with optimistic concurrency, lease-epoch fencing, and a transactional outbox.

Which LLM providers are supported?

Any — first-class OpenAI and Anthropic, with per-node model choice.

Do I need Docker or Kubernetes?

No. duragraph dev runs everything embedded; production points at your own Postgres and NATS.

Is it really open source?

Core is Apache 2.0; enterprise features are source-available. Your data is always yours.

Fig. 06Get started

Run your first durable agent in a minute.

One binary, with embedded Postgres and NATS. Nothing to provision.

$curl -fsSL https://duragraph.ai/install.sh | sh
DuraGraph is the open-source AI workflow control plane, built for production. Self-hosted and event-sourced.
Apache 2.0 · © 2026 DuraGraph · Privacy · Cookies