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

We're happy to announce the release of Dapr 1.12! We would like to extend our thanks to all the new and existing contributors who helped make this release happen. 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.12. Thanks to everyone who made this release possible! @aaguilartablada, @AaronCrawfis, @AdamKorcz, @addjuarez, @akkie, @alexandreliberato, @alicejgibbons, @AnnuCode, @antontroshin, @artiom, @arturotrenard, @artursouza, @Azhovan, @batazor, @bderusha, @berndverst, @brendandburns, @cgillum, @ChaosInTheCRD, @chncaption, @cicoyle, @cisionmarkwalls, @cmoulliard, @cneijenhuis, @codefromthecrypt, @CrazyHZM, @DeepanshuA, @dnwe, @doe-base, @dollysah, @ejba, @elena-kolevska, @emctl, @evacchi, @fabistb, @fabrizziocht, @famarting, @fcabrera23, @FerencoVonMatterhorn, @filintod, @Gcaya, @guergabo, @halspang, @hdget, @helpta, @hhunter-ms, @hughxia, @hunter007, @ItalyPaleAle, @Jack97, @jackycsl, @jaeheonji, @Jhoysbou, @jjkcharles, @JoshVanL, @kendallroden, @kovalromank, @kruthika04, @Kuzbekov, @LaurenceLiZhixin, @letmerecall, @lburgazzoli, @macromania, @marcduiker, @MaxSchaefer, @mikeee, @mohitpalsingh, @MregXN, @msfussell, @mukundansundar, @mustaFAB53, @niakamk, @nyemade-uversky, @onionhammer, @paskozdilar, @paulyuk, @phillipleblanc, @pravinpushkar, @rabollin, @rickKoch, @robert-oh, @robertojrojas, @ross-p-smith, @RyanLettieri, @sagarlohani, @sakibian, @salmankhan-prs, @sclarke81, @shivam-51, @shivamkm07, @shruthiragu, @shubham1172, @sicoyle, @skyao, @srilasya02, @srparupu, @Taction, @thomasklinger1234, @Timtech4u, @tjsiron, @tmacam, @tomsft, @VazeeKevin, @vicancy, @vlardn, @WhitWaldo, @wimvc1, @XavierGeerinck, @xiangpingjiang, @yannart, @yaron2, @yash-nisar, @zhangcheng These are the v1.12 release highlights: The HTTP service invocation API now leverages streaming by default and is stable in the v1.12 release. This increases the overall performance of HTTP service invocation in many scenarios. Users that leverage HTTP service invocation will notice improvements such as: reduced memory usage, much smaller time-to-first-byte (TTFB), and can now send messages in chunks. You can now securely call `https://` non-Dapr endpoints providing a The enables a single transaction across a state store and any message broker and is a powerful design pattern for sending notifications regarding changes in an applications state. In this v1.12 release, the outbox pattern is enabled as a preview feature for any transactional state store. The workflow runtime and APIs have been moved to indicating the next stage of maturity towards stable. The are the preferred choice when calling the Workflow APIs directly. [Note: the alpha APIs remain functional to prevent breaking changes] Additionally, is now supported for authoring Workflows, which you can try through the . The on the now includes information on the including the app port, protocol, host, max concurrency, along with health check details as seen from the Dapr sidecar. In this v1.12 release we continued to make improvements to Dapr actors, including bug fixes and performance improvements to Actor Reminders. Some notable changes include: A new on the enables you to examine the placement tables to determine which types of actors are deployed and where they are active. This gives you more insight to actors at runtime and aids in debugging actor issues. API calls to Actor (and Workflow) endpoints now block while the Dapr actor runtime is being initialized, so applications don't need to guess anymore when the actor runtime is ready after Dapr has started. We have made improvements to the performance of Actor Reminders, reducing reducing the need to perform multiple re-evaluations when more than one Dapr sidecar goes online and/or offline at the same time, and better handling locking to prevent race

We have fixed a bug that could cause an actor to be activated on two apps at the same time if a reminder is being executed during a rebalancing. To make setting up a development environment on Kubernetes easier, the now supports a `--dev` option which deploy Redis and Zipkin containers to Kubernetes identical to the self-hosted mode. Simply set the Kubernetes cluster configuration context! Give this is try on your locally kubernetes cluster! You can now pass when running applications. For example `dapr run --app-id myapp --resources-path path1 --resources-path path2` . For example you can have a shared folder for components used across many application and a per application specific folder. This applies to any of the . enables you to run several applications locally to test them together. Windows is now supported along with Linux and Mac. now makes it easy to launch and run multiple apps with container images at the same time on Kubernetes. Try this out with the which saves having to launch multiple command windows to test multiple apps together. All bindings now support an optional either input vs output. Using a binding direction means that Dapr does not need to query the application for binding information. See for some examples. State store API now as part of the response metadata, allowing applications to make caching decisions based on the remaining time. There are over 115+ components in Dapr. One more component has been added in this release: Secret stores are now supported as a (preview feature). You can try out a and read more about . Note that as of this release v1.12 runtime release, the .NET and Go SDKs need to be updated to support pluggable secret stores. This will occur in the v1.13 milestone. The following components have been promoted to stable status: Pub/sub: Binding: Binding: and components The following components have had additional capabilities added: Bindings: Dynamic template support to binding and bindings now support parameterized queries, to prevent SQL Injection attacks Support for State stores: All transactional state stores now return the TTL when retrieving metadata. now at v2 Pub/sub: . In addition the queue name can be set via subscription metadata. Name resolvers: for the DNS name resolution for Kubernetes PostgreSQL components: All PostgreSQL components (binding, configuration store, state store) now support authentication with AzureAD WASM components: WASM components now support "strict mode", which offers additional protection against side-channel attacks when running untrusted code The HTTP service invocation API now leverages streaming by default. This increases the overall performance of HTTP service invocation in many scenarios. Custom middleware processing pipelines defined by chaining a series of is now stable. New Dapr Workflow implementation in SDK Added support for Per Actor Type Configuration Added support for distributed lock API Added support for DLQ (dead letter queue) Added environment variables to connect to remote Dapr APIs Added retry and timeout policy support for gRPC client. Added support for `DAPRHTTPENDPOINT` and/or `DAPRGRPCENDPOINT` Added `DAPRAPITOKEN` to gRPC client Added support for wildcard topics (+, #) in PubSub Added support for Dapr sidecar Metadata API All quickstarts now support multi-app run. All you need to do to run each quickstart is `dapr run -f dapr.yaml` 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.12.0. ADDED Outbox pattern for transactional state stores ADDED Streaming for HTTP service invocation UPDATED Sentry now authenticates clients before signing certificates UPDATED Workflow API now as Beta API ADDED Direction for bindings in component metadata ADDED Inject `APP_PROTOCOL` env in app containers ADDED Allow configuring HA mode for Placement separately from `global.ha.enabled` in Helm Chart ADDED Support for multiple `--config` flags for daprd in standalone mode ADDED API to retrieve placement table from placement service ADDED Service Invocation metrics when using proto-based Dapr's gRPC proxying ADDED In standalone mode, filter declarative subscriptions by namespace if set ADDED New Actor heartbeat metric `daprplacementactorheartbeattimestamp` ADDED Metadata API now includes app channel details (including app port), Dapr runtime version, and enabled features ADDED HTTP/2 Cleartext support in Dapr HTTP Server PUBLISHED Dapr operators at UPDATED Reduce metrics cardinality for workflows HTTP API ADDED Including "dapr-app-id" header in calls to `/dapr/config` ADDED TLS authentication to HTTPEndpoint resources ADDED Protected topics to pub/sub ADDED ImagePullSecrets in Helm chart supports a list ADDED Support for annotations in Helm chart FIXED App Health Checks: log failed probes when using gRPC FIXED Multiple in actor reminders, including addressing memory leaks and preventing race conditions during evaluations FIXED Disallow operations on reminders for actor types that are not currently being hosted FIXED Race conditions in Configuration gRPC APIs FIXED Configuration gRPC API: anti-pattern behavior can lead to leaks FIXED API logging format in control plane services FIXED Prevent actor double activation on different hosts when a reminder is being executed during a rebalancing FIXED Preserve TypeURL property in gRPC-to-gRPC service invocation FIXED Using `dapr.io/unix-domain-socket-path` annotation causes deployments to fail FIXED Connection leak with app channel FIXED PubSub's CloudEvent trace fields can't be customized when using custom CloudEvent FIXED Improve daprd shutdown sequence to be more "graceful" FIXED Control plane services now run with 'readOnlyRootFileSystem' FIXED Actors and Workflow APIs now block while the actor runtime is being initialized FIXED Create dapr install directory before copy ADDED Support for Windows for dapr multi-app run ADDED Windows support for `dapr stop -f` FIXED `dapr list` display the paths to the application and daprd logs in multi-app run FIXED Fixed checks for container runtime installation ADDED Add APP_PROTOCOL env var for app FIXED Fix for Quote in username errors dapr init #972 ADDED Add health and metrics port mapping for placement stand-alone mode ADDED Extend Multi-app run for Kubernetes in dev/test environment Bindings: Azure OpenAI: New component: output binding for Azure OpenAI Azure SignalR: Added client negotiate support Azure Storage Queues: Messages sent to Dapr now contain additional metadata including dequeue count HTTP: - Fixed a number of bugs, including inability to invoke URLs that contained `..` Kafka: Added metadata option

Kubernetes: - Local storage: Disable access to some more system folders for security reasons MySQL: Added support for parametrized queries PostgreSQL: Added support for parametrized queries Added support for pgBouncer via `queryExecMode` It is now possible to authenticate to Azure Database for PostgreSQL using AzureAD RabbitMQ: Use metadata from request as header of the published message Twilio Sendgrid: Added support for dynamic templates WASM: Added support for strict sandboxing Added support for fetching WASM files via HTTP(S) Added support for wasi-http Zeebe: Component is now stable Configuration stores: Azure App Configuration: - PostgreSQL: Added support for pgBouncer via `queryExecMode` It is now possible to authenticate to Azure Database for PostgreSQL using AzureAD Crypto providers: Kubernetes: [3060](https://github.com/dapr/components-contrib/pull/3060 Middlewares: Router alias: Changed the format of the metadata the component accepts WASM: Added support for strict sandboxing Added ability to pass config to guests Added support for fetching WASM files via HTTP(S) Name resolvers: Consul: Fixed resolution of IPv6 addresses. Consul now handles conflicts where an app is deployed at an address that previously was used by a different app (with a different ID) Kubernetes: Added templating capabilities for the name resolver PubSub: JetStream: Added support for delaying redelivery of failed messages Kafka: Added metadata option `oauthbearer.extensions` NATS Streaming: Because the NATS Streaming project is deprecated, the Dapr component has been deprecated too. It will be removed in Dapr 1.13 Pulsar: Added consumer proto schema validation RabbitMQ: Added support for quorum queues Added option to override queue name via subscription request metadata Added metadata option to override client name Secret stores: Kubernetes: [3060](https://github.com/dapr/components-contrib/pull/3060 State stores: Etcd: Published version "v2" of the component which includes some non-backwards compatible fixes to better support TTLs PostgreSQL: It is now possible to authenticate to Azure Database for PostgreSQL using AzureAD Added support for pgBouncer via `queryExecMode` When retrieving state from a state store that supports TTLs, the additional metadata property `ttlExpiryTime` is returned for these state stores: AWS DynamoDB Azure Cosmos DB Cassandra CockroachDB Etcd (v2) In-memory Microsoft SQL Server [2857](https://github.com/dapr/components-contrib/issues/2857 MongoDB [2857](https://github.com/dapr/components-contrib/issues/2857 MySQL [2857](https://github.com/dapr/components-contrib/issues/2857 Oracle Database [2857](https://github.com/dapr/components-contrib/issues/2857 PostgreSQL SQLite ADDED dapr app port annotation in instances API FIXED StatefulSet applications not showing on Dapr Dashboard FIXED Fix HTTP examples in Workflow Console App FIXED Fix Workflow ignoring external event payload UPDATED Bump library version for Grpc.Net.Client ADDED Support for `DAPRHTTPENDPOINT` and `DAPRGRPCENDPOINT` environment variables ADDED Support for `OnActorMethodFailedAsync` method to simplify actor error logging UPDATED Drop support for NET3.1 and standardize on NET6 ADDED Support for JSON Serialization in proxied actors ADDED Workflow support for API Tokens FIXED Fix Healthz requests to include the API Token if present ADDED Support for Dapr sidecar Metadata API FIXED Serialization error - Actor codec is ignored by client UPDATED Update Readme.md to include installtion guide FIXED configuration example does not work out of the box ADDED Log SDK version as gRPC user agent ADDED Support for Per Actor Type Configuration ADDED Support for distributed lock API ADDED Support for DLQ (dead letter queue) ADDED Workflow implementation in SDK ADDED Environment variables to talk to remote Dapr APIs ADDED Retry and timeout policy support for gRPC client. ADDED Support for TLS and external Dapr endpoints via `DAPRHTTPENDPOINT` and `DAPRGRPCENDPOINT` environment variables REMOVED Support for Python 3.7 which end of life and no longer receives security updates. CHANGED Workflow Management now uses Beta API endpoints ADDED Support for the Dapr API token FIXED Miscellaneous minor fixes, including support for activities without input parameters. ADDED Docs: Additional forkflow examples ADDED Examples and documentation for subscribing to configuration stores ADDED Support for `DAPRHTTPENDPOINT` and/or `DAPRGRPCENDPOINT` FIXED Handling of backpressure in Crypto API's `DaprChunkedStream` ADDED Tests to validate package.json and package-lock.json has the same version ADDED HTTP `PATCH` verb support for service invocation ADDED `DAPRAPITOKEN` to gRPC client UPDATED Workflow management APIs to use the beta endpoint instead of alpha ADDED Support for wildcard topics (+, #) in PubSub To upgrade to this release of Dapr, follow the steps here to ensure a smooth

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.12 ``` Wait for the update to finish, ensure you are using the latest version of Dapr(1.12) with: ```bash $ dapr --version CLI version: 1.12 Runtime version: 1.12 ``` 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.12 -k ``` To upgrade with high availability mode: ``` dapr upgrade --runtime-version 1.12 --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.12 --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.12 --namespace dapr-system --wait ``` Alternatively, you can use the latest version of CLI: ``` dapr init --runtime-version=1.12 -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.12 15s 2023-09-26 13:07.39 dapr-sentry dapr-system True Running 1 1.12 15s 2023-09-26 13:07.39 dapr-operator dapr-system True Running 1 1.12 15s 2023-09-26 13:07.39 dapr-placement dapr-system True Running 1 1.12 15s 2023-09-26 13:07.39 ``` After Dapr 1.12 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> ``` Disallow operations on reminders for actor types that are not currently being hosted The HTTP Binding now has a default `maxResponseBodySize` of 100 MB, for security reasons Azure App Config: fix time format to time.duration The NATS Streaming PubSub component has been deprecated in Dapr 1.12 and will be removed in Dapr 1.13. The upstream NATS Streaming project has been deprecated and has reached End-Of-Life in June 2023. The upstream projects recommends all users . The `UnsubscribeConfiguration` call for gRPC API has been deprecated. The `certchain`, `issuer-ca-filename`, `issuer-certificate-filename`, and `issuer-key-filename` CLI flags have been deprecated in placement & operator and will no longer have any effect. Placement & operator now only requests their identity certificate from sentry. The `token-audience` CLI flag has been deprecated in sentry. Sentry now requires inbound Kubernetes Service Account tokens to have an audience of `dapr.io/sentry` or the SPIFFE ID of sentry (`spiffe://<trust domain>/ns/<namespace>/dapr-sentry`). The `DAPRCERTCHAIN` and `DAPRCERTKEY` daprd environment variables have been deprecated and will be ignored. Daprd must request their identity certificate from sentry.