npm dist-tag ls @duraton/sdk for what latest and next currently point at.
2026-09-24 - step.ai.infer, runs.explain and retired values are removed
step.ai.infer and runs.explain had no backend on the hosted service, so both only ever failed.
The Kafka and workflow-delete leftovers go with them.
Removed from @duraton/sdk and @duraton/sdk/client:
ctx.step.ai.inferand the typesInferOptions,InferResult,InferMessageclient.runs.explainand the typeExplainOptions"infer"fromAI_STEP_KINDS"kafka"fromEVENT_SOURCES"kafka_source_create","kafka_source_update","kafka_source_delete","kafka_delivery_replay"and"workflow_delete"fromCONTROL_ACTION_KINDS"per-partition","per-queue","per-stream"fromINGRESS_ORDERINGS"positional","per-message"fromINGRESS_ACK_MODELS"broker"fromINGRESS_REDELIVERY_OWNERS
POST /runs/{id}/explainand theexplain_runMCP toolDELETE /workflows/{app}/{name}POST /data/purgeandDELETE /data
- the engine refuses to start without
DURATON_OPERATOR_KEY, and no longer readsDURATON_API_KEYas a built-in key: issue project keys instead - the engine refuses to start without
DURATON_DATABASE_URL; SQLite is gone, Postgres only
- make the model call from your runner with
step.ai.generate, which is durable and metered the same way - read
event.sourceandcontrolAction.actionasStoredEventSourceandStoredControlActionKind: rows recorded before the removal still carry the old values - a
CONTROL_ACTION_KINDSfilter no longer accepts a removed kind
2026-09-23 - Kafka sources are removed
Duraton no longer consumes Kafka. The engine’s Kafka connector is gone, and so is its client surface in@duraton/sdk/client:
client.kafka- the wholeKafkaApinamespace- the types
KafkaApi,KafkaSource,KafkaSourceInput,KafkaSourceMapping,KafkaSourceDelivery,KafkaSourceDeliveryAttempt,KafkaSourceDeliveryDetail,KafkaSourceDeliveriesPage,KafkaDeliveryReplayResult,KafkaRecordHeader,KafkaDeliveryOutcome,KafkaDeliveryLogMode,ListKafkaSourceDeliveriesOptions - the constants
KAFKA_DELIVERY_OUTCOMESandKAFKA_DELIVERY_LOG_MODES
client.events.send() from your own consumer process. Any import of the names above fails to compile.
What still works: events and audit rows recorded before the removal still read back with
"kafka" and the kafka_* values. Those values are no longer part of the typed sets (see
2026-09-24); read them as StoredEventSource and StoredControlActionKind.
2026-09-08 - defineWorkflow is now workflow
The noun did not change, only the prefix.
defineWorkflow still works as a deprecated alias of workflow, so existing code keeps compiling.
Your editor marks it as deprecated; switch when convenient.
Watch for one thing. If you assigned the result to a variable named workflow, that variable
now shadows the import inside its own initializer:
WorkflowDefinition and AnyWorkflowDefinition keep their names, the
workflow field on events and runs is unchanged, and nothing on the wire or in the API moved. A
runner built against the new SDK talks to an unchanged engine.
Why: every other authoring function in the SDK is already a bare verb or noun - connect,
agent, tool - and defineWorkflow was the only define* symbol left.
Across 20 durable-execution and agent frameworks surveyed, none prefixes its authoring function
with define; Trigger.dev made the same move from defineJob to task().