- Write self-describing v2 blob payload tokens by default while retaining v1 and v2 reads from the configured storage endpoint and container. Require complete token formats for direct downloads and account for URL token length in worker action-size estimates. Upgrade readers before deploying v2 writers; changing storage locations requires explicit migration or a store configured for the original location.
- Add explicit primary-account-wide and additional-account read scopes for Azure Blob payloads while retaining configured-container access by default. Additional accounts require identity authentication and exact HTTPS account service endpoints. Preserve named and nested v1/v2 references and ignore legacy v2 URL query and fragment suffixes.
- Enable custom exception providers for Durable Functions Java activities (#294)
- Recover verified ambiguous payload uploads on HTTP 409
BlobAlreadyExistsas well as HTTP 412, while rejecting unrelated conflicts. - Change the default large-payload externalization threshold from 900,000 bytes to 256 KiB, matching .NET.
- Align the large-payload worker estimator threshold with the 256 KiB storage default, resolve externalized entity-operation failure traces, recover verified ambiguous blob uploads, and recognize
$rootpayload tokens. - Preserve transient verification-download failures during ambiguous blob-upload recovery instead of reporting the original permanent precondition failure.
- Propagate transient large-payload upload failures without completing work items; abandon failed activity and orchestration completions for scheduler redelivery instead of terminating the worker polling thread.
- Ensure the export container exists before every upload, allowing export retries to recover containers deleted between uploads.
- Preserve custom and empty property objects in exported failure details, including nested failures, matching .NET's history conversion.
- Capture the default continuous-export completion-time lower bound when creation options are constructed, matching .NET and preserving the window through worker queue delays.
- Recreate a deleted large-payload container and retry the upload once, without allowing stale concurrent failures to invalidate a newly recreated container.
- Preserve backend timestamp precision in orchestration history and client metadata, including export blob names, while retaining existing orchestration replay timestamp behavior.
- Export entity operations and locks using the .NET-compatible
EventSent/EventRaisedmessage representation instead of Java-native entity event objects, preserving missing stack traces in failure details. - Add normalized token audience configuration through Azure Managed client/worker options, convenience overloads, and connection-string
ResourceId. Missing or empty audiences now default tohttps://durabletask.azure.uswhenREGION_NAMEstarts withusgovorusdod(case-insensitively), otherwisehttps://durabletask.io. Explicit audiences override this default; surrounding Unicode whitespace is trimmed, and whitespace-only or otherwise empty normalized values are rejected. - Add optional connection-string
AuthorityHostforwarding for Azure Identity credentials that support it. Audience selection does not change the service endpoint or credential authority; managed identity and developer-tool cloud configuration remain separate. - Add the
exporthistorymodule for durable, checkpointed export of terminal orchestration history to Azure Blob Storage (#293) - Add client APIs to list terminal instance IDs by completion time (
listInstanceIds) and read orchestration history (getOrchestrationHistory) (#292) - Add
createReplaySafeLoggerto suppress orchestration log output during replay (#295) - Add
getParentInstance()API toTaskOrchestrationContextfor discovering parent orchestration info (#284) - Add the
azure-blob-payloadsmodule for externalizing large orchestration payloads to Azure Blob Storage (#280) - Add inner failure details and custom exception properties to
FailureDetails(#263)
- Fix entity locking deserialization and add Jackson support for EntityInstanceId/EntityMetadata (#281)
- Durable Entities (#268)
- Add work item filtering support for
DurableTaskGrpcWorkerto enable worker-side filtering of orchestration and activity work items (#275) - Add support for calls to HTTP endpoints (#271)
- Add getSuspendPostUri and getResumePostUri getters to HttpManagementPayload (#264)
- Adding rewind client API (#253). Note: orchestration processing for rewind is supported with Azure Functions but not with the standalone
GrpcDurableTaskWorker. - Add permissions to build-validation workflow (#265)
- Add distributed tracing (OpenTelemetry) support with W3C Trace Context propagation (#266)
- Add GitHub Copilot agents for automated PR verification, daily code review, and issue triage (#269)
- Add descriptive error when orchestration type is not registered (#261)
- Update all dependencies to latest versions (#260)
- Add DurableTaskGrpcClientFactory (#256)
- Add support for running GitHub workflows manually and update flaky tests (#258)
- Fixing gRPC channel shutdown (#249)
- Add support for default versions in Durable Function sub-orchestrations (#241)
- Add support for tags when creating new orchestrations (#231)
- Add versioning support for client and worker (#224)
- Add tracing support to send information to the WebJobs extension (#211)
- Add distributed tracing support for Azure Functions client scenarios (#211)
- Improve logging for unexpected connection failures in DurableTaskGrpcWorker (#216)
- Add User-Agent Header to gRPC Metadata (#213)
- Update protobuf definitions to include new properties in OrchestratorRequest and update source commit hash (#214)
- DTS Support (#201)
- Add automatic proto file download and commit hash tracking during build (#207)
- Fix infinite loop when use continueasnew after wait external event (#183)
- Fix the issue "Deserialize Exception got swallowed when use anyOf with external event." (#185)
- Fix exception type issue when using
RetriableTaskin fan in/out pattern (#174) - Add implementation to generate name-based deterministic UUID (#176)
- Update dependencies to resolve CVEs (#177)
- Refactor
createTimerto be non-blocking (#161)
- Refactor
RetriableTaskand add newCompoundTask, fixing Fan-out/Fan-in stuck when usingRetriableTask(#157)
- Add
thenAcceptandthenApplytoTaskinterface (#148) - Support Suspend and Resume Client APIs (#151)
- Support restartInstance and pass restartPostUri in HttpManagementPayload (#108)
- Improve
TaskOrchestrationContext#continueAsNewmethod so it doesn't requirereturnstatement right after it anymore (#149)
- Fix exception occurring when invoking the
TaskOrchestrationContext#continueAsNewmethod (#118)
- Fix the potential NPE issue of
DurableTaskClient#terminatemethod (#104) - Add waitForCompletionOrCreateCheckStatusResponse client API (#115)
- Support long timers by breaking up into smaller timers (#114)
- Add CHANGELOG.md file to track changes across versions
- Added createHttpManagementPayload API (#63)
- update DataConverterException with detail error message (#78)
- update OrchestratorBlockedEvent and TaskFailedException to be unchecked exceptions (#88)
- update dependency azure-functions-java-library to 2.2.0 - include azure-functions-java-spi as
compileOnlydependency (#95)
- Use java worker middleware to avoid wrapper method when create orchestrator function (#87)
- Fixed DurableClientContext.createCheckStatusResponse to return 202 (#92)
- context.allOf() now throws CompositeTaskFailedException(RuntimeException) when one or more tasks fail (#54)
- Updated
DurableTaskClient.purgeInstances(...)to take a timeout parameter and throwTimeoutException(#37) - The
waitForInstanceStart(...)andwaitForInstanceCompletion(...)methods of theDurableTaskClientinterface now throw a checkedTimeoutException