Intro to Render Workflows
Orchestrate chains of distributed, long-running computation.
Render Workflows is an end-to-end orchestration and execution engine for distributed, long-running computation.
Define units of work as standard functions with Render's lightweight SDK, then run them across hundreds of concurrent instances.
Use workflows to orchestrate AI agents, background jobs, data pipelines, and more:
Render bills you for compute usage (prorated by the second) and for temporary retention of your run arguments and return values. Queuing and provisioning are provided at no additional cost.
At a glance
- You define tasks and flows as standard TypeScript or Python functions and register them with Render.
- Trigger runs from anywhere: web apps, agents, CI/CD, etc.
- A task can chain runs of other tasks (or itself!) as illustrated above.
- Render automatically spins up a separate instance for each run and deprovisions instances as runs complete.
Core features
What's in a workflow?
A workflow service contains a collection of function definitions that you register with Render. You designate each function as one of two types: a task or a flow.
| Type | Description |
|---|---|
|
Task |
A single unit of work that executes in its own instance. Tasks can chain runs of additional tasks to distribute work across multiple instances. |
|
Flow |
A sequence of steps that run in order, all on a single instance. Flows persist the return value of each step. If an infrastructure issue interrupts a flow run, Render automatically replays it from the beginning and reuses the return values from completed steps. |
After you register your tasks and flows, you can trigger individual runs of your functions using the Render SDK or API:
Each run executes in its own instance, which Render spins up on demand within seconds. If you trigger more simultaneous runs than your workflow's compute limits allow, Render queues up the excess until resources become available.
A run executes whatever logic you define in its function. For tasks, this can include chaining runs of other tasks in the same workflow:
In this example, we trigger a run of the run_agent task. This task chains runs of other tasks (gather_context, execute_skills, and so on). Each run in the chain also executes in its own instance.
The run_agent task depends on the results of its various chained runs, so it awaits their completion before chaining additional runs and eventually returning its own result.
Defining tasks and flows
Every workflow service pulls its task and flow definitions from a Git provider repo. In this repo, you define tasks and flows as TypeScript or Python functions using the Render SDK.
Here's a single-file workflow definition that defines two basic tasks:
You can define tasks and flows across any number of files and directories, importing frameworks and libraries as needed.
As part of registering your tasks and flows, Render builds your project into a custom image and caches it. Render pushes this image to each run's instance as part of spin-up.
Triggering runs
You trigger runs of your tasks and flows from anywhere using the Render SDK or API:
In any environment where the Render SDK isn't available, you can trigger runs directly via the Render API. Here's an example curl command for triggering a task run:
All versions of the Render SDK call the Render API under the hood to trigger runs.
For all the details, see Triggering Workflow Runs.
Workflows versus job queues
Historically, job queue architectures (as managed by Celery, BullMQ, etc.) have required setting up multiple pieces of infrastructure and configuring them to work together:

Render Workflows unifies this architecture into a single, fully managed system:
| Role | Traditional job queue | Render Workflows |
|---|---|---|
|
Task submission |
You deploy a custom web service that listens for incoming requests and enqueues workloads. |
Trigger runs from anywhere using the Render SDK or API. |
|
Queue management |
You manage your own queue state in a Render Key Value instance or similar datastore. |
Render manages your task queue at no additional cost. |
|
Worker provisioning |
You maintain a fleet of always-running background workers that pull and execute tasks. |
Render provisions workers on demand and scales to zero when all runs finish. |
For new projects that require long-running background execution, Render Workflows helps you move faster with fewer moving parts.
FAQ
How do I get started with Render Workflows?
Get started with Your First Workflow.
Which languages can I use to define tasks and flows?
You define tasks and flows with the Render SDK, which is currently available for TypeScript and Python.
SDKs for additional languages are planned for future releases.
Can I trigger runs without using the Render SDK?
Yes! You can trigger runs via the Render SDK, API, CLI, or Dashboard.
For details, see Triggering Workflow Runs.
Can runs interact with my other Render services?
Yes! Runs can initiate connections to your other Render services and datastores in the same region via private networking.
Can runs receive incoming network connections?
No. Similar to Render's background worker service type, runs do not expose any ports. They initiate any network connections they need.
Can I use Render Workflows with Blueprints?
Yes! You can create and manage workflows with Blueprints, Render's infrastructure-as-code model.
You include workflow definitions alongside other services in your Blueprint file's services list. For example:
See the Blueprint YAML Reference for workflow-specific field support.
Workflows do not yet support preview environments or Blueprint replication.
- Render automatically skips creating preview copies of workflows when preview environments are enabled for a Blueprint.
- Render rejects a Blueprint that defines a workflow with the same name as an existing Blueprint-managed workflow.
How are workflows billed?
Workflows are billed for the compute usage of each run, based on compute plan and duration. They are also billed for temporary retention of each run's arguments and return value.
For details, see Limits and Pricing for Render Workflows.
What are the known limitations of Render Workflows?
We'll address these limitations in future releases:
- Workflows currently only support TypeScript and Python for defining tasks and flows.
- SDKs for other languages are planned for future releases.
- Workflows do not yet natively support scheduling runs.
- To schedule runs, you can create a cron job that triggers runs on the desired schedule.
- Flows are not yet able to chain runs of other tasks or flows.
- Workflows do not yet support preview environments or Blueprint replication. For details, see Can I use Render Workflows with Blueprints?.
- If a workflow belongs to a network-isolated environment, its runs cannot communicate with other services in that environment over its private network.
- Workflows do not yet support HIPAA-compliant hosts.
- To prevent accidental PHI exposure, it is not currently possible to create new workflows in a HIPAA-enabled workspace.
- If you enable HIPAA compliance for a workspace that already has workflows, do not process PHI in workflow runs.
- Flows are not yet available in the Oregon region for workspaces created before January 23, 2022.