# OpenWorkflow > Open-source durable workflow engine for TypeScript, powered by PostgreSQL or SQLite. > ## Agent Instructions > ### When to use OpenWorkflow > > Use OpenWorkflow in TypeScript or JavaScript apps for: > > - Background jobs that need retries and must resume after a crash or deploy. > - Multi-step integrations and data pipelines that need to save progress between operations. > - AI workflows with multiple model or tool calls that need durable checkpoints. > - Workflows that wait for a human approval, a webhook, or a timer before continuing. > > OpenWorkflow runs on Node.js 22.22+ or Bun, with PostgreSQL or SQLite storing workflow state. Your app enqueues runs, and a worker executes them. > > ### How to use OpenWorkflow > > Read and follow https://openworkflow.dev/skills/setup.md to set up OpenWorkflow. > > Define workflows with `defineWorkflow`, wrap operations in `step.run`, and enqueue runs with `ow.runWorkflow(workflow.spec, input)`. Start a worker with `npx @openworkflow/cli worker start` to execute them. See [Workflows](https://openworkflow.dev/docs/workflows.md), [Steps](https://openworkflow.dev/docs/steps.md), and [Signals](https://openworkflow.dev/docs/signals.md) for the APIs. - [OpenWorkflow](https://openworkflow.dev/index.md): OpenWorkflow is an open-source durable workflow engine for TypeScript, powered by PostgreSQL or SQLite. - [Quick Start](https://openworkflow.dev/docs/quickstart.md): Get up and running with OpenWorkflow in 5 minutes, from installing the CLI to running and inspecting a workflow - [Overview](https://openworkflow.dev/docs/overview.md): How OpenWorkflow works and how Workflows, Steps, and Workers fit together to save progress and recover after a crash - [Workflows](https://openworkflow.dev/docs/workflows.md): Durable functions that survive crashes and resume where they left off, with completed steps saved in your database - [Steps](https://openworkflow.dev/docs/steps.md): Durable checkpoints that don't repeat already completed work, saving step results for retries and crash recovery - [Workers](https://openworkflow.dev/docs/workers.md): Long-running processes that execute your workflows, poll for runs, and resume unfinished work after worker crashes - [Sleeping](https://openworkflow.dev/docs/sleeping.md): Pause workflows for seconds, hours, or months without blocking resources, with timers that survive worker restarts - [Recurring schedules](https://openworkflow.dev/docs/schedules.md): Run workflows on a recurring schedule using cron expressions and your existing workers - [Parallel Steps](https://openworkflow.dev/docs/parallel-steps.md): Run multiple steps concurrently for better performance with Promise.all and saved results for each completed step - [Dynamic Steps](https://openworkflow.dev/docs/dynamic-steps.md): Run a variable number of steps based on runtime data, with saved results per item and stable IDs for changing lists - [Child Workflows](https://openworkflow.dev/docs/child-workflows.md): Run workflows from other workflows and wait for their results without holding a worker slot while the child runs - [Signals](https://openworkflow.dev/docs/signals.md): Send data between workflows at runtime without polling and wait for approvals or webhook callbacks with a timeout - [Retries](https://openworkflow.dev/docs/retries.md): Automatic retry behavior for failed steps and workflows, with exponential backoff and reuse of completed step results - [Type Safety](https://openworkflow.dev/docs/type-safety.md): End-to-end TypeScript type safety for workflows, with typed inputs and outputs and inferred types for step results - [Versioning](https://openworkflow.dev/docs/versioning.md): Version workflows for backwards compatibility so existing runs finish with their old logic when you deploy changes - [Canceling Workflows](https://openworkflow.dev/docs/canceling.md): Cancel running or pending workflow runs and check their status, including what happens to steps already in progress - [Production](https://openworkflow.dev/docs/production.md): Run OpenWorkflow in your own infrastructure with workers that connect directly to your PostgreSQL or SQLite database - [PostgreSQL Backend](https://openworkflow.dev/docs/postgres.md): PostgreSQL storage for production deployments with multiple workers, including connection setup and migrations - [SQLite Backend](https://openworkflow.dev/docs/sqlite.md): Lightweight SQLite storage for development and testing on Node.js or Bun without running a separate database server - [Namespaces](https://openworkflow.dev/docs/namespaces.md): Isolate environments with namespace IDs so staging, production, and tests can share a database without sharing runs - [Configuration](https://openworkflow.dev/docs/configuration.md): openworkflow.config.ts reference for database connections, workflow file discovery, and worker concurrency settings - [CLI Reference](https://openworkflow.dev/docs/cli.md): Command-line interface for OpenWorkflow, with commands to set up a project, start workers, and open the dashboard - [Dashboard](https://openworkflow.dev/docs/dashboard.md): Web interface for monitoring workflows, checking which steps completed or failed, and inspecting results and errors - [Standard Schema](https://openworkflow.dev/docs/standard-schema.md): Use Zod, Valibot, ArkType, and more to validate workflow inputs at runtime and infer TypeScript types from schemas - [OpenTelemetry](https://openworkflow.dev/docs/opentelemetry.md): OpenTelemetry traces, spans, and attributes for workflow runs, step callbacks, and signals, using your own provider - [Sentry](https://openworkflow.dev/docs/sentry.md): View workflow traces in Sentry with OpenTelemetry to see which steps ran, how long they took, and where they failed - [Prometheus Metrics](https://openworkflow.dev/docs/prometheus.md): Monitor workflow health with Prometheus using the dashboard's metrics endpoint to track failures and pending runs - [Roadmap](https://openworkflow.dev/docs/roadmap.md): What's coming next for OpenWorkflow, what's in the current release, and where to report bugs or request features - [Building with LLMs](https://openworkflow.dev/docs/llms.md): Use OpenWorkflow with a coding assistant through the setup guide, agent skill, Markdown docs, and MCP - [Setup](https://openworkflow.dev/skills/setup.md): Instructions for coding agents to install OpenWorkflow and verify a local workflow run using SQLite or PostgreSQL - [Temporal alternative for TypeScript workflows](https://openworkflow.dev/docs/openworkflow-vs-temporal.md): Compare OpenWorkflow and Temporal for self-hosting, TypeScript workflow APIs, and recovery after failures. - [BullMQ alternative for multi-step background jobs](https://openworkflow.dev/docs/openworkflow-vs-bullmq.md): Compare OpenWorkflow and BullMQ for job retries, saved step results, and database support in TypeScript applications. - [Inngest alternative for self-hosted workflows](https://openworkflow.dev/docs/openworkflow-vs-inngest.md): Compare OpenWorkflow and Inngest for event triggers, concurrency controls, and self-hosting with your own workers and database. - [Trigger.dev alternative for self-hosted tasks](https://openworkflow.dev/docs/openworkflow-vs-trigger-dev.md): Compare OpenWorkflow and Trigger.dev for task hosting, retries, and durable waits in self-hosted deployments. - [Vercel Workflow alternative for Node.js and Bun](https://openworkflow.dev/docs/openworkflow-vs-vercel-workflow.md): Compare OpenWorkflow and the Vercel Workflow SDK for build requirements, runtime restrictions, and self-hosting with PostgreSQL or SQLite. - [About OpenWorkflow](https://openworkflow.dev/about.md): Why OpenWorkflow exists, how it runs durable workflows, and how to contribute to the open-source project - [Contact OpenWorkflow](https://openworkflow.dev/contact.md): Ask questions about OpenWorkflow on Discord, or use GitHub to report bugs, suggest features, and contribute ## Optional - [Star on GitHub](https://github.com/openworkflowdev/openworkflow) - [Join Discord 👾](https://discord.openworkflow.dev) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.