The local CLI workflow is fine for development, but the whole point is to call your tasks from anywhere. You’ll deploy what we’ve got and then trigger greet from a tiny client script.
1. Push the project
If you haven’t already, commit the workflows/ folder and push to GitHub, GitLab, or Bitbucket:
$git init && git add . && git commit -m 'init: render workflow'[main (root-commit) 3a2b1c0] init: render workflow$git remote add origin git@github.com:you/my-workflow.git$git push -u origin main
2. Create the Workflow service
In the Render Dashboard:
- New → Workflow From the top-right menu.
- Connect your repo Pick the repo you just pushed.
- Set Root Directory to `workflows/` This is the key field - Render needs to know where your task code lives.
- Set Build and Start commands Use the values from the table below for your language.
- Click Deploy Workflow First deploy takes a couple of minutes.
| Field | Python | TypeScript |
|---|---|---|
| Language | Python 3 | Node |
| Build Command | pip install -r requirements.txt | npm install && npm run build |
| Start Command | python main.py | node dist/index.js (or tsx index.ts if you skipped a build step) |
When the deploy turns green, head to the service’s Tasks tab - you should see greet, calculateSquare, sumSquares, and flipCoin. Each task has its own page with the task identifier at the top, in the form {workflow-slug}/{task-name}. You’ll need it in a second.
3. Trigger the deployed task from code
Now the payoff: any other service (or your laptop) can call this task with the SDK client. You’ll need a Render API key, which you can generate at Account Settings → API Keys.
import osfrom render_sdk import Render
render = Render() # reads RENDER_API_KEY from the environment
result = render.workflows.run_task( "my-workflow/greet", # replace with your task identifier ["world"],)print(result.status, result.results)export RENDER_API_KEY=rnd_xxx...python trigger.py# succeeded ["Hello, world!"]import { Render } from "@renderinc/sdk";
const render = new Render(); // reads RENDER_API_KEY from the environment
const started = await render.workflows.startTask( "my-workflow/greet", // replace with your task identifier ["world"],);const finished = await started.get();console.log(finished.status, finished.results);export RENDER_API_KEY=rnd_xxx...npx tsx trigger.ts# succeeded [ 'Hello, world!' ]4. Want it on a schedule?
Workflows don’t have built-in scheduling - that’s deliberate. Pair them with a Render cron job that runs a one-line script using the same run_task / runTask call above, and you get scheduled fan-out for free.
flowchart LR
cron["Render cron job (03:00 daily)"]
client["render.workflows.run_task('my-workflow/etl', [...])"]
workflow["Workflow service"]
runs["N parallel runs"]
cron --> client --> workflow --> runs
5. Watch your runs
Back in the Render Dashboard, the service’s Runs tab shows every triggered run - its status, duration, retries, and live logs. Click any task to see runs for just that task.
What you learned
- Deployed the workflow service from the Render Dashboard (no Blueprint yet)
- Triggered the deployed task from a client script using `RENDER_API_KEY` and the SDK
- Know where to add scheduling (Render cron + SDK client) and where to watch runs
Where to go next
You now have a real Workflow you can call from anywhere. Some natural next stops:
- The Render Workflows docs for the full SDK reference
- Workflow limits and pricing - concurrent run caps, instance types, request size
- The task patterns in the starter file (
sumSquares,flipCoin,fanOut) - they’re working examples of fan-out and retries you can copy from