docs/release_notes/v1.15.0.md
We're excited to announce the release of Dapr 1.15!
We would like to thank you all for your patience and also give our 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.
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.
Please read the Breaking Changes carefully. If you're experiencing any issues, please report them on Discord. The following core maintainers are available to help you: @joshvanl, @yaron2, @cassie1coyle.
Note: This release contains a few Breaking Changes.
See this section on upgrading Dapr to version 1.15.
Thanks to everyone who made this release possible!
@adrianhr91, @alicejgibbons, @antontroshin, @aqeelat, @arslanmusta, @artur-ciocanu, @arturotrenard, @artursouza, @bhagya05, @cicoyle, @daixiang0, @diegodocs, @divzi-p, @Druid-of-Luhn, @elena-kolevska, @emsearcy, @evhen14, @famarting, @filintod, @GowthamHN, @hhunter-ms, @humandigital-ruud, @ItalyPaleAle, @Jeroen-VdB, @jev-e, @JoshVanL, @jseguillon, @LeonMatthesKDAB, @lor1113, @luigirende, @m3nax, @marcduiker, @mikeee, @MregXN, @msfussell, @olitomlinson, @passuied, @paule96, @paulyuk, @qustavo, @RafaelJCamara, @rochabr, @salaboy, @shubham1172, @Shubhdeep02, @sicoyle, @siri-varma, @SpiffyEight77, @Taction, @ThomasVitale, @tomhreb, @vil02, @WhitWaldo, @yaron2, @ytimocin, @znd4
Special thanks go to Rob J - You know who you are!
These are the v1.15 release highlights:
Dapr workflow makes it easy to write long running stateful applications using durable execution. You can try out Dapr workflow with the Quickstart Samples. The ability to author and run workflows is now stable. This includes the Dapr runtime along with the Dapr .NET, Java, Python, Go and Javascript SDKs.
The workflow runtime engine has undergone a major overwrite to achieve substantial performance and scalability improvements, as well as reliability and stability traits that are required to run mission critical apps at massive scale. Workflows now support dynamically scaling your Workflow applications from 0 to many replicas, whilst maintaining durability of your tasks at runtime.
The Actor runtime engine has had a rewrite in its implementation. Although no changes have been made to the API surface of Actors, this overhaul significantly improves the reliability of handling Actors at scale and in dynamically scaling environments. This work has also been instrumental in making the, now stable, Workflows engine dynamic and durable.
The Actor runtime implementation is now capable of being extended upon to implement new highly requested Actor APIs, or even targeting new Actor targets beyond your app and Workflows in future.
The Scheduler service is the control plane service used to schedule jobs, running in self-hosted mode or on Kubernetes. It is installed when using the Dapr CLI and is the service responsible for managing scheduled jobs. The Scheduler service is now stable
SchedulerReminders feature flag is set to true, and all new actor reminders you create are run using the Scheduler service. When you deploy Dapr v1.15, any existing actor reminders are migrated from the Placement service to the Scheduler service as a one time operation for each actor type. You can prevent this migration by setting the SchedulerReminders flag to false in the application configuration file for the actor type. See Scheduler Actor RemindersA new Conversation API (alpha) reduces the complexity of interacting with large language models (LLM) at scale, providing a consistent API to talk to LLM providers. With the Conversation API, you can:
The Go, .NET, and Rust SDKs have the conversation API implemented as part of this release. As with all APIs, Dapr provides observability by issuing metrics for your LLM interactions.
Learn more about the Conversation API, or dive into a .NET or Go Quickstart.
The .NET SDK added support for the Jobs, Conversation and streaming pub/sub APIs.
The Python SDK added support for streaming pub/sub APIs and the Conversation API.
wait_for_orchestration_start and wait_for_orchestration_completion was changed from 60 seconds to no timeoutThe Java SDK added a Spring Boot integration, including Spring Boot Starters for interacting with the Dapr APIs and testing capabilities using Testcontainers. The Spring Boot integration now supports:
The JavaScript SDK added support for the Pause, Resume and SetStatus methods on the Workflow API. Progress is being made to improve the JavaScript SDK documentation.
The Rust SDK added support for the Conversation API support. Progress is being made in other areas towards a refactor for beta/stable state.
containerImagePullPolicy on KubernetesThe following new components have been added
receiverQueueSize addedClusterRole new rule granting read-only access to namespaces resources allowing ["get", "list", "watch"] operations.securityContext/runAsGroup and securityContext/runAsUser as sidecar injector options. 7958app.kubernetes.io/managed-by 8052dapr_placement_statefulset.yaml manifests 8205dapr_placement_leader_status and dapr_placement_raft_leader_status)8245key_shared functionality. 3601DaprConfigurationStoreProvider not applying case-insensitive configuration updates correctly. 934GetJobAsync deserialization issue 1461waitForSidecar 1145try_add_state 756wait_for_orchestration_start and wait_for_orchestration_completion 784save_state function lacks metadata argument, resulting in states being stored as serialized strings instead of objects. 226To upgrade to this release of Dapr, follow the steps here to ensure a smooth upgrade. You know, the one where you don't get red errors on the terminal.. we all hate that, right?
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
For RC releases like this, download the latest and greatest release from here and put the dapr binary in your PATH.
Once you have installed the CLI, run:
dapr init
Wait for the update to finish, ensure you are using the latest version of Dapr(1.15.0) with:
$ dapr --version
CLI version: 1.15.0
Runtime version: 1.15.0
You can perform zero-downtime upgrades using both Helm 3 and the Dapr CLI.
Download the latest RC release from here and put the dapr binary in your PATH.
To upgrade Dapr, run:
dapr upgrade --runtime-version 1.15.0 -k
To upgrade with high availability mode:
dapr upgrade --runtime-version 1.15.0 --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
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.15.0 --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
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.15.0 --namespace dapr-system --wait
Alternatively, you can use the latest version of CLI:
dapr init --runtime-version=1.15.0 -k
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.15.0 15s 2025-01-31 13:07.39
dapr-sentry dapr-system True Running 1 1.15.0 15s 2025-01-31 13:07.39
dapr-operator dapr-system True Running 1 1.15.0 15s 2025-01-31 13:07.39
dapr-placement dapr-system True Running 1 1.15.0 15s 2025-01-31 13:07.39
dapr-scheduler-server dapr-system True Running 1 1.15.0 15s 2025-01-31 13:07.39
After Dapr 1.15.0 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>
When upgrading from Dapr 1.14 to 1.15, the existing data directory will be removed, resulting in the loss of all jobs and, if the SchedulerReminders preview feature is enabled, actor reminders as well. In Dapr 1.15, the Scheduler is reaching Stable status and this upgrade introduces significant improvements, but also requires a fresh start. To avoid losing this data permanently, you can create a snapshot of the embedded etcd instance (within the Scheduler Service) using the etcdctl tool before upgrading. For example:
kubectl port-forward svc/dapr-scheduler-server 23879:2379
etcdctl --endpoints=http://localhost:23879 snapshot save snapshot.db
Then you can restore the snapshot in a local etcd cluster following the instructions in the etcd docs.
When downgrading Dapr from 1.15 to previous Dapr versions on Kubernetes, the Scheduler service will not be able to successfully roll the dapr-scheduler-server StatefulSet, this is due to the Scheduler service updated the communication between hosts to use mTLS, introduced in PR 8395
The old Scheduler service pods must be manually deleted to fix the issue.
kubectl delete -n dapr-system pods/dapr-scheduler-server-0
kubectl delete -n dapr-system pods/dapr-scheduler-server-1
kubectl delete -n dapr-system pods/dapr-scheduler-server-2
The original implementation of the ConfigurationProvider used in Microsoft.Extensions.Configuration maintains the configuration values in an explicitly case-insensitive manner. In our DaprConfigurationStoreProvider, the returned configuration keys were not compared in a case-insensitive manner which led to a reported inconsistency in this behavior. Keys are now compared in a case-insensitive manner as one would expect when also utilizing the Microsoft.Extensions.Configuration library.
The release of Dapr v1.15 features support for .NET 6, .NET 8 and .NET 9, except Dapr.Workflows which is only compatible with .NET 7, .NET 8 and .NET 9.
Since .NET 6 and .NET 7 are no longer actively supported, per the .NET support policy, the release of Dapr v1.16 will only include support for .NET 8 and .NET 9 across all packages.
As part of workflows going to stable, the ineffective workflow methods provided in the Dapr Client are deprecated, please use the provided dedicated workflow client in each SDK going forwards for orchestrating your workflows.
http-read-buffer-size and http-max-request-size darpd arguments are deprecated and replaced with read-buffer-size and max-body-size. See https://github.com/dapr/docs/pull/4401, https://github.com/dapr/cli/pull/1490 and annotations reference