Skip to main content
npx @openworkflow/cli init
OpenWorkflow Dashboard

What is OpenWorkflow?

OpenWorkflow is a TypeScript framework that makes multi-step operations durable. Wrap each operation in a step, and OpenWorkflow remembers which steps already finished. If anything crashes, the workflow picks up right where it left off — completed steps are never re-run.
import { defineWorkflow } from "openworkflow";

export const processOrder = defineWorkflow(
  { name: "process-order" },
  async ({ input, step }) => {
    // if the server crashes after this step, the card is NOT charged again
    await step.run({ name: "charge-card" }, async () => {
      await payments.charge(input.orderId);
    });

    await step.run({ name: "send-confirmation" }, async () => {
      await emails.send({ to: input.email, subject: "Order confirmed!" });
    });
  },
);

Features

Durable - Workflows survive process restarts and server crashes. Completed steps are never repeated.
Resumable - After a crash or deploy, workflows pick up from the last completed step automatically.
Pausable - Workflows can sleep for seconds or months without tying up resources.
Type Safe - First-class TypeScript support for inputs and outputs.
No Extra Servers - Uses your existing database (PostgreSQL or SQLite). No separate queue or orchestration service.

Get Started