docs/release_notes/v1.9.0.md
We're happy to announce the release of Dapr 1.9.0!
We would like to extend our thanks to all the new and existing contributors who helped make this release happen.
Thanks to everyone who made this release possible!
@1046102779, @117503445, @AaronCrawfis, @Abirdcfly, @addjuarez, @ahmedhesham6, @akhilac1, @akkie, @amulyavarote, @anoymouscoder, @artursouza, @bbrandt, @beiwei30, @benc-uk, @berndverst, @bibryam, @blublinsky, @c-thiel, @CeresCa, @cgillum, @christle, @clareliguori, @cmendible, @codefromthecrypt, @CrazyHZM, @daixiang0, @DeepanshuA, @DiegoAJR, @dss539, @dwhiteddsoft, @famarting, @fjvela, @gabrielemilan, @gautric, @greenie-msft, @halspang, @helbing, @hhunter-ms, @hueifeng, @hunter007, @hypernova3, @imneov, @ItalyPaleAle, @jaczhao, @jigargandhi, @jilichao, @jinjianfeng-chn, @jjcollinge, @johnewart, @juazasan, @kumaya, @l0ll098, @Lichmaker, @mandarj123, @marioreggiori, @martin-bucinskas, @mcandeia, @mikeb26, @mindovermiles262, @msfussell, @mthmulders, @mukundansundar, @my-petrichor, @NickLarsenNZ, @nyemade-uversky, @ostreek, @piotrkpc, @pravinpushkar, @qiangmzsx, @qqbuby, @rabollin, @RcXu, @rogerogers, @RyanLettieri, @saber-wang, @sarsharma, @shivamkm07, @shivanisinghnitp, @shubham1172, @sk593, @skyao, @sunzhaochang, @Taction, @tanvigour, @thisiskun, @tmacam, @Trolldemorted, @webup, @Willmish, @winterfoxnet, @x-shadow-man, @XavierGeerinck, @xingrux, @yaron2, @yash-nisar, @zcong1993
Dapr has built-in components that are included as part of the runtime. Dapr now allows you to create private components called "pluggable components". These are components that are self-hosted (exe or container), can be written in any language that supports gRPC, exist outside the Dapr runtime, and are able to "plug" into Dapr. Simply write a component with a gRPC service, drop a binary into the filesystem and you're good to go. Works for both Kubernetes and self-hosted modes.
OpenTelemetry (OTEL) combines projects like OpenCensus, Zipkin, and OpenTracing into standard API and specification sets for tracing and metrics. In this release, Dapr includes support for the OpenTelemetry protocol, which is the preferred way to send traces to observability tools.
Metrics have been added for resiliency. The number of resiliency policies loaded and the number of times a resiliency policy has been executed.
Learn about OpenTelemetry on Dapr sidecars to write traces for your applications to any monitoring service that supports the OTEL protocol.
App health checks are a new feature that allows probing for the health of your application and reacting to status changes. Applications can become unresponsive for a variety of reasons: for example, they could be too busy to accept new work, or could be crashed or in a deadlock state. Sometimes the condition can be transient, for example if the app is just busy or if the application is being restarted for whatever reason and is in its initialization phase.
When app health checks are enabled, the Dapr runtime will periodically poll your application via HTTP or gRPC calls. When it detects a failure in the app's health, Dapr stops accepting new work on behalf of the application.
With resiliency policies you can now set default policies, which can have a broad scope. This is done through reserved keywords that apply to given policy. There are 3 default policies types:
If these policies are defined, they are used for every operation to a service, application, or component. They can also be modified to be more specific through the usage of additional keywords for specific targets.
Learn about default resiliency policies
You can now use any middleware components when making service-to-service invocation calls. For example, for token validation in a zero-trust environment or to apply OAuth policies. Service-to-service invocation middleware components apply to all outgoing calls from Dapr sidecar to the receiving application.
Learn more about app middleware
Drive infrastructure efficiency with namespaced consumer groups for pub/sub. This feature allows you to deploy Dapr applications to different namespaces who all share the same app id, and have all topic subscriptions scoped at the namespace level. This allows development teams to reuse the same pub/sub underlying infrastructure without needing to change their code based on the namespace they are running in.
Learn about namespaced consumer groups.
Now there's a new way to consume the Dapr CLI on Windows: Install the CLI using the MSI installer.
You can now use podman container runtime (as an alternative to the Docker runtime) for your local development.
Learn about a pluggable components.
You can now specify a components.deny property in the Configuration spec to specify a denylist of component types that cannot be initialized. This prevents Dapr from using excluded components during initialization.
Secret stores now support the ability to return multiple keys and secret values with a single call. For example Hashicorp Vault and Local File secret stores. This makes it easier for an application to retrieve multiple keys at once.
In this release, the following component improvements were designated as stable:
There are now 105 built-in components in Dapr. Three new components were added in this release:
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.
Note: This release contains breaking changes in the runtime and SDKs.
See this section on upgrading Dapr to version 1.9.0.
resources-path 4998registered_components in GRPC Metadata API 5051time attribute to CloudEvent automatically if not present 5137application/json as default content type for service invocation 5165dapr list does not include independent daprd instances 220dapr publish using the new --metadata flag. 842dapr uninstall -k and dapr uninstall when dapr not installed 952dapr-internal-grpc-port to dapr run options to set internal gRPC server port 1026dapr init issue in an environment where proxy is needed. 1043dapr init 1045dapr run 1082bindings.azure.servicebusqueues now supports a new field disableEntityManagement. When set to true, the queue will not be created automatically and sending/receiving messages will only require Send/Listen rights. 2018 2022Subscribe and Unsubscribe implementation 2088AllowAnonymous. 908dapr.ext.grpc support for specifying max pubsub message length (>4MB) 451dapr.ext.grpc removed optional app_port parameter from being required in run method 454protobuf version from 3.20.1 to >=4.21.0 457py.typed markers to all packages to allow consumers to check dapr types with e.g. mypy 475To 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 --runtime-version=1.9.0
Wait for the update to finish, ensure you are using the latest version of Dapr(1.9.0) with:
$ dapr --version
CLI version: 1.9.0
Runtime version: 1.9.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.9.0 -k
To upgrade with high availability mode:
dapr upgrade --runtime-version 1.9.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.9.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.9.0 --namespace dapr-system --wait
Alternatively, you can use the latest version of CLI:
dapr init --runtime-version=1.9.0 -k
Verify the control plane pods are running and are healthy:
$ dapr status -k
NAME NAMESPACE HEALTHY STATUS REPLICAS VERSION AGE CREATED
dapr-dashboard dapr-system True Running 1 0.11.0 15s 2022-10-04 13:07.39
dapr-sidecar-injector dapr-system True Running 1 1.9.0 15s 2022-10-04 13:07.39
dapr-sentry dapr-system True Running 1 1.9.0 15s 2022-10-04 13:07.39
dapr-operator dapr-system True Running 1 1.9.0 15s 2022-10-04 13:07.39
dapr-placement dapr-system True Running 1 1.9.0 15s 2022-10-04 13:07.39
After Dapr 1.9.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>
application/json as default content type for service invocation 5165