Skip to main content

Temporal compatibility

This page lists the Temporal features that work on Catalyst, the ones that aren't available yet, and the places where your application can see Catalyst behave differently from a Temporal server. To connect an application, see Temporal workflows on Catalyst.

Temporal workflows on Catalyst are in preview, so these lists can change.

Need a feature that isn't here, or the best performance?

Workflows written with the Dapr Workflow SDKs run natively on Catalyst, with every Catalyst workflow feature. If you need something this page lists as not available, or you want the best performance, migrate your workflows to the Dapr Workflow SDKs.

SDKs and tools​

SDK or toolStatus
Go, Java, Python and TypeScript SDKsTested against Catalyst
.NET, Ruby and PHP SDKsNot tested yet. They use the same API, so they're expected to work
Temporal CLITested against Catalyst. The commands that work are listed below
Temporal Web UINot available. Use the Catalyst console

Supported features​

AreaWhat works
Workflow codeDeterministic replay with the SDK's own checks; timers and timer cancellation; waiting on conditions; SideEffect and MutableSideEffect; local activities; selectors, channels and coroutines; sticky worker caching
VersioningGetVersion, patched and deprecatePatch; replaying histories exported from Catalyst with the SDK's workflow replayer
Starting workflowsWorkflow ID reuse and conflict policies; run and execution timeouts; start delay; workflow retry policies; cron workflows; memo, headers and context propagation; eager start
ActivitiesAny task queue in the namespace; retry policies with backoff and non-retryable errors; start-to-close, schedule-to-close, schedule-to-start and heartbeat timeouts; heartbeats with details; completing an activity later, by task token or by ID; task queue rate limits
CancellationCancelling workflows and activities, with TRY_CANCEL, WAIT_CANCELLATION_COMPLETED and ABANDON
Child workflowsChild workflows with parent close policies; continue-as-new
MessagesSignals and signal-with-start; queries, including the stack trace query; updates with validators, update-with-start and polling an update by its ID
SchedulesCreate, describe, update, pause, unpause, trigger, backfill, list and delete; calendars, intervals, cron strings, time zones and jitter; every overlap policy and catch-up windows
Listing workflowsList and count with AND, OR, NOT and parentheses; custom search attributes, including registering new ones
OperationsPause and unpause; terminate, cancel, signal and delete, one workflow at a time or in a batch by query; listing workers, for SDKs that send worker heartbeats (Go SDK 1.49 or later, and the Java, Python and TypeScript SDKs)
Client featuresInterceptors; data converters; payload codecs, including encryption; the SDK test frameworks
Temporal CLItemporal workflow: start, execute, list, count, describe, show, trace, stack, signal, query, cancel, terminate, pause, unpause and delete; temporal schedule; temporal batch; temporal task-queue describe and config; temporal worker list and describe; temporal operator search-attribute
CatalystWorkflow list and history in the console and with diagrid workflow; Dapr apps in the project can start, signal, suspend, resume and terminate the same workflows; plan limits, archiving and retention

Not available yet​

FeatureWhat to do instead
Reset (rerunning a workflow from an earlier point)Start a new workflow
Worker versioning, deployments and build IDsUse GetVersion or patching. A worker that turns on worker versioning gets PermissionDenied
Nexus
Standalone activities, activity pause and activity options
Signals, cancellations and child workflows across namespacesKeep workflows that talk to each other in one App
Creating or changing namespaces with Temporal's APIsCreate, change and delete Apps in Catalyst. Registering any other namespace returns PermissionDenied
Client mTLS certificatesComing soon. Until then, use the App's API token
Temporal Web UIUse the Catalyst console and the Temporal CLI
Temporal's archival APIsCatalyst's archiving and retention apply instead
Temporal's multi-cluster replicationCatalyst has its own multi-region support: a project in a region group runs in several regions behind one endpoint, with failover between them. See multi-region high availability
Moving running workflows from another Temporal clusterStart new workflows on Catalyst and let running ones finish where they are
Go worker sessionsNot tested yet

Differences from a Temporal server​

Most applications don't notice these. Check them if your workflows depend on the behavior.

AreaWhat you see on Catalyst
History sizeA workflow's history can grow to just under the App's maximum request size, 16 MiB by default, where Temporal allows 50 MB. A workflow that reaches the limit is terminated with "Workflow history size exceeds limit.", and a signal or update that would pass it is refused. The SDK suggests continuing as new at 2 MiB of history or 4,096 events. Workflows with large payloads should continue as new sooner
Payload sizePayloads up to 2 MiB, as on Temporal, at the default maximum request size. A smaller maximum request size lowers it
Earlier runsCatalyst keeps only the latest run of each workflow ID. Reusing the ID of a closed workflow, or continuing as new, replaces the previous run's history, so you can't replay an earlier run. This also applies to each run of a cron workflow
TerminateTerminating a workflow also terminates its child workflows, whatever their parent close policy says, including ABANDON
Child workflow IDsIf a child's workflow ID is already in use, the parent sees the child start and then fail, instead of getting a start failure
Search attributesA workflow can set a search attribute that isn't registered. Temporal fails the workflow task instead
List resultsA new or changed workflow takes about a second to show in list and count results
Busy AppsWhen an App has more work in flight than it can take on, starting new workflows fails with ResourceExhausted, which the SDKs retry with backoff. Running workflows, signals, queries and updates carry on
Waiting activitiesAn App can hold up to 10,000 activity attempts waiting for workers at once. Keep workers running so attempts don't build up
WorkersA namespace lists up to 2,000 workers. A worker is listed once it sends its first worker heartbeat. Older SDKs, such as Go SDK versions before 1.49, don't send them, so their workers poll and run normally but aren't listed
Namespace retentiontemporal operator namespace describe shows a retention of 0s when the App keeps closed workflows until they're purged. A Temporal server always reports at least a day
Batch operationsA batch job acts on at most 10,000 workflows. Run a terminate, cancel or delete job again to act on the rest
Task queue rate limitsEnforced, but a queue that was quiet can briefly hand out a few more tasks than its limit, and a change can take up to 10 seconds to apply everywhere
Priority and fairnessPriority and fairness keys are accepted but have no effect yet. Support is coming soon
SchedulesJittered start times differ from Temporal's, within the same bounds
SummariesTimer summaries, such as the ones the Go SDK adds for workflow.Sleep, are often not recorded