Managed durable execution

Workflows that always finish.

Write ordinary functions - backend jobs or long-running AI agents. durablex saves each step as it runs, so the work survives crashes, restarts, and deploys, retrying and resuming exactly where it left off. Fully managed - no infrastructure to run.

TypeScript SDKmanaged enginelive console
order.createdrunning
const orderCreated = defineWorkflow({
name: "order.created",
handler: async (ctx) => {
await ctx.step.run("charge", chargeCard)
await ctx.step.sleep("settle", "10s")
await ctx.step.run("ship", createShipment)
await ctx.step.emit("notify", shipped)
},
})
chargerunning···
settlequeued
shipqueued
notifyqueued
run started
A run moves throughqueuedrunningsucceededfailedcancelledskipped
How it works

From your code to a durable run.

01

Connect a runner

Expose your workflows with serve() and register(), or dial out with connect() over a WebSocket - no inbound URL needed.

02

Write ordinary code

Wrap each unit of work in step.run(). The engine saves the result, retries on failure, and resumes from the last checkpoint.

03

Watch & control

The console streams every run and step. Cancel, pause, resume, or replay - from the console or the REST API.

Features

What you get.

Each section pairs what you write with the live console view it produces.

01

Durable steps

Wrap work in a step. Each runs once and its result is saved, so a crash replays to the last checkpoint and continues - it never re-runs what already finished.

const orderCreated = defineWorkflow<{ orderId: string }>({  name: "order.created",  retry: { maxAttempts: 3 },  handler: async (ctx) => {    const charge = await ctx.step.run("charge", () => chargeCard(ctx.event.data));    await ctx.step.sleep("settle", "10s");    return ctx.step.run("ship", () => createShipment(charge));  },});
order.createdrunning
trigger · order.created
chargerunning···
settlequeued
shipqueued
notifyqueued
02

Events, CEL filters & cron

A workflow starts from an event, optionally gated by a CEL filter, or on a cron schedule with no event at all. Every event is kept in a durable, replayable log.

const proWelcome = defineWorkflow({  name: "welcome.pro",  triggers: [{ event: "user.signup", if: 'event.data.plan == "pro"' }],  handler: async (ctx) => { /* ... */ },});// a cron trigger needs no event:// triggers: [{ cron: "@every 1m" }]
event loglive
receivedeventsourceoutcome
noworder.createdapi1 run
3suser.signupapi1 gated
8snotification.requestedemit1 run
14scron.rollupcron1 run
21saccount.syncapi1 run
30spayment.charge-onceapi1 run
03

Flow control, declared

Eight controls live right next to retry on the workflow, enforced by the engine. Pick one to see how it is declared.

account.syncconcurrency
defineWorkflow({
name: "account.sync",
concurrency: { limit: 2, key: "accountId" },
handler,
})
Cap how many runs execute at once in a scope. Extras wait their turn - never dropped.
04

Runners: serve or connect

A runner exposes your workflows to the engine. Serve mode stands up an HTTP endpoint the engine calls; connect mode dials out over a WebSocket - so an agent behind NAT needs no inbound URL.

apps1 app · 2 runners
democonnected21 workflows
node-7serve · HTTPconnected
agent-1connect · WebSocketoffline
05

Workflows, introspected

Register a runner and the engine reads its workflows automatically - their retry policy, triggers, and flow controls. No manifest to keep in sync.

workflows6 registered
nameappattemptsbackoff
order.createddemo3fixed
account.syncdemo1fixed
payment.capturedemo1fixed
job.flakydemo5fixed
cron.rollupdemo1fixed
welcome.prodemo1fixed
06

Inspect, control, replay

Every run, step, input, output, and error is live in the embedded dashboard. Cancel, pause, resume, or replay a finished run - from the UI or the same REST endpoints.

import { createClient } from "@durablex/sdk/client";const dx = createClient({ engineUrl: "http://localhost:6770" });await dx.runs.replay(runId); // also: cancel, pause, resume
runsdx.tarqeem.cloud/runs
workflowstatusduration
order.created↺ replayfailed12.0s
account.syncsucceeded11ms
search.reindexsucceeded9ms
email.sendsucceeded1.0s
webhook.ingestsucceeded7ms

Run your first workflow.

No infrastructure to provision - durablex Cloud runs the engine for you.