render_workflows

This is an unofficial, independent, community-built package. Not affiliated with, endorsed by, or supported by Render.

Render's own SDKs and documentation are at render.com/docs.

Render *

A Dart client for Render Workflows — start, watch and cancel task runs.

Mirrors Render's official TypeScript SDK, so its documentation carries over:

final render = Render();         // token from the RENDER_API_KEY env var

final run = await render.workflows.runTask(
  'my-workflow/sumSquares',
  [[2, 3, 4]],
);
print(run.result);                             // 29

render.close();

Writing the tasks in Dart too

This package triggers tasks. It says nothing about what language they are written in — by default that is TypeScript or Python, the two languages Render's own SDK supports.

The tasks themselves can also be Dart, with render-dart (npm). It compiles task bodies to JavaScript and registers them through Render's SDK, and compiles anything needing dart:io, dart:ffi or isolates to a native executable called from those tasks:

npx render-dart init my-workflow

So the whole round trip can be Dart: this package starts a run, render-dart runs the task body, and render_api manages the service. They are independent — use this one against Python tasks quite happily.

render-dart (npm) Writing tasks in Dart
render_workflows (this) Running them
render_api Managing the services

What it adds over the raw endpoints

runTask / waitFor Polls to completion. Works on Flutter Web, where SSE does not
listTaskRunsStream Walks cursors for you
4 MB input cap Checked locally, so an oversized payload fails by name
TaskRunStatus Treats terminality as data — the API defines both completed and succeeded
Errors Typed, and carrying a hint. Render answers 500 for an unknown task run id, not 404

Method names

startTask, runTask, getTaskRun, cancelTaskRun, listTaskRuns, taskRunEvents — exactly as the TypeScript SDK names them. waitFor and listTaskRunsStream are additions where Dart offers something TypeScript has no equivalent for.

Watching runs

runTask and waitFor poll, and work everywhere.

taskRunEvents streams server-sent events instead, but will not work on Flutter Web with the default HTTP clientpackage:http's BrowserClient buffers whole responses. Inject a streaming client (package:fetch_client) there, or poll.

Testing

dart test                      # offline, no credentials needed
dart run example/smoke.dart    # live, needs RENDER_API_KEY

Why this is separate from render_api

Render splits the same way: @renderinc/sdk runs tasks, @api/render-api covers the REST surface. Workflow services — creating them, deploying versions, listing task definitions — are plain REST and live in package:render_api.

Note

* The Render name and logo are trademarks of Render Services, Inc. The mark itself is unmodified, shown on white with the clear space Render's brand kit specifies, referentially — to identify the service these packages work with, not to suggest any endorsement.

Libraries

render_workflows
A Dart client for Render Workflows.