A Render Workflow is a service whose job is to run tasks - plain functions you write in Python or TypeScript. You trigger a task and Render spins up a fresh, isolated instance for that single run, then tears it down when it finishes.
The headline benefit: you write a normal function, and Render gives it queuing, retries, parallelism, and observability for free.
Before you start
You’ll need three things on your machine:
- A free Render account. The Starter plan is enough for this tutorial (no card required).
- Python 3.11+ or Node.js 20+, depending on which language you pick in this step.
- A working terminal. The CLI tools install with
pipornpmonce you’ve picked a language. The Render CLI is optional but recommended.
Skim the Workflows docs and Workflows limits if you want to read ahead. Otherwise the tutorial introduces concepts as it goes.
The shape of it
flowchart LR
caller["Your code (web service, cron, anywhere)"]
api["Render API"]
workflow["Workflow service (your tasks)"]
run1["Run #1 (own instance)"]
run2["Run #2 (own instance)"]
run3["Run #3 (own instance)"]
caller -->|"runTask('hello', ['world'])"| api
api --> workflow
workflow --> run1
workflow --> run2
workflow --> run3
Every triggered task is its own short-lived instance - usually starting in under a second. A single task can also fan out into many parallel sub-runs, which is what makes Workflows great for ETL and AI agent work.
When to reach for a Workflow
| You need to… | Best fit |
|---|---|
| Process one item per HTTP request synchronously | Web service |
| Continuously pull from a queue you manage | Background worker |
| Run a job at 03:00 every day | Cron job |
| Run an arbitrary function on demand, in parallel, with retries | Workflow |
| Fan a single trigger out into 1,000 parallel jobs | Workflow |
The line between a background worker and a Workflow is the easiest one to blur, so here’s the rule of thumb: if you already have a queue you’re happy with, keep using a worker. If you’d rather just call a function from anywhere and have the platform handle queuing, scheduling instances, and retries - that’s a Workflow.
What you’ll build
By the end of this tutorial you’ll have a deployed Workflow with a calculateSquare(n) task you can call from any other service - web service, cron job, your laptop - like a normal function. The plumbing is identical whether you write it in Python or TypeScript; pick a language now and the rest of the tutorial will follow you across steps.
Great. Use the render_sdk package and write workflows/main.py.
Great. Use @renderinc/sdk and write workflows/index.ts.
What you learned
- A Workflow service exposes functions (tasks) that you trigger by name
- Each triggered run gets its own short-lived instance, with retries and parallelism handled by Render
- Workflows fit on-demand, fan-out, and AI-agent style work better than web services, workers, or cron jobs alone