Introduction
Run reliable, multi-step workflows as ordinary code.
Durablex runs durable workflows: ordinary functions whose every step is saved as it runs, so the whole thing survives crashes, restarts, and deploys without losing progress or repeating work.
You write normal code. Durablex handles the retries, the waiting, and the resuming.
What it's for
Anything you don't want stuck in a single request/response cycle, or that has to keep going even when things fail:
- Sending emails or notifications, with retries.
- Calling an AI model or a flaky third-party API.
- Processing an upload, then doing follow-up work.
- Multi-step jobs that pause, wait, and continue - sometimes over days.
Example
const orderCreated = defineWorkflow<OrderData>({
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", "1h");
return await ctx.step.run("ship", () => createShipment(charge));
},
});Each step.run runs once and its result is remembered. If ship fails, only ship retries -
charge is never charged twice. If the process restarts during the one-hour wait, the run picks up
exactly where it left off.
How it runs
Durablex Cloud runs the engine for you as a managed, multi-tenant service. You write workflows with the TypeScript SDK and connect a runner; the platform handles persistence, retries, scheduling, and the live console. No queue, database, or state machine to operate.
Durablex is early. Available today: step.run, step.sleep, step.sleepUntil, step.waitForEvent,
step.runWorkflow, step.emit, parallel steps (Promise.all), per-step retries, onFailure
handlers, event + cron triggers (with CEL filters and wildcards), a durable event log with a live
stream, run cancel/pause/resume/replay, and per-workflow flow control (concurrency, throttle,
rate-limit, debounce, batch, priority, singleton).