RSS

Dapr v1.17 is now available

Dapr 1.17 release highlights

We’re excited to announce the release of Dapr 1.17! This release introduces workflow versioning, giving you the tools to safely evolve long-running workflow code without breaking in-flight instances. Combined with new state retention policies, up to 41% higher workflow throughput, and end-to-end tracing, Dapr Workflows are now ready for the most demanding production workloads. This release also stabilizes the Bulk PubSub API, improves Placement service resilience, and adds new CLI commands for managing Workflows and Scheduler.

Thanks to all the new and existing contributors who helped make this release happen.

If you’re new to Dapr, visit the getting started page and familiarize yourself with Dapr.

The docs have been updated with all the new features and changes of this release. To get started with new capabilities introduced in this release, go to the Concepts and the Developing applications.

Go to the upgrading Dapr section for steps to upgrade to version 1.17.

Acknowledgements

Thanks to everyone who made this release possible!

@acroca, @adam6878, @AdarshRavichandran, @addjuarez, @aharonYK, @akotsarelation, @alekhrycaiko, @alicejgibbons, @ankurinfoblox, @antontroshin, @artur-ciocanu, @artursouza, @atrauzzi, @BlackRider97, @by-nelson, @CasperGN, @cicoyle, @citymaus, @ConstantinChirila, @cr3ativ3cod3r, @daanschutte, @DeepanshuA, @Eileen-Yu, @elena-kolevska, @famarting, @FarmerChillax, @filintod, @Flern, @fyzanshaik, @fyzanshaik-atlan, @halspang, @HusseinYasser, @imneov, @ItalyPaleAle, @javier-aliaga, @JeffreyJPZ, @jjcollinge, @jmfloreszazo, @johansja, @joshm998, @JoshVanL, @jslatten, @kapilthareja, @kaspernissen, @kayaj1009, @kgal-akl, @lijujoseph4, @lindner, @lony2003, @lrascao, @majiayu000, @marcduiker, @MasayaAoyama, @mcruzdev, @MichaelHindley, @middt, @mikeee, @mohitpalsingh, @msfussell, @MyMirelHub, @nelson-parente, @ngruson, @nikitasarawgi, @nmalocic, @oglok, @olitomlinson, @passuied, @paulorfjesus, @philliphoff, @pravinpushkar, @RaymundoZa, @robertojrojas, @RyanLettieri, @sadath-12, @salaboy, @seal90, @sicoyle, @siri-varma, @SpiffyEight77, @StarJourneyMingsing, @StoopidBoi-6128, @sunnynagavo, @TheForbiddenAi, @titanventura, @tmacam, @tomflenner, @WhitWaldo, @wlfgang, @yaron2, @ytimocin, @ZeBobo5, @ZeynelKoca, @zglp

Highlights

These are the v1.17 release highlights:

Workflow Versioning

Dapr v1.17 introduces workflow versioning, giving developers the tools to safely evolve workflow code while in-flight workflows continue to run correctly. This is critical because Dapr workflows are durable, may run for extended periods, and application upgrades can introduce changes that break deterministic replay of existing workflow instances. Workflow versioning in Dapr supports two complementary strategies:

  • Named workflow versions: Register multiple versions of a workflow under distinct names, allowing new workflow instances to run on the latest version while existing instances continue replaying against their original version. This provides a clean break between workflow implementations, ideal for major refactors.
  • Patching: For smaller, incremental changes, patching lets you introduce conditional code branches within a workflow using ctx.IsPatched("patch_name"). New executions take the updated code path, while replaying instances follow the original path they were started on. This avoids duplicating entire workflow definitions for minor adjustments.

SDK support is already available in Go, Python, .NET, and Java. Learn more in the workflow versioning documentation.

Workflow State Retention Policy

Dapr Workflows now supports a history retention policy to help control how much workflow state history is kept in your state store.

By default, workflow execution history is retained indefinitely, which is great for auditing and troubleshooting—but can also lead to significant growth in actor state storage for high-volume workloads or workflows that emit lots of state changes.

With v1.17 you can configure how long to retain workflow history after a workflow reaches a terminal state (Completed, Failed, or Terminated). You can set:

  • a default retention duration for any terminal state, and

  • per-terminal-state overrides (for example, keep Failed longer than Completed).

Retention durations use Go duration strings (for example 72h, 30m).

Example configuration:

kind: Configuration
metadata:
  name: appconfig
spec:
  workflow:
    stateRetentionPolicy:
      anyTerminal: "360h"
      completed: "1m"
      failed: "720h"
      terminated: "360h"

Operational tip: a common pattern is to keep Completed workflows for a shorter period, while retaining Failed and Terminated workflows longer to support investigation.

Placement Service Improvements

In v1.17, the Placement service is more robust during deployments, scaling events, and sidecar churn, helping Actors and Workflows converge faster and avoid inconsistent routing decisions.

  • Placement now disseminates placement-table updates using a stricter three-stage sequence (lock → update → unlock) across members in a namespace. This eliminates scenarios where some sidecars could temporarily operate on stale placement data, especially when many instances are joining/leaving at once.
  • More reliable dissemination under churn: Better handling of rapid connect/disconnect events helps prevent stalls and improves convergence during rolling updates and autoscaling.
  • Faster disconnect detection: Placement reacts immediately when a client drops its stream/connection, reducing “ghost member” behavior and shortening recovery time.

CLI Operational Improvements

The Dapr CLI in v1.17 adds smoother operational workflows for Workflows and Scheduler, plus better defaults for local development.

  • Better standalone defaults for remote Actors/Workflows: dapr run now automatically sets DAPR_HOST_IP=127.0.0.1 when it isn’t already set, improving “works out of the box” behavior in self-hosted mode on MacOS.
  • New dapr workflow management commands: Run and manage workflow instances from the CLI, including common lifecycle and troubleshooting operations (for example: list, history, suspend/resume, terminate, rerun, raise-event, purge).
$ dapr workflow <..>
  • New dapr scheduler management commands: Inspect and maintain Scheduler entries, including listing and deleting jobs/reminders, plus export/import to move Scheduler data between environments.
$ dapr scheduler <..>
  • Fewer required flags for workflow operations: Workflow listing now works out-of-the-box without requiring the CLI to connect directly to the state store database; the –connection-string option remains available for older runtime targets.
  • Cleaner operational cleanup: Workflow purge operations now support forcing cleanup when a worker isn’t connected, and are designed to avoid leaving behind related scheduled work.

Performance Improvements

In Dapr v1.17 made greater use of the performance test suite and added visualizations so you can inspect and compare performance results yourself.

Added a performance charts directory under tests/perf/report/charts. It contains chart outputs (ex: duration breakdown, throughput, tail latency, resource usage, etc) generated from our performance runs, organized by API and Dapr version. From there, you can open the API and Dapr version that matches your usage and compare runs or versions relevant to your APIs and workloads. Each API folder for the v1.17 folder contains a highlights section where common scenario performance results are highlighted at the top of each README.

The performance suite runs in CI regularly. Visual charts are created from code, based on runs in Azure. This helps visually highlight regressions or improvements and provides a single place to see current and historical performance.

Keep in mind that numbers can vary slightly between runs and environments. The figures below are from a comparison of two individual performance runs (one v1.16, one v1.17) - not averaged across multiple runs, so they may not be representative of every environment. Below are highlights from our generated v1.16 and v1.17 runs:

API v1.16 v1.17 % Improvement
Actor (activation avg latency) 2.70 ms 2.35 ms 13%
Actor (timer with state avg latency) 8.20 ms 6.84 ms 17%
Workflows (throughput: iterations/sec) 19.80 28.01 41.5%
Workflows (req duration avg in ms) 1467 1042 29%
Workflows (req duration p90 in ms) 1642 1166 29%

Test references for the numbers above:

  • Actors: TestActorActivate
  • Workflows: TestWorkflowWithConstantVUs with the same scenario (30 VUs, 300s)

Actors show lower latency for activation and timer with state. Because workflows use actors under the hood, you see higher workflow throughput and lower request latency (both average and p90) for the constant VU scenario.

Links:

Bulk Pubsub API is now Stable

After several releases of availability via the Alpha APIs, first introduced in Dapr v1.10.0, Bulk Publish and Bulk Subscribe are now stable in Dapr v1.17.

The stabilization brings production-ready, consistent APIs for Bulk PubSub, allowing you to publish and receive multiple messages in a single operation via the stable APIs:

  • Publish endpoint: for HTTP, /v1.0/publish/bulk/<pubsub-name>/<topic> was promoted from /v1.0-alpha1/publish/bulk/<pubsub-name>/<topic>. For gRPC, BulkPublishEvent was promoted from BulkPublishEventAlpha1.
  • Application callback: OnBulkTopicEvent was promoted from OnBulkTopicEventAlpha1.

Application code should be updated to implement the stable endpoints/callbacks when using Bulk PubSub. All SDKs are updated accordingly to support and use the stable APIs on both Publish and Subscribe sides. Please check SDK release notes and examples for details.

Backwards compatibility: If your application still implements the previous OnBulkTopicEventAlpha1 callback, Dapr logs a deprecation warning and automatically falls back to the Alpha APIs (for now), giving you time to migrate to using the stable API. Alpha paths remain functional, but are deprecated in favor of the stable APIs.

This stabilization follows the Dapr API Lifecycle expectations, backed by extensive testing ensuring production readiness.

Links:

Workflow Tracing

This release improves end-to-end tracing for Dapr Workflows by ensuring that incoming trace context is preserved when scheduling and executing workflows.

Previously, traces could become disconnected when workflows were scheduled or orchestrations executed, making distributed traces harder to follow. Now workflow spans are correctly linked to the caller’s trace.

Conversation API Improvements

The Conversation API received several enhancements in this release to improve reliability, flexibility, and observability.

  • Tool/function calling is now fully supported and tested across all components, with additional improvements specific to Ollama.
  • Prompt caching has been introduced to improve efficiency—complementing the existing response cache with configurable TTL support.
  • Timeouts can now be configured via resiliency policies, and new response formatting options make it easier for downstream consumers to process outputs.
  • Responses also include extended metadata, such as usage metrics and model details, enabling improved observability and cost tracking for AI-powered applications.

Component Improvements

Various component improvements were included in this release, focused on enhanced authentication, resiliency, and feature completeness:

  • Apache Pulsar PubSub: new subscription options via metadata, message compression support, and OAuth2 client secret support from file path
  • AWS Components + MySQL updated to latest client SDK version with compatibility guaranteed
  • SQLServer state component v2 with support for workflows
  • SFTP Binding improved concurrency handling for mutex-protected operations
  • Redis Streams PubSub honors configured resiliency policies
  • Kafka Components:
    • Introduced additional JWT authentication support for Kafka OIDC scenarios
    • JWT audience is now sent as a single string for improved IdP compatibility
    • Optional kid header support in JWT
  • Azure Service Bus now respects FIFO ordering guarantees
  • PostgreSQL v2 corrected migration schema issues
  • All State Components support new KeysLike API, enabling key listing using SQL LIKE-style wildcard patterns
  • Conversation Components new features:
    • Added tool call support (Ollama)
    • Introduced prompt caching
    • Response formatting support
    • Resiliency policy timeout respected
    • Extended response metadata to include usage metrics + model used

New Components in this release

SDK Improvements

Go SDK

  • Adds support for FailurePolicy on Actor Reminders to allow for controlling the retry behaviour of failed Actor Reminder invocations.
  • Exposed the V1 BulkPublish APIs, used as the default over Beta.
  • Removes the Workflow wrapper client, in favour of the upstream durabletask-go client.

.NET SDK

The v1.17 release of the Dapr .NET SDK features a complete overhaul of the Dapr.Workflow package removing all dependencies on DurableTask and updating to support all Dapr runtime functionality: task execution identifiers, multi-app workflows (workflows & activities), and both patch- and name-based workflow versioning.

This release includes official support for .NET 10 in addition to the already supported .NET 8 and 9.

The Conversation API has been updated to reflect the latest runtime capabilities for detailing token usage and specifying both response schema structure and prompt cache durations.

The PubSub API has been updated to reflect the graduation of the bulk PubSub runtime support to stable.

Finally, this release ships Testcontainers support via the Dapr.Testcontainers package facilitating integration tests across the SDK and better enabling developers to improve their own testing infrastructure with Dapr.

Python SDK

The v1.17 release of the Dapr Python SDK introduces two new AI agent framework extensions: dapr-ext-langgraph and dapr-ext-strands, enabling durable and observable AI agent workflows backed by Dapr’s building blocks.

Workflow versioning is now supported with both patch-based and name-based versioning, allowing safe evolution of long-running workflow definitions without breaking in-flight instances.

@sicoyle is now a maintainer and @CasperGN an approver of the python SDK.

Java SDK

Workflow versioning is now supported with both patch-based and name-based versioning, allowing safe evolution of long-running workflow definitions without breaking in-flight instances.

Spring Boot 4 support has been introduced, as Spring Boot 3 reaches end of support on June 30, 2026.

The Conversation API has been updated to reflect the latest runtime capabilities for detailing token usage and specifying both response schema structure and prompt cache durations.

PubSub API has been updated to reflect the graduation of the bulk PubSub runtime support to stable.

Actor Reminders API has been updated to support failure policies

List of issues addressed in this release

Dapr Runtime

  • ADDED [EPIC] Make Bulk Pubsub APIs stable 5567
  • ADDED Jobs API Metrics 8160, 8196, 9256
  • ADDED Add GetActorReminder to gRPC API 8632
  • ADDED Service Invocation Streaming request 8685
  • ADDED Add Features to Conversation API for Dapr Agents v1.0 8784
  • FIXED Fix OpenTelemetry resource detection to respect OTEL_* environment variables 9006
  • FIXED Scheduler doesn’t explicitly handle scenarios when workflow state is deleted 9018
  • ADDED Added support for binary cloudevent 9050
  • ADDED Add config to disable init endpoints 9077
  • FIXED Actor init timing to wait for app channel readiness 9079
  • ADDED Add CloudEvent Subject field 9101
  • CHORE Sync release-1.16 to master 9112, 9114
  • FIXED Fix usage of disseminate lock and fix missing MemberRemove command 9115
  • FIXED Fix placement dissemination during high churn events 9117
  • FIXED Delete state store reminders 9121
  • FIXED Fix placement client double lock 9122
  • FIXED Blocked Placement dissemination with high Scheduler dataset 9126
  • ADDED Add ConnectRPC generated files 9130
  • FIXED Fix panic during actor deactivation 9133
  • FIXED Injector no longer requires scheduler StatefulSet when scheduler is disabled; Helm chart now completely removes scheduler resources instead of scaling to zero 9138, 9175
  • ADDED Propagate APP_API_TOKEN in gRPC metadata for subscriptions, bindings, and jobs 9142
  • ADDED Add e2e SSE support 9149
  • FIXED Fix Scheduler connection during non-graceful network interruptions 9154
  • FIXED Prevent infinite loop when workflow state is corrupted or destroyed 9157
  • CHORE Update Go 1.24.6 to 1.24.9 9159
  • ADDED [PROPOSAL] Workflow Versioning 9162
  • ADDED [PROPOSAL] Workflow tooling support 9164, 9190
  • ADDED [PROPOSAL] PlacementV2 9165
  • ADDED Support topologySpreadConstraints/affinity in chart values 9168, 9169
  • ADDED Implements durabletask ListInstanceIDs & GetInstanceHistory 9170
  • FIXED Workflow: Delete associated reminders on workflow purge 9171
  • FIXED Ensure the TLS hostname of dapr-scheduler matches the trust domain 9173
  • ADDED Workflow: Purge Force 9176
  • FIXED Workflow: schedule reminders to first history 9179
  • ADDED Workflow: State Retention Policy 9185
  • CHORE Revert Windows runners actions setup-go 9186
  • ADDED Workflow: Schedule Tracing 9193
  • PERF Use bookworm base image 9194
  • CHORE Change kit go.mod to origin HEAD 9195
  • SECURITY Bump x/(net/sync/crypto) and pin dvsekhvalnov/jose2go 9197
  • ADDED Actor: Reminder Get & Overwrite 9199
  • REFACTOR Proto: refactor runtime dapr.proto into multiple files 9200
  • ADDED Actor Reminder/Jobs: Delete Prefix & List 9201
  • ADDED Actors: Reminder Failure Policy 9202
  • ADDED Workflow: Adds Rerun parent instance ID 9203
  • ADDED Scheduler: Namespaces loop 9205
  • CHORE Updates dapr/components-contrib to latest HEAD 9208
  • ADDED Workflow versioning (patching) 9163, 9217
  • FIXED Workflow: GetInstanceHistory panic when instance not found 9218
  • FIXED Workflow logging loop when no pending task completed 9219
  • PERF Scheduler: worker pool 9221, 9238
  • SECURITY Fix Go vulnerability 9224, 9250
  • TEST Perf tests align k8s versions 9225
  • FIXED Deleted Jobs in all prefix matching deleted Namespaces 9231
  • ADDED Enable sqlserver v2 with support for workflows 9233
  • ADDED Workflow: Rerun from Child Workflow Creation 9240
  • ADDED Conversation API: add resp format, model, prompt cache, usage metrics 9241, 9265, 9316
  • CHORE Update github.com/dapr/go-etcd-cron to head 9242
  • ADDED Remove SchedulerReminders from preview features 9244
  • CHORE Add dependency scanning with dependabot 9248
  • DOCS Fix typos in documentation 9255
  • CHORE make gen-proto 9259
  • FIXED Dapr sidecar injector: only record logs/metrics if patch was applied 9267, 9268
  • SECURITY Update UID check to check only root 9272
  • CHORE Sync release 1.16 branch to master 9273
  • ADDED BulkPublishEvent Stable 9274, 9306
  • ADDED Add support for custom Dapr service annotations 9276, 9307
  • FIXED Fix HTTPEndpoint ClientTLS parsing of only root CA 9280, 9287
  • ADDED Full workflow versioning 9282, 9291, 9292
  • CHORE Bump components-contrib to latest main 9284
  • TEST Integration: fix rerun child async test 9285, 9286
  • FIXED Fix Proto files java outer classname 9288
  • ADDED Add tracing to publish rawpayload events 9289, 9294, 9310
  • TEST Reduce test flakes 9293
  • FIXED Workflow: Clear cache when stalled 9297, 9298
  • SECURITY Placement authorize Dapr actor types 9299, 9300
  • CHORE ci: add repository dispatch to version skew 9303
  • TEST Integration: Fix tests 9305
  • CHORE durabletask-go: update go.mod ref to main HEAD 9312
  • FIXED Drop Unimplemented errors on DeleteByActorID 9313, 9314
  • ADDED OnBulkTopicEventAlpha1 stable 9317, 9319
  • TEST Fix IT & e2e test flakes 9318, 9320
  • ADDED Use Kube cluster domain for scheduler DNS 9322, 9323
  • CHORE Disable kitex 9324, 9325
  • TEST Test Fixes: ensure wf workers connected 9326
  • FIXED Placement client: force close send on shutdown 9328, 9329
  • TEST Subscriptions: Resiliency Integration Tests 9330, 9331
  • FIXED Rabbitmq panic fix 9334, 9337
  • CHORE Cherry pick disable init endpoints and daprd job metrics to 1.17 9335
  • FIXED Fix HTTP path matching cardinality leak and support invocation auto-registration 9336, 9380
  • ADDED Add workflow failure stack trace to API response 9339, 9340
  • FIXED fix(ollama): bump contrib version for ollama tool call fix 9345
  • FIXED Correct streaming subscription integration test failure 9346
  • TEST Fix unit test failures 9350, 9351
  • FIXED Allow internal workflow events 9353, 9354
  • FIXED Fix: Copy header from response in SSE 9355, 9376
  • SECURITY Bump golang.org/x/crypto 9362
  • SECURITY Bump github.com/docker/docker 9363
  • CHORE Update Go to 1.24.12 9367, 9368, 9369
  • SECURITY High security fixes 9375
  • REFACTOR Placement: Client Refactor 9377, 9382
  • FIXED Improve output message of ErrActorNoAddress 9378
  • TEST Integration: Eventually a raise on restart 9383, 9384
  • FIXED Consistent behavior between 200: DROP and 404 9401, 9421
  • FIXED Sentry log line fix 9403, 9404
  • REFACTOR Placement server refactor 9405, 9439
  • PERF Perf fine tuning 9407
  • ADDED Support legacy scheduler env var 9408, 9409
  • CHORE Bump go.opentelemetry.io/otel/sdk to v1.40.0 9410, 9430
  • SECURITY Bump github.com/coreos/go-oidc/v3 9414
  • CHORE Bump actions/setup-go from 4 to 6 9416
  • TEST Integration: Wait for placement leadership 9424, 9425
  • CHORE Upgrade Go to 1.25.7 9426, 9427
  • CHORE Upgrade Go to 1.24.13 9428, 9429
  • TEST Unit Test: fix flakes 9431, 9432
  • CHORE Bump go.etcd.io/etcd/client/pkg/v3 9433
  • FIXED Update contrib to include redis streams honoring resiliency 9437, 9438
  • ADDED Replaced poll-based workflow completion check 9440
  • FIXED Operator: check closed on client connect 9441, 9442
  • CHORE Dependabot: only PR security updates 9443
  • TEST Quieter amenderror test 9444, 9445
  • FIXED Scheduler: print incorrect DNS names 9446, 9447
  • REFACTOR Proto: remove placement import ref from runtime 9448, 9449
  • CHORE Remove extraneous tab 9455
  • ADDED Feature Gate: WorkflowsRemoteActivityReminder 9457
  • CHORE github.com/diagridio/go-etcd-cron v1.12.1 9458, 9459
  • TEST Version Skew: include scheduler int test path 9460
  • FIXED Fix hot reload subscription race 9461, 9462
  • ADDED V2.0.0 9463
  • FIXED Metrics Path Matching Fix 9464
  • CHORE Add backport action 9465
  • TEST Fix pubsub e2e flake 9466
  • TEST Fix actor wf perf flakes 9467
  • CHORE Updates contrib to main HEAD 9468, 9469
  • FIXED Configuration CRD OtelSpec missing Headers, Timeout, and secret reference support 9524

Dapr CLI

  • ADDED Multi app run does not understand dependencies and ordering - leads to timing issues 1435
  • CHORE Update k8s and kind versions 1546
  • CHORE Merge 1.16 master 1557
  • ADDED Adds dapr scheduler command 1559
  • ADDED Workflow command support 1560
  • FIXED Fix workflow resource path lookup 1564
  • FIXED Workflow: no longer require DB connection string 1570
  • CHORE ci: add create release workflow 1573
  • ADDED Scheduler: add short help output 1576, 1577
  • ADDED Adds support for workflow versioning new types 1578, 1579
  • CHORE Bump go to 1.24.13 and containerd & helm 1583, 1586
  • SECURITY Bump helm and opentelemetry to fix HIGH vulnerabilities 1587, 1588
  • FIXED Env: Set DAPR_HOST_IP=127.0.0.1 1589, 1590

Components

  • ADDED All components have been upgraded to use AWS SDK GO V2, the V1 SDK has been pruned from the dependencies. 4231
  • ADDED New component - state.ravendb 3318
  • ADDED Upgrade AWS Secrets Manager to AWS SDK v2 3901
  • ADDED Upgrade paramstore to AWS SDK v2 3908
  • ADDED Upgrade Bedrock to AWS SDK v2 3909
  • ADDED Upgrade SES binding to AWS SDK v2 3911
  • ADDED New v2 sqlserver state component with workflow support 4027
  • FIXED Fix regression in pubsub.kafka Avro message publication 4028
  • CHORE Cleanup daprbot 4033
  • FIXED Close file after write 4034
  • FIXED Fix Kafka AWS auth config bug 4043
  • FIXED Fix aws secrets manager yaml 4044
  • FIXED Reuse kafka clients 4049
  • ADDED Support client JWT auth method for kafka OIDC 4057
  • CHORE ci: add ravendb secrets to gh workflow 4058
  • FIXED SFTP binding overloads SFTP server with connections; handle reconnections 4061, 4075
  • TEST Enable dynamodb state store tests 4069
  • FIXED Fix goavro bug due to codec state mutation 4070, 4071
  • ADDED Support base64 decode of data transmitted for SFTP binding 4072
  • FIXED Fix SFTP connection poisoning with enterprise/Axway MFT servers 4078
  • FIXED Fix token renewal for pulsar oauth2 4079
  • ADDED State: KeysLike 4087
  • ADDED ASB Concurrent Session FIFO 4092
  • ADDED Add kid header to kafka JWT auth 4099
  • FIXED postgres v2: fix migration column name 4100
  • FIXED Send audience as a single string in the JWT 4111
  • SECURITY Fix critical NATS vulnerability 4114
  • FIXED Fix pulsar secret filepath 4116
  • CHORE Add dependency scanning with dependabot for git actions and gomod 4118
  • ADDED Add response format and timeout to conversation API 4129
  • CHORE dependabot modtidy and workflow improvements 4131, 4146, 4152, 4155, 4182
  • ADDED Enhance Pulsar pub/sub to enable message compression 4148
  • ADDED feat(conversation): add prompt cache and usage metrics 4154
  • CHORE Bump cloudwego/kitex to v0.15.4 4158
  • ADDED Propagate message metadata in pubsub 4160, 4171
  • FIXED Fix Pulsar pubsub initialization when using oauth2ClientSecretPath 4161
  • ADDED Upgrade SNS binding to AWS SDK v2 4169
  • ADDED Upgrade SQS binding to AWS SDK v2 4170
  • ADDED Upgrade DynamoDB binding to AWS SDK v2 4172
  • ADDED Upgrade Kinesis binding to AWS SDK v2 4173
  • TEST Fix MySQL certification test failure check 4180, 4185
  • ADDED Update postgres configuration AWS authentication to use new credential provider 4181
  • SECURITY Fix high vulnerability on cloudflare worker 4184
  • FIXED Fix race condition in RabbitMQ 4190
  • FIXED Remove in-memory pubsub retries 4191
  • FIXED fix(ollama): use openai client to support tool calling 4192
  • CHORE Bump cloudflare worker dependencies (wrangler, jose, esbuild) 4199, 4200, 4201
  • FIXED Fix MySQL regression 4202
  • TEST Add MySQL certification tests 4204
  • CHORE Update main and test dependencies 4205
  • FIXED Make Redis Streams PubSub honor resiliency policy 4208
  • ADDED feat: strict SFTP operations 4211
  • CHORE SFTP binding: check for error message 4214
  • CHORE Ensure all components properly registered 4215
  • FIXED fix(nr): update AWS auth support to match docs 4216
  • FIXED fix(pulsar): update subscription options to use metadata values 4218

.NET SDK

General

  • ADDED Support for .NET 10 1676
  • ADDED NuGet Trusted Publishing - OIDC Support 1651
  • UPDATED Fix typos and improve code consistency 1659
  • UPDATED Facilitating changes to GitHub branch merge rules in build steps 1668
  • UPDATED Expand output binding invocation docs 1652
  • UPDATED Fix markdown link syntax in dotnet-messaging docs 1654
  • UPDATED Migrate docs from SDK repository to dapr/docs 1655

Examples

  • ADDED Added workflow versioning (patch + named) example 1706
  • ADDED Example demonstrating how to unit test workflows/activities 1708
  • UPDATED Update to Aspire 13.x 1661
  • REMOVED Obsolete service invocation example 1698

Actors

  • FIXED UseJsonSerialization setting properly applied at startup 1648

Conversation

  • UPDATED Support latest API updates 1696

PubSub

  • UPDATED Marking PubSub bulk publish as API stable 1681
  • FIXED Handling graceful cancellation in CloudEventsMiddleware to prevent 499 errors 1713

Service Invocation

  • UPDATED Marking service invocation methods as [Obsolete] per best practices 1698

Workflows

  • ADDED Multi-app workflow support in .NET 1675
  • ADDED Add logging message indicating established gRPC workflow stream 1688
  • ADDED Add Workflow patch-based versioning support 1687
  • ADDED Add Workflow name-based versioning support 1700
  • ADDED Added built-in workflow versioning strategies 1707, 1710
  • ADDED Added support for automatic workflow registration across referenced projects for named versioning 1711
  • UPDATED Clean implementation of Dapr.Workflow 1662
  • UPDATED Make resilient to load order differences (dapr/app) + workflow reconnection 1680
  • FIXED Fix workflow execution is uncertain 1667
  • FIXED Fix workflow gRPC streaming is blocked 1671
  • FIXED Fix workflow execution order 1684
  • FIXED Fix activity track failure 1692
  • FIXED Ensure TFMs populate in Dapr.Workflow.Versioning package 1709

Testing

  • ADDED Add Testcontainer support for .NET 1664
  • ADDED Adding integration testing for Dapr.Workflow 1669
  • ADDED Adding integration testing for Dapr.Jobs 1674
  • ADDED Adding integration testing for Dapr.DistributedLock 1682
  • ADDED Adding mechanism to enable container log capture to file 1701
  • UPDATED Improved GitHub build action to better perform integration and unit testing 1693
  • UPDATED Added automated last X RC runtime version testing to matrix 1701
  • UPDATED Improved Dapr readiness checks in Dapr.Testcontainers 1705
  • FIXED Fix timezone-dependent ArgumentOutOfRangeException in WorkflowState test 1690

A big thank you to the following .NET SDK contributors that made this release possible: @whitwaldo, @zglp, @sunnynagavo, @atrauzzi, @marcduiker, @daanschutte, @ali-Hamza817, @ZeBobo5

Java SDK

  • FIXED Inconsistent behaviour between docs and implementation in Actor Timers and Reminders 681
  • ADDED FEATURE PREVIEW: Add Actor State TTL support 849
  • ADDED Add Cryptography API to Java SDK 1073, 1599
  • ADDED Add OpenFeign Client for Dapr service invocation 1181, 1294
  • ADDED Spring Boot Cloud Config integration 1225, 1230
  • CHORE Automate syncing dapr/durabletask-java 1397
  • ADDED Add taskName and input to retry context 1423
  • ADDED Trace propagation for durabletask-java and durabletask-go 1485
  • ADDED Add Dapr Testcontainers subscription scopes 1491
  • ADDED Support native compilation for the Java SDK 1509
  • CHORE Remove shaded deps 1543
  • DOCS Add architecture diagram to README 1549
  • REFACTOR Align Java API with workflow naming conventions 1554, 1560
  • CHORE Update Spring Boot Matrix for 3.5.x and 3.4.x 1558
  • ADDED Check Dapr runtime containers before starting another one 1562
  • CHORE Centralize Maven dependency version management 1564
  • ADDED Setting default props for DaprClient 1567
  • FIXED Pass metadata in saveState 1569, 1570
  • FIXED Fix dependencies for multi app build 1572
  • CHORE Replace openjdk:17-jdk-slim with eclipse-temurin:17-jdk-jammy 1574
  • ADDED Bring Durable Task Java as a Maven module inside the Java SDK 1575
  • ADDED Register activity with @Component value when provided 1577
  • ADDED Add withAppProtocol and gRPC support to Dapr testcontainer 1578, 1586
  • DOCS Add statestore example with Outbox pattern 1582
  • ADDED Add support for HttpPipeline 1585
  • CHORE Bump actions/upload-artifact 1587, 1606
  • CHORE Use dependencies BOM and remove duplicates 1588
  • DOCS Examples and docs for App API Token authentication (gRPC and HTTP) 1589
  • ADDED Add micrometer traces to DaprWorkflowClient 1592
  • CHORE Remove SDK docs (migrated to main Docs repo) 1593
  • CHORE Bump actions/checkout from 5 to 6 1595
  • CHORE Maven version, properties and plugin improvements 1596
  • ADDED Add Flux-based subscribeToEvents method 1598
  • ADDED Initial workflow dashboard config for testcontainers 1601
  • ADDED Jobs API promotion to DaprClient 1602
  • TEST Fix flaky DaprPubSubOutboxIT test 1605
  • CHORE Bump codecov/codecov-action 1607
  • ADDED Add support for dead-letter topics in streaming subscriptions 1608, 1615
  • ADDED Create Dapr WaitStrategy to improve integration test ergonomics 1609
  • ADDED Add DaprSpringBootTest and DaprSidecarContainer annotations for integration tests 1610
  • CHORE Upgrade Protobuf to 4.x.x 1611
  • ADDED Add raw event subscription alongside CloudEvent subscription 1617
  • CHORE Bring DurableTask Client to Maven standards 1618
  • ADDED feat: Propagate tracing info 1619
  • CHORE Update dapr version to 1.17.0 1620, 1651
  • ADDED Add PATCH to HttpMethods enum and HttpExtension for service invocation 1623, 1644
  • ADDED feat: Add workflow versioning 1624
  • CHORE Bump org.assertj:assertj-core 1627
  • ADDED Add Named Timers to the Java SDK 1628
  • ADDED Allow registering custom TaskOrchestrationFactory and TaskActivityFactory 1629, 1630
  • ADDED Introduce closeNow() for immediate shutdown 1632
  • CHORE Remove unnecessary variable; replace log-based waits with DaprWait strategy 1634, 1635
  • CHORE Cherry-pick master to 1.17 branch 1637
  • ADDED Add new fields to conversation API 1639, 1640
  • ADDED Make bulk pubsub stable 1641
  • ADDED feat: Add failure policy to actor reminders 1643
  • ADDED Support Jackson3 with Spring Boot 4.x using DefaultObjectSerializer 1647

Python SDK

  • CHORE Bump actions/setup-python from 5 to 6 830
  • FIXED Wait for Dapr health check asynchronously to avoid blocking gRPC stream close 839
  • CHORE Extend key generation time 845
  • CHORE Merge release-1.16 branch changes to main 851
  • CHORE Lint update 854
  • CHORE Remove python 3.9 support 860
  • ADDED Async workflow client implementation 861
  • ADDED Add Dapr checkpointer for LangGraph 862, 868
  • CHORE Fix CI - CLI version step 863
  • CHORE Bump mypy-protobuf 864, 888
  • CHORE Remove SDK docs (migrated to main docs repo) 866
  • CHORE Bump actions/checkout from 5 to 6 867
  • CHORE Fix ext package typing 869
  • ADDED Add Strands Agent Session Manager 872
  • CHORE Update grpcio and regenerate gRPC files 877
  • TEST Fix metadata testcase for release 1.17 878
  • DOCS Fix subscribe docstring typo 883
  • CHORE Trigger CI for new ext tags 886
  • FIXED Fix workflow client missing close function 889
  • ADDED Workflow versioning 893
  • FIXED Fix signal when dt reader stream is ready within workflow client start 901
  • ADDED feat(convo): add new fields to conversation API 902
  • CHORE Bump fossas/fossa-action 904, 912
  • CHORE Bump durabletask-dapr 905
  • CHORE fix(build): capture latest + rereleases for dapr runtime + CLI 906, 913
  • CHORE Update durabletask 908, 909
  • CHORE Update mypy_protobuf 910, 914
  • CHORE Use backport GitHub action 911

Documentation

  • DOCS State Store: Alicloud table store missing 4795
  • DOCS bindings.dubbo component missing in docs 4798
  • DOCS OCI Object Storage missing 4799
  • DOCS Twilio bindings need addition/edit 4800
  • DOCS Alibaba Cloud Log Storage binding missing from table 4804
  • DOCS RocketMQ binding missing 4806
  • DOCS Secret store tencentcloud.ssm missing 4808
  • DOCS Huaweicloud missing from Secret Store table 4809
  • DOCS Add documentation for Pulsar PubSub message compression 4990
  • DOCS Document Dapr.Workflow .NET SDK changes for 1.17 release 4991
  • DOCS Added docs for RavenDB as State Store 4738
  • DOCS doc: add openbao.md 4917
  • DOCS [1.16] Update perf test docs to point to the new source of truth 4961
  • DOCS docs: update bedrock metadata 4980
  • DOCS .NET SDK - Updated guidance around specifying both HTTP and gRPC sidecar ports for SDK 4993
  • DOCS Added docs for workflow versioning 5003
  • DOCS Add support for custom annotations in dapr sidecar service 5005
  • DOCS [1.17] Workflow/CLI/Reminder Documentation 5017
  • DOCS Added low-level workflow protocol documentation 5024
  • DOCS docs(convo): add new fields and make corrections on caching 5027
  • DOCS Add new documentation to enable Pulsar PubSub message compression 5028
  • DOCS feat: Introduce sqlserver state store v2 5032
  • DOCS style: update agents api 5034
  • DOCS Feature workflows remote activity reminder 5036
  • DOCS Feature workflows remote activity reminder 1.17 5039
  • DOCS [1.17] Docs redis honor resiliency 5044
  • DOCS docs: configuration otel headers secretref 5047
  • DOCS Added ravendb to the docs 5050

Quickstarts

  • CHORE JS SDK version 3.6.1 1265
  • FIXED Remove HTTPS redirection (known issue with Dapr SDK) from quickstart test 1268
  • CHORE Rename assembly outputs to remove “App”/“Service” suffixes 1271
  • CHORE Update Conversation example to use Conversation Alpha 2 1272
  • CHORE Bump Runtime, CLI and SDK to RCs 1278

Upgrading to Dapr 1.17

To upgrade to this release of Dapr, follow the steps below to ensure a smooth upgrade.

Local Machine / Self-hosted

Uninstall Dapr using the CLI you currently have installed. Note that this will remove the default $HOME/.dapr directory, binaries and all containers dapr_redis, dapr_placement and dapr_zipkin. Linux users need to run sudo if docker command needs sudo:

dapr uninstall --all

Download the latest release from here and put the dapr binary in your PATH.

Once you have installed the CLI, run:

dapr init --runtime-version=1.17

Wait for the update to finish, ensure you are using the latest version of Dapr(1.17) with:

$ dapr --version

CLI version: 1.17
Runtime version: 1.17

Kubernetes

Upgrading from previous version

You can perform zero-downtime upgrades using both Helm 3 and the Dapr CLI.

Upgrade using the CLI

Download the latest release from here and put the dapr binary in your PATH.

To upgrade Dapr, run:

dapr upgrade --runtime-version 1.17 -k

To upgrade with high availability mode:

dapr upgrade --runtime-version 1.17 --enable-ha=true -k

Wait until the operation is finished and check your status with dapr status -k.

All done!

Note: Make sure your deployments are restarted to pick the latest version of the Dapr sidecar

Upgrade using Helm

To upgrade Dapr using Helm, run:

helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update

helm upgrade dapr dapr/dapr --version 1.17 --namespace=dapr-system --wait

Wait until the operation is finished and check your status with dapr status -k.

All done!

Note: Make sure your deployments are restarted to pick the latest version of the Dapr sidecar

Starting a fresh install on a cluster

Please see how to deploy Dapr on a Kubernetes cluster for a complete guide to installing Dapr on Kubernetes

You can use Helm 3 to install Dapr:

helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update

kubectl create namespace dapr-system

helm install dapr dapr/dapr --version 1.17 --namespace dapr-system --wait

Alternatively, you can use the latest version of CLI:

dapr init --runtime-version=1.17 -k
Post Installation

Verify the control plane pods are running and are healthy:

$ dapr status -k
  NAME                   NAMESPACE    HEALTHY  STATUS   REPLICAS  VERSION  AGE  CREATED
  dapr-sidecar-injector  dapr-system  True     Running  1         1.17   15s  2026-02-12 13:07.39
  dapr-sentry            dapr-system  True     Running  1         1.17   15s  2026-02-12 13:07.39
  dapr-operator          dapr-system  True     Running  1         1.17   15s  2026-02-12 13:07.39
  dapr-placement         dapr-system  True     Running  1         1.17   15s  2026-02-12 13:07.39

After Dapr 1.17 has been installed, perform a rolling restart for your deployments to pick up the new version of the sidecar. This can be done with:

kubectl rollout restart deploy/<deployment-name>

Breaking Changes

None.

Deprecation Notices

Alpha Bulk PubSub APIs are being deprecated in favor of the stable Bulk PubSub APIs. The alpha Bulk Publish and Bulk Subscribe APIs (/v1.0-alpha1/publish/bulk/<pubsub-name>/<topic> and BulkPublishEventAlpha1) are now deprecated. The app callback OnBulkTopicEventAlpha1 is also now deprecated.

The alpha APIs remain functional in Dapr v1.17 - Dapr will log a deprecation warning and automatically fallback to them if your application still uses them. This gives users time to migrate to the stable APIs (/v1.0/publish/bulk/<pubsub-name>/<topic> and BulkPublishEvent) and OnBulkTopicEvent for the app callback.

See the section above titled Bulk PubSub API is now Stable for full details on the promoted APIs, migration steps, backwards compatibility behavior, and documentation links.