# Overview

import { Catalog } from "/snippets/catalog.jsx";

Upstash Workflow lets you write **durable, reliable and performant serverless functions**. Get delivery guarantees, automatic retries on failure, scheduling and more without managing any infrastructure.

<iframe
  id="intro-video"
  width="720"
  height="405"
  src="https://www.youtube.com/embed/5As9tZMN3a8?rel=0&disablekb=1"
  title="YouTube video player"
  frameBorder="0"
  allow="accelerometer; fullscreen; clipboard-write; encrypted-media; gyroscope"
  allowFullScreen
></iframe>


## Quickstarts

Upstash Workflow supports Next.js, Cloudflare Workers and [many other frameworks](/workflow/quickstarts/platforms) in TypeScript and Python.

<CardGroup cols={2}>
  <Card
    title="Next.js"
    icon="node-js"
    href="/workflow/quickstarts/vercel-nextjs"
  >
    Build a Next.js application with QStash Workflow
  </Card>
  <Card
    title="Cloudflare Workers"
    icon="cloudflare"
    href="/workflow/quickstarts/cloudflare-workers"
  >
    Use and deploy Upstash Workflow on Cloudflare Workers
  </Card>
  <Card
    title="Next.js & FastAPI"
    icon="python"
    href="/workflow/quickstarts/nextjs-fastapi"
  >
    Use Upstash Workflow for Python with Next.js and FastAPI
  </Card>
</CardGroup>

## Key Features

<CardGroup cols={2}>
  <Card
    title="Failure Resilience"
    icon="shield"
  >
    If your platform experiences a temporary outage, your workflow can pick up right where it left off, ensuring stability even in unstable environments.
  </Card>
  <Card
    title="Long-Running Executions"
    icon="clock"
  >
    Run long-running REST endpoints, such as complex AI models or video processing tools, even on serverless platforms with strict time limits.
  </Card>
  <Card
    title="Events with Wait/Notify Mechanism"
    icon="bell"
    href="/workflow/features/wait-for-event"
  >
    Create workflows that wait for external events before proceeding. Ideal for user confirmations and asynchronous notifications.
  </Card>
  <Card
    title="Scheduled Jobs"
    icon="calendar"
    href="/workflow/howto/schedule"
  >
    Run jobs at regular intervals with support for cron expressions. Perfect for recurring tasks like reminders, reports, or newsletters.
  </Card>
  <Card
    title="Parallel Runs"
    icon="road"
    href="/workflow/features/parallel-steps"
  >
    Start independent tasks in parallel and wait for them to finish simultaneously, reducing latency.
  </Card>
  <Card
    title="Long Delays"
    icon="hourglass"
    href="/workflow/basics/context/sleep"
  >
    Need your code to “sleep” for days, weeks, or even months? Supports long delays beyond serverless time limits.
  </Card>
  <Card
    title="Delivery Guarantees"
    icon="rotate-right"
  >
    Ensures at-least-once delivery. Failed requests are logged in a Dead Letter Queue to prevent data loss.
  </Card>
  <Card
    title="Flow Control"
    icon="gauge"
    href="/workflow/features/flow-control"
  >
    Prevent overwhelming your app or external services by configuring rate per second or parallelism limits. 
  </Card>
  <Card
    title="Observability"
    icon="eye"
    href="/workflow/basics/client/logs"
  >
    Monitor workflow steps with insights. Filter events to track successes, failures, retries, and stalls.
  </Card>
</CardGroup>



## Example Use Cases

Here are some example real world use-cases for Upstash Workflow:

<CardGroup cols={2}>
  <Card title="Agents" icon="robot" href="/workflow/agents/overview">
    Use LLM Agents equipped with custom tools to achieve tasks
  </Card>
  <Card title="AI Data Processing" icon="sparkles" href="/workflow/examples/allInOne">
    Download a large dataset without timeouts, process the data in chunks and generate a report.
  </Card>
  <Card
    title="Waiting For Events"
    icon="traffic-light"
    href="/workflow/examples/waitForEvent"
  >
    Control workflow execution with events, log event data and send emails
  </Card>
  <Card
    title="Authorization Webhook"
    icon="webhook"
    href="/workflow/examples/authWebhook"
  >
    Start a workflow from a webhook. Handle user creation, trial management,
    email reminders and notifications.
  </Card>
  <Card
    title="Customer Onboarding"
    icon="user"
    href="/workflow/examples/customerOnboarding"
  >
    Register a new user, send welcome emails, and periodically check and respond
    to the user's activity state with emails.
  </Card>
  <Card
    title="E-Commerce Order Fulfillment"
    icon="cart-flatbed-boxes"
    href="/workflow/examples/eCommerceOrderFulfillment"
  >
    Receive an order request, verify the stock, process the payment, and handle
    order dispatch and customer notifications.
  </Card>
  <Card
    title="Image Processing"
    icon="image"
    href="/workflow/examples/imageProcessing"
  >
    Manage uploading images to the data store. Apply filters and resize the
    images to different resolutions in parallel.
  </Card>
  <Card
    title="Retry Payments"
    icon="credit-card"
    href="/workflow/examples/paymentRetry"
  >
    Retry payments with a day of delay, send emails, and suspend account if
    payment fails after the retries.
  </Card>
</CardGroup>

## How it works

Upstash Workflow builds on the principle of steps. Instead of defining a single, complex piece of business logic, workflows contain multiple individual steps.

Each of the steps are executed by a separate request to your application, by preserving the output of previous steps.

In case of an error, a failed step is retried individually without needing to re-run any previous steps. Instead of the entire business logic, _each step_ can take up your serverless function execution duration, and many more benefits.

<Frame>
  <img src="/img/qstash-workflow/workflow-concept.png" />
</Frame>

## Support

Need help or have questions? We're here to support you:

- Join our Discord community to ask questions and share feedback
- Open a ticket through the Intercom chatbox in the dashboard for any issue

## SDKs

<Catalog product="workflow" type="sdk" cols={3} />
