Project: Dapr (App Definition and Development / Application Definition & Image Build)
File: v1.10.0.md

We're happy to announce the release of Dapr 1.10! 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, @addjuarez, @akhilac1, @alberthuang24, @alexlai97, @amulyavarote, @ana-cozma, @arjundevarajan, @artursouza, @ASHIQUEMD, @berndverst, @bookinstock, @Bryce-huang, @cgillum, @chalin, @ckchessmaster, @cmendible, @codefromthecrypt, @daixiang0, @dbrattli, @DeepanshuA, @drewby, @famarting, @federicocodo, @filintod, @findmyway, @gdlcf88, @greenie-msft, @halspang, @harrykimpel, @havardzzl, @hauju, @hhunter-ms, @hueifeng, @imneov, @Isekai-Seikatsu, @ItalyPaleAle, @Jarema, @jinjianfeng-chn, @jjcollinge, @joaocc, @johnewart, @JoshVanL, @KaiWalter, @kubemq, @LENSHOOD, @LionTao, @longshine, @LordMsz, @lucasalexsorensen, @MACEL94, @marcduiker, @mcandeia, @mecoding1, @mikeb26, @mindovermiles262, @mountain65, @msfussell, @mstrYoda, @mukundansundar, @NickLarsenNZ, @nyemade-uversky, @paulyuk, @pepegar, @philliphoff, @pravinpushkar, @rabollin, @renatolfc, @robertojrojas, @RyanLettieri, @ryou90, @safanaj, @salaboy, @salmankhan-prs, @sarsharma, @shivamkm07, @shubham1172, @sicoyle, @siredmar, @SpikeWong, @sujitdmello, @sunzhaochang, @Syuparn, @Taction, @tanvigour, @thielepaul, @ThumNet, @TKTheTechie, @tmacam, @VerstraeteBert, @vikram-thiru, @vishalsignity, @VuiDJi, @waitingkuo, @wxbty, @x-shadow-man, @XavierGeerinck, @yaoyaoio, @yaron2, @yash-nisar, @zcong1993, @Zizico2 Dapr now has workflows included as a new alpha API. Dapr Workflows enables you to build long running, persistent processes or data flows that span multiple apps. Dapr Workflows can be combined with other Dapr API building blocks. For example, a workflow can call another service with service invocation, trigger a binding or retrieve secrets, enabling you to orchestrate and build complex application scenarios. You can read more about or dive in and try out a to see this in action. With the , you can publish and subscribe to multiple messages in a single request. When writing applications that need to send or receive a large number of messages, using bulk operations allows achieving high throughput by reducing the overall number of requests between the Dapr sidecar, the application, and the underlying pub/sub broker. Dapr has built-in components that are included as part of the runtime. Dapr now allows you to create private components called . These are components that are self-hosted (exe or container), can be written in any language and are able to "plug" into Dapr. In this release preview SDKs for , , and enable you to create pluggable components easily with the language of your choice. You can read more on . <br> With , you can start multiple applications in self-hosted mode using a single `dapr run -f` command using a template. The template file describes how to start multiple applications as if you had run many separate CLI run commands, significantly improving the experience of testings several apps at the same time. Try it out with , , , and In this release, , first introduced in the v1.7.0 release, are now stable. Try them out in these In this release, the following components were designated as : State store: . See State store: . See State store: . See Secret store: . See Binding: . See PubSub: . See PubSub: . See The following components are now "deprecated" and marked for deletion in a future Dapr version: Binding: Twitter PubSub: Hazelcast There are now 111 built-in components in Dapr. Eight new components were added in this release: State store: State store: Binding: Binding: PubSub: PubSub: PubSub: HTTP Middlewares: Router Alias components, subscriptions and resiliency policies. Before these were all included into `--components-path` which was unclear. `--components-path` remains for backward compatibility (slated for removal in a future release), however`--resources-path` is the preferred

See You can can now apply to deal with high cardinality metrics that might cause large memory usage and egress costs. to allow users to get richer information about the service invocation API. The metrics cover both HTTP and gRPC, and can be combined with autoscalers like KEDA or Knative to make scaling decisions based on Dapr traffic patterns. Note: This release contains and deprecations in the runtime and SDKs. If you're new to Dapr, visit the 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 and the . See section on upgrading Dapr to version 1.10. ADDED Support for bulk publish and subscribe to improve throughput ADDED Support for rewriting high-cardinality path labels for metrics, avoiding overload in Prometheus ADDED Partial support for streaming in HTTP service invocation UPDATED Basic WebAssembly middleware with more flexible version ADDEDD `ALLOWEDSERVICEACCOUNTS` option to the helm chart ADDEDD caller's and callee's app-ids in headers for service invocation ADDED Dapr Workflow Building Block and Engine FIXED gRPC proxy not operational during the graceful shutdown period ADDED Shared gRPC connections for bindings Pluggable Components CHANGED Enabled `runAsNonRoot` and `readOnlyRootFilesystem` for Dapr sidecar ADDED Allow creating Pods with `automountServiceAccountToken: false` - use bound tokens for identity in Dapr FIXED Bulk API for Secret Store throwing error FIXED Trace issue while using Resiliency FIXED `/healthz/outbound` bypasses API access rules just like `/healthz` ADDED Support loading multiple declarative subscriptions in a single YAML file UPDATED Make Resiliency policies stable ADDED CLI option `--no-health-check-api-logging` to omit health checks from API logging ADDED More flags in charts, mostly which one related to sentry trust bundle ADDED Namespaced topics to PubSub namespaced consumer groups UPDATED Dapr shutdown to initiate after expiry of grace period ADDED Service Invocation Metrics ADDED List of PubSub Subscriptions to metadata endpoint's response ADDED Support to override cloud event attributes via metadata FIXED Resiliency not parsing `maxRetries: 0` UPDATED Disallow dots in app-id in self-hosted mode FIXED Panic in placement membership heartbeat loop in sidecar ADDED Fetch subscription list over gRPC FIXED `daprsidecarinjector.replicaCount` is not considered with Helm deployment ALLOW Component metadata value to use `{appID}` FIXED Bug stopping daprruntimeresiliency_loaded being reported FIXED Reduce number of warnings when a component references a secret store that has not yet been loaded FIXED gRPC proxy now handles streaming and resiliency correctly ADDED Allow Dapr to watch resources in a configured namespace with role bindings REMOVED "Server" header from HTTP responses CHANGED Helm chart to use a separate service account for each Dapr control plane service FIXED Resiliency to not retry on 201-299 status codes UPDATED Renamed MQTT components (binding, PubSub) to "MQTT3" (maintain the old names as aliases) FIXED Multiple fixes to gRPC proxy including panics, data loss, resiliency not working DEPRECATED gRPC service invocation API ADDED Add `obfuscateURLs` option to HTTP apiLogging configuration ADDED Dapr Config CRD supports to `.metrics` in addition to

FIXED Goroutine leak when operations with Resiliency time out FIXED Service invocation panics if the nameresolver isn't initialized FIXED Race conditions when Resiliency is enabled New components: State store: SQLite 3 State store: Cloudflare Workers KV Binding: Cloudflare Queues Binding: KubeMQ PubSub: Azure Service Bus Queues PubSub: KubeMQ PubSub: Solace PubSub+ (AMQP) HTTP Middlewares: Router Alias The following components are now "Stable": State store: AWS DynamoDB State store: MySQL State store: CockroachDB Secret store: Hashicorp Vault Binding: Cron PubSub: Apache Pulsar PubSub: AWS SQS/SNS The following components are now "Deprecated" and marked for deletion in a future Dapr version: Binding: Twitter PubSub: Hazelcast Breaking changes: The Cron binding is now an input-only binding The Azure Event Grid binding now requires additional configuration to receive messages; see ADDED FIXED ADDED FIXED ADDED ADDED ADDED FIXED FIXED ADDED CHANGED FIXED ADDED ADDED FIXED FIXED ADDED ADDED FIXED ADDED ADDED CHANGED ADDED FIXED ADDED ADDED ADDED ADDED FIXED ADDED FIXED FIXED ADDED ADDED ADDED ADDED ADDED FIXED ADDED ADDED FIXED ADDED CHANGED CHANGED FIXED ADDED FIXED ADDED ADDED Add fish shell completion UPDATED Rename the run `--components-path` flag to a name for suitable for loading many resource types ADDED Support the dapr runtime initialization in user provided directory FIXED: Use fully qualified names for container images ADDED Automate Publishing CLI to winget FIXED Update certificate fails with dapr installed with custom helm FIXED Failed to upgrade Dapr: release name is invalid: ADDED Missing flag --dapr-listen-addresses for dapr run CLI command ADDED `--image-variant` flag to mtls renew-certificate command FIXED self-hosted e2e tests on macOS-12 FIXED GitHub API rate limiting FIXED Dapr run generates invalid app IDs ADDED Create a template for configuring multiple applications to be run with `dapr run` command ADDED Implement the new precedence rules for `resources_dir` for `dapr run -f` ADDED Add capability to run multiple apps from a given run configuration file ADDED `dapr list --output json` includes related Dapr Compose configuration file metadata FIXED Remove full stop from version string to match other subcommand help output ADDED support to `dapr stop` to handle applications spawned by `dapr run -f` FIXED `dapr list --output json` returns inconsistent JSON FIXED Error messaging in dashboard command. ADDED`dapr run` track and `dapr list` display the PID of run commands ADDED Add support for Bulk Subscribe ADDED Add support for Workflow Management ADDED Additional API coverage/support for Workflows ADDED Add support for Bulk Publish ADDED Add support for ISO 8601 intervals ADDED Add support for publishing raw messages(non cloud events) ADDED Add support for Workflow Authoring ADDED Add support for Bulk State APIs Note: The Dapr Go SDK now requires Go 1.18 or higher. ADDED Add `wait()` method to block until the Dapr sidecar is up FIXED Return err as nil when replying with DROP status ADDED Report SDK version in user-agent FIXED Differentiating between actor state key not found vs. unexpected error FIXED Removed some dependencies and fixed other bugs ADDED Bulk publish and bulk subscribe implementation DEPRECATED HTTP client in SDK FIXED Add ElementType.TYPE to ActorType to enable it in Kotlin ADDED Report SDK version in user-agent UPDATED Update docs for configuration API UPDATED Update springboot to latest minor.patch version. ADDED Support for Python

Relaxes `grpcio` and `protobuf` requirements for wider compatibility ADDED Additional Pubsub CloudEvent properties are now sent as CloudEvent extensions (gRPC) FIXED PubSub topic used is not available in subscribing topic method (gRPC) ADDED Adds default serializer option `ensure_ascii = False` for native Unicode representation ADDED Support for deadLetterTopic in FastAPI/Flask and gRPC ADDED Support for dashboard to list and stop apps started by `dapr run -f .` FIXED Bug for viewing actor count information To 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 daprredis, daprplacement and dapr_zipkin. Linux users need to run sudo if docker command needs sudo: ```bash dapr uninstall --all ``` For RC releases like this, download the latest and greatest release from and put the `dapr` binary in your PATH. Once you have installed the CLI, run: ```bash dapr init --runtime-version=1.10 ``` Wait for the update to finish, ensure you are using the latest version of Dapr(1.10) with: ```bash $ dapr --version CLI version: 1.10 Runtime version: 1.10 ``` You can perform zero-downtime upgrades using both Helm 3 and the Dapr CLI. Download the latest RC release from and put the `dapr` binary in your PATH. To upgrade Dapr, run: ``` dapr upgrade --runtime-version 1.10 -k ``` To upgrade with high availability mode: ``` dapr upgrade --runtime-version 1.10 --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.10 --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 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.10 --namespace dapr-system --wait ``` Alternatively, you can use the latest version of CLI: ``` dapr init --runtime-version=1.10 -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.12.0 15s 2023-02-03 13:07.39 dapr-sidecar-injector dapr-system True Running 1 1.10 15s 2023-02-03 13:07.39 dapr-sentry dapr-system True Running 1 1.10 15s 2023-02-03 13:07.39 dapr-operator dapr-system True Running 1 1.10 15s 2023-02-03 13:07.39 dapr-placement dapr-system True Running 1 1.10 15s 2023-02-03 13:07.39 ``` After Dapr 1.10 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> ``` The Cron binding is now an input-only binding The Azure Event Grid binding now requires additional configuration to receive messages; see Java SDK ihas deprecated HTTP client, gRPC client will be the only implementation supported - no change required for applications using the default client. gRPC service invocation API is now deprecated, use gRPC proxy API instead Twitter Binding is now deprecated Hazelcast PubSub remains deprecated since 1.9 and will be removed in 1.11 Dapr Dashboard will not be included in Dapr's Helm chart in the next release as it will have