SDK parity Check before you commit to a language: which Duraton features TypeScript, Python, and Go each support today, side by side.
Duraton ships three runner SDKs that speak the same connect protocol. The TypeScript SDK is the
reference and carries every feature first; Python and Go follow. This page is the single place to
check what each language supports today, so you do not have to read a per-feature callout on every
page.
Yes means a first-class, typed API. Not yet means the feature is not exposed in that SDK -
the engine supports it, and the SDK will. Two escape hatches let Python reach a few knobs before
they are typed; see the notes under each table.
Feature TypeScript Python Go defineWorkflow (name, triggers, handler)Yes Yes Yes retry - maxAttemptsYes Yes Yes retry - backoff / initialDelayMs / maxDelayMsYes Not yet Not yet concurrencyYes Yes Yes throttle / rateLimit / debounce / batch / priority / singleton / idempotencyYes Not yet 1 Yes cap (per-run AI ceiling)Yes Yes Yes budget / tokenThrottleYes Not yet 1 Yes Step manifest (steps) Yes Not yet 1 Not yet Tool manifest (tools) Yes Not yet Not yet onFailure handlerYes Yes Yes
1 Python's define_workflow takes an extra dict that is forwarded verbatim to the
wire registration, so these knobs can be set today as raw camelCase keys (e.g.
extra={"budget": {...}}). They simply have no typed field yet.
Feature TypeScript Python Go Event trigger Yes Yes Yes Event trigger if (CEL) Yes Yes 2 Yes Cron trigger Yes Yes 2 Yes Cron runOnStart Yes Yes 2 Not yet
2 Python has no typed trigger type; triggers are plain dicts forwarded to the wire, so
if, cron, and runOnStart are set as dict keys.
Feature TypeScript Python Go step.runYes Yes Yes step.run with recorded inputYes Yes Yes Per-step retry override Yes Not yet Not yet step.skipYes Not yet Not yet step.sleep / step.sleepUntilYes Yes Yes step.waitForEventYes Yes Yes step.waitForEvent if (CEL)Yes Not yet Not yet step.runWorkflow (child run)Yes Yes Yes step.runWorkflow tagsYes Not yet Not yet step.emitYes Yes Yes step.emit dedupeIdYes Not yet Not yet step.approvalYes Yes Yes step.approval allow / onTimeoutYes Not yet Not yet step.approval if / minRisk (the rule that decides whether a gate is raised)Yes Not yet Not yet step.webhook.sendYes Yes Yes step.ai.* (generate, wrap, embed, loop, infer)Yes Yes Yes step.ai.loop tool requiresApproval gateYes Yes Yes step.ai.loop tool approval rule, and the loop-level approval defaultYes Not yet Not yet agent() output (a schema-constrained, parsed answer)Yes Not yet Not yet step.ai.loop guardrails and the schema guardrailYes Not yet Not yet step.ai.loop context (history pruning, token-budget and summarization trimmers)Yes Not yet Not yet GenerateRequest tools and transcriptYes Not yet Not yet
Feature TypeScript Python Go ctx.scoreYes Yes Yes ctx.assert (usedStep / sequence / equals)Yes Yes Not yet
Feature TypeScript Python Go connect (outbound WebSocket)Yes Yes Yes serve (HTTP framework adapters)Yes Not yet Not yet Middleware (onInvoke / onResult) Yes Not yet Not yet
Feature TypeScript Python Go runs read (list, get, wait, steps, logs)Yes Yes Yes runs.list tag filterYes Not yet Yes runs.watch (per-run stream)Yes Yes Yes runs.watchAllYes Yes Yes runs.watchFilteredYes Not yet Not yet runs control (cancel, pause, resume, replay, retryFromStep, fork)Yes Yes Yes runs.bulkReplayYes Yes Yes runs.bulkCancelYes Not yet Not yet runs.score / runs.scoresYes Yes Yes runs.explainYes Yes Not yet events.sendYes Yes Yes events.send tagsYes Yes Yes events.send dedupeIdYes Yes Yes events read (list, get, stream)Yes Yes Yes workflows.trigger (manual run, any workflow)Yes Yes Yes approvals resourceYes Yes Yes datasets resourceYes Yes Not yet webhooks resource (sources / endpoints / deliveries)Yes Yes Not yet webhooks.sourceDeliveries (inbound delivery log + replay)Yes Not yet Not yet Webhook signing scheme selection Yes Not yet Not yet