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

We're happy to announce the release of Dapr 1.7.0! We would like to extend our thanks to all the new and existing contributors who helped make this release happen. @1046102779, @AaronCrawfis, @abelperezok, @akkie, @alberthuang24, @amimimor, @amulyavarote, @artursouza, @beiwei30, @berndverst, @callmexiaolu88, @chinzhiweiblank, @chiru1221, @Cowlord711, @CrazyHZM, @cuishuang, @daixiang0, @davidgladstone, @DeepanshuA, @derrickburns, @dmitsh, @duglin, @Gehhilfe, @Giovds, @greenie-msft, @halspang, @hhunter-ms, @hmz777, @ItalyPaleAle, @jigargandhi, @jjcollinge, @Joshswooft, @l0ll098, @LaurenceLiZhixin, @lechnerc77, @li1234yun, @light-pan, @ls-2018, @lucasjellema, @lupino3, @marcinjahn, @marviniter, @msfussell, @mukundansundar, @mumumi, @naveen1100, @newbe36524, @nwiizo, @paulyuk, @pkedy, @pravinpushkar, @psychomelet, @qt-luigi, @r-c-correa, @RichardLaos, @rlfcunha, @rodrigoscna, @SergioVelmay, @shizn, @shivamkm07, @Shoothzj, @shubham1172, @si618, @siredmar, @skyao, @sourikghosh, @surenderssm, @Syuparn, @Taction, @tanvigour, @theonefx, @thielepaul, @uptutu, @uy-andrew, @vfarcic, @willvelida, @wimvdc, @XavierGeerinck, @yaron2, @yauri-io, @yordan-pavlov, @zdianjiang Distributed applications are commonly comprised of many services, with dozens - even hundreds - of instances for any given application. These applications do not live in isolation, but are many times dependent on databases, caches, pub/subs, secret stores and other infrastructure services. With more dependencies, the likelihood of a system failure increases. For example, an instance can fail or be unresponsive due to hardware failure, database slowness, an overwhelming number of requests, application restarts/scale outs, or several other reasons. Designing and implementing your application with fault tolerance (the ability to detect, mitigate, and respond to failures) allows your application to recover to a functioning state and become self healing, and also helps prevent cascading failures all the way to your infrastructure services. Dapr provides a capability for defining and applying via a . Resiliency specs are saved in the same location as components specs and are applied when the Dapr sidecar starts. The sidecar determines how to apply to your Dapr API calls. Within the resiliency spec, you can define policies for popular resiliency patterns, such as: Policies can then be applied consistently to targets, which include: - In order to provide increased visibility into operations, including, pub/sub, bindings, state stores etc. For example, latencies when using a component or the number of times a given component has been called. The Dapr runtime to standard output for ease of diagnostics, for example listing components loaded at startup other runtime information. With this release you can now turn on between your application and the Dapr sidecar and also see these in the output log. The following components with stable release candidates in the previous Dapr release have graduated to stable designation: There are now a total of 22 state stores with three new ones added in this release. see see see In addition, the preview Query API support has been added to the , and state stores in The binding now has support for . See the components section below for the list of numerous other fixes to components in this release. [Note: With this release, there are now a total of 97 components including 41 bindings, 1 configuration, 8 HTTP middleware, 3 name resolution, 13 pub/sub, 8 secret stores, 23 state stores] Several features were moved from "preview" status to "stable" status having been available for at least two releases and solicited feedback and fixes. The following features are now stable in this release: including adding new support for using 128-bit, 192-bit and 256-bit key sizes. Kubernetes namespace support: The , and CLI commands now support Kubernetes namespaces when returning

Easier certificate renewal: To ease the rollover and regeneration of new root and application certificates a command has been introduced. This makes it easier to address root certificate expiry and renewal in clusters. Along with this, any CLI command that uses the Kubernetes -k option, now raises a warning message if the root certificate expiry is less than 30 days away. Private and alternative image registries (Preview): In self hosted mode required to install Dapr, as well as the ability to choose either public Dockerhub or Github repositories. This enables you to place images in trusted repositories of your choice, or pull from different purblic sources in case of image throttling. Offline or airgap installation (Preview): By default, Dapr downloads binaries and pulls images from the network to setup the development environment. With this release, Dapr now supports offline or airgap installation using pre-downloaded artifacts, either with a Docker or slim environment. The artifacts for each Dapr release are now built into a which can be downloaded from the . By using , you can install Dapr into environments that do not have any network access. It's now possible to use Unix Domain Sockets with Kubernetes (as well as self hosted) for increased throughput and lower latency when invoking the Dapr sidecar by using the `dapr.io/unix-domain-socket-path` . Note: This feature is not available on Windows, only on Linux 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 . Note: This release contains a few . See section on upgrading Dapr to version 1.7.0. FIXED Dapr setting a default content type of `text/plain` ADDED Circuit Breaking ADDED Content-Type for state operations ADDED Resiliency policies across all building blocks CHANGED Actor Reentrancy to stable feature CHANGED gRPC Proxying to stable feature FIXED Service invocation to return original status code on service invocation. Add the possibility to configure retries base on error type FIXED Serialization of 64bit values. ADDED Unsubscribe method for the configuration API. FIXED Bug in runtime matching wildcard routes for pubsub. ADDED Actor options configuration per actor type ADDED Logging for mTLS cert expiration ADDED Logging for sidecar pod name in Dapr Operator FIXED Method invocation / Dapr automatically decodes %2f in URL FIXED TLS connectivity to gRPC proxy functionality when --app-ssl is enabled ADDED More metrics ADDED logging for Dapr API calls over gRPC and HTTP ADDED Nightly builds for Dapr FIXED helm charts: increase failure threshold for liveness and readiness probes ADDED sidecar-injector health check port setting in helm chart FIXED Configuration API, listen to all keys ADDED HealthzPort option to injector helm chart - defaults to 8080 FIXED Dapr retries forever when app is erroring on subscriptions FIXED gRPC proxy connection closes after mTLS TTL passed ADDED Dapr images to GitHub container registry in addition to Docker Hub FIXED Multiple access control policies for a single app not working ADDED New options available for the default secret-reader deployed by the dapr_rbac subchart. FIXED Sidecar loads components instead of skipping if exists when operator stream reconnects FIXED Update of components in Kubernetes mode was accidentally available and not working properly, now

ADDED Introduce state store component backed by Oracle Database or OCI Autonomous Database FIXED Condition in ReminderRename that would leave Reminder deleted. CHANGED Automatic State Store Encryption to stable feature ADDED `prometheus.io/probe` annotation FIXED When the deployment selector is updated, dapr will get a "connection refused" error FIXED Parity between HTTP and gRPC APIs when saving JSON state FIXED Concurrent map write error in placement FIXED Reduce placement blocking client ADDED Mirror of 3rd party container images to Dapr's GHCR ADDED Explicit support for other AES key sizes FIXED In Docker containers, use the CA cert bundle that's part of the base distroless images ADDED Resiliency: Debug logging when a circuit breaker changes state ADDED Rejson image to Dapr's GHCR FIXED Issue when actor reminders are used on single actor instance but is assigned on two pods on Kubernetes ADDED Support for Unix Domain Socket (UDS) on Kubernetes FIXED Allow disabling of default content-type for service invocation over HTTP where no content-type is specified ADDED Simplify development and debugging setup using a dev container. FIXED On error, run exits with an error code ADDED `dapr init` has support for Dapr GitHub container registry via Environment variable ADDED Added support for standalone installer ADDED Add support for querying based on `namespace` in the `dapr` list, configurations and components command FIXED dapr init -s installs old runtime version ADDED "dapr init" ADD "--image-registry" ADDED Support for renew or replace of auto-generated TLS certificates using the CLI ADDED Support for checking expiry of TLS certificates of running Kubernetes related commands via Dapr CLI FIXED --log-as-json through cli is not working FIXED CLI should throw an error when invalid method is invoked. ADDED FOSSA workflow for identifying dependencies with non-OSS-compliant licenses ADDED `content-type` support for pub/sub, binding and state store components ADDED configuration unsubscribe API ADDED new CockroachDB state store component ADDED new NATS JetStream state store component ADDED new Oracle Database state store component ADDED Apache pulsar pub/sub: upgrade client to 0.8.0 ADDED AWS DynamoDB state store: support for time to live ADDED AWS S3 binding: Add option to disable SSL for S3 ADDED Azure CosmosDB state store & binding: now retries throttled requests from database ADDED Azure EventHubs binding: Adds Azure Active Directory support ADDED Azure ServiceBus pub/sub: Retry attempts for various possible causes of 'Connection reset by peer' ADDED Consul name resolution: Updates Consul API to v1.11.0 (necessary for Zeebe upgrade) ADDED GCP pub/sub: Add reconnect loop for subscriptions ADDED Hashicorp Vault secret store: Support version and engine path. Add parseAsMap option. ADDED influxdb binding: Add support for query ADDED Kafka binding: Version configuration ADDED NATS JetStream pub/sub: Adds support for wildcard subscriptions ADDED NATS Jetstream pub/sub: NKey based authentication ADDED OCI ObjectStorage state store: Support configuration through OCI configuration and PEM key file ADDED PostgreSQL state store: Add Query state store API implementation ADDED Pulsar pub/sub: add producer option `disableBatching` ADDED Pulsar pub/sub: Token authentication & support for hosts over http ADDED rabbitmq pub/sub: Support for setting exchangekind ADDED Redis state store: Add Query state store API implementation ADDED zeebe binding: upgrades zeebe library to

FIXED Addresses macOS security warnings due to deprecated system headers by upgrading 99design/keyring library FIXED Fixes a pub/sub cloudevent serialization issue with 64 bit data type FIXED Fixes an issue with unsubscribing from configurations by id FIXED statestore query API preview: Removes redundant `value` prefix from the key names in JSON query syntax FIXED AWS S3 binding: allow disabling SSL cert validation (to accept self-signed certs) FIXED AWS SNS/SQS pub/sub: bugfixes - visibility timeout reset; honors disable entity management setting in DLQ FIXED Azure CosmosDB state store: Fixes an issue with stored procedure creation when Azure AD credentials are used FIXED Azure CosmosDB state store: transaction API to respect order of operations FIXED Azure EventHubs pub/sub: Support Azure AD credentials for checkpointing storage FIXED Google Cloud pub/sub: Returns No Ack (nack) when there is an error FIXED mDNS name resolution: sync first browse FIXED MongoDB state store: Actor reminders broken since 1.5.0 due to data serialization problem (see also hotfix release 1.5.2 and 1.6.1) FIXED MongoDB state store: Fixes an issue preventing MongoDB from querying non-string values FIXED MongoDB state store: Removes MongoDB bson artifacts from JSON value output FIXED MySQL binding: add `TEXT` column type special case handling FIXED MySQL binding: adds special handling for `JSON_EXTRACT` and `LONGTEXT` column types FIXED MySQL state store: transaction API to respect order of operations. FIXED PostgreSQL state store: transaction API to respect order of operations. FIXED rabbitmq pub/sub: Fixes a reconnect issue FIXED Redis state store: Fixes an issue preventing querying of numeric values FIXED Setting a value using ETag for the Postgres state store FIXED SQL Server state store: Ensures transaction API executes all transactions sequentially. FIXED SQL Server state store: transaction API to respect order of operations. ADDED Several Dashboard improvements ADDED Support for providing Actor TypeName during runtime at startup. FIXED AddDaprSecretStore Extension always throws unhandled exception at container start FIXED ActorHost.JsonSerializerOptions is always null ADDED Build/test with .NET 6 to CI matrix FIXED Configuration API FIXED Receiving sub events with rawPayload does not work ADDED Graceful shutdown REMOVED Deprecated builder classes ADDED Added support for statestore query API FIXED Long values are not sent correctly with PubSub FIXED Topic annotation handles class-level `@RequestMapping` FIXED Fixed service invocation path segments to avoid automatic encoding of `/` to `%2f` FIXED Dapr invoke method has very low throughput compared to calling API directly FIXED Actor DurationUtils parsing of duration throws an exception ADDED adds `DaprClient` configuration option `maxgrpcmessage_length` for max gRPC message length in service invocation ADDED adds support for asynchronous service invocation with new method `invokemethodasync` in `DaprClient` (HTTP only) ADDED adds support for configuration subscriptions as part of the configuration API preview) ADDED adds support for TTL in actor reminders ADDED adds pubsub topic event response support to GRPC ext client. This allows a subscriber to indicate whether a pub/sub message was handled successfully, should be dropped, or should be retried. FIXED now reuses any existing asyncio event loop everywhere (including in `DaprInvocationHttpClient`), allowing for use in environments like Jupyter Notebooks FIXED fixes an issue where actor timers used the wrong context FIXED removes a superfluous metadata deprecation warning ADDED updates examples for new state store query syntax ADDED Doc: Configuration API in JS-SDK ADDED JS-SDK client uses environment variables to initialize ADDED Upgrade to latest Node LTS 16.14.0 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

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.7.0 ``` Wait for the update to finish, ensure you are using the latest version of Dapr(1.7.0) with: ```bash $ dapr --version CLI version: 1.7.0 Runtime version: 1.7.0 ``` 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.7.0 -k ``` To upgrade with high availability mode: ``` dapr upgrade --runtime-version 1.7.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.7.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 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.7.0 --namespace dapr-system --wait ``` Alternatively, you can use the latest version of CLI: ``` dapr init --runtime-version=1.7.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.10.0 15s 2022-03-29 13:07.39 dapr-sidecar-injector dapr-system True Running 1 1.7.0 15s 2022-03-29 13:07.39 dapr-sentry dapr-system True Running 1 1.7.0 15s 2022-03-29 13:07.39 dapr-operator dapr-system True Running 1 1.7.0 15s 2022-03-29 13:07.39 dapr-placement dapr-system True Running 1 1.7.0 15s 2022-03-29 13:07.39 ``` After Dapr 1.7.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> ``` In this release the `value` field has been removed from the key name in the state management Query API as part of the ongoing feedback on this preview feature. FIXED statestore preview Query API: Remove 'value' prefix from the key names in query JSON This release include the breaking change to the MongoDB store to address a data serialization problem. FIXED MongoDB state store: Removes MongoDB bson artifacts from JSON value output If you use "/" as part of your method invocation, this release will affect those service invocations: FIXED Method invocation / Dapr automatically decodes %2f in URL REMOVED Deprecated builder classes Starting in Dapr 1.9, `content-type` will no longer default to `text/plain` if not explicitly provided as a header for HTTP invocations. Users are recommended to turn on this new behavior via the new to evaluate the impact of this change.