RSS

Dapr v1.12 is now available

We’re happy to announce the release of Dapr 1.12.0! πŸš€ πŸŽ‰ 🎈

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 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 a few breaking changes. See this section on upgrading Dapr to version 1.12.

Acknowledgements

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

Highlights

These are the v1.12 release highlights:

APIs

Service Invocation: HTTP streaming stable and enabled by default

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.

Service Invocation: TLS for non-Dapr endpoints

You can now securely call https:// non-Dapr endpoints providing a certificate for authentication to the remote endpoint

State Management: Outbox Pattern for state stores (preview feature)

The outbox pattern 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 application’s state.

In this v1.12 release, the outbox pattern is enabled as a preview feature for any transactional state store.

Dapr Workflow in beta, with Java support

The workflow runtime and APIs have been moved to beta status indicating the next stage of maturity towards stable. The beta APIs are the preferred choice when calling the Workflow APIs directly. [Note: the alpha APIs remain functional to prevent breaking changes]

Additionally, Java SDK is now supported for authoring Workflows, which you can try through the Java workflow quickstarts.

Metadata API improvements

The metadata API on the Dapr sidecar now includes information on the app connection details including the app port, protocol, host, max concurrency, along with health check details as seen from the Dapr sidecar.

Improvement to Dapr actors and Placement APIs

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 placement API on the Placement service 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 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 conditions.
  • 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.

CLI

  • To make setting up a development environment on Kubernetes easier, the dapr init -k command 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 multiple resource paths 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 Dapr resources.

Multi App run

  • Multi-App run enables you to run several applications locally to test them together. Windows is now supported along with Linux and Mac.
  • Multi-App run for Kubernetes now makes it easy to launch and run multiple apps with container images at the same time on Kubernetes. Try this out with the hello kubernetes tutorial which saves having to launch multiple command windows to test multiple apps together.

Components

  • All bindings now support an optional bindings direction either input vs output. Using a binding direction means that Dapr does not need to query the application for binding information. See binding quickstart for some examples.
  • State store API now returns TTL as part of the response metadata, allowing applications to make caching decisions based on the remaining time. 2987

New components

There are over 115+ components in Dapr. One more component has been added in this release:

Pluggable components: Secret stores now supported

Component stabilization

The following components have been promoted to stable status:

Component improvements

The following components have had additional capabilities added:

  • Bindings:
  • State stores:
    • All transactional state stores now return the TTL when retrieving metadata.
    • etcd state store now at v2
  • Pub/sub:
  • Name resolvers:
  • PostgreSQL components:
    • All PostgreSQL components (binding, configuration store, state store) now support authentication with Azure AD
  • WASM components:
    • WASM components now support “strict mode”, which offers additional protection against side-channel attacks when running untrusted code

v1.11 Preview Features now stable

  • 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 middle components is now stable.

SDK Improvements

Java SDK

  • New Dapr Workflow implementation in SDK 839
  • Added support for Per Actor Type Configuration 729
  • Added support for distributed lock API 747
  • Added support for DLQ (dead letter queue) 777
  • Added environment variables to connect to remote Dapr APIs 876
  • Added retry and timeout policy support for gRPC client. 889

JavaScript SDK

  • Added support for DAPR_HTTP_ENDPOINT and/or DAPR_GRPC_ENDPOINT 502
  • Added DAPR_API_TOKEN to gRPC client 520
  • Added support for wildcard topics (+, #) in PubSub 529

Go SDK

  • Added support for Dapr sidecar Metadata API 290

Quickstarts Improvements

  • All quickstarts now support multi-app run. All you need to do to run each quickstart is dapr run -f dapr.yaml

Next Steps

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 a few breaking changes. See this section on upgrading Dapr to version 1.12.0.

New in this release

Dapr Runtime

  • ADDED Outbox pattern for transactional state stores 4233 6755
  • ADDED Streaming for HTTP service invocation 6571
  • UPDATED Sentry now authenticates clients before signing certificates 6171
  • UPDATED Workflow API now as Beta API 6640
  • ADDED Direction for bindings in component metadata 6449 6608
  • ADDED Inject APP_PROTOCOL env in app containers 6512
  • ADDED Allow configuring HA mode for Placement separately from global.ha.enabled in Helm Chart 6518
  • ADDED Support for multiple --config flags for daprd in standalone mode 6091
  • ADDED API to retrieve placement table from placement service 6033 6732
  • ADDED Service Invocation metrics when using proto-based Dapr’s gRPC proxying 6459
  • ADDED In standalone mode, filter declarative subscriptions by namespace if set 6494
  • ADDED New Actor heartbeat metric dapr_placement_actor_heartbeat_timestamp 6534
  • ADDED Metadata API now includes app channel details (including app port), Dapr runtime version, and enabled features 6453 6537 6524
  • ADDED HTTP/2 Cleartext support in Dapr HTTP Server 6570 6601
  • PUBLISHED Dapr operators at operatorhub.io 1079
  • UPDATED Reduce metrics cardinality for workflows HTTP API 6903
  • ADDED Including “dapr-app-id” header in calls to /dapr/config 6583
  • ADDED TLS authentication to HTTPEndpoint resources 6657 6690
  • ADDED Protected topics to pub/sub 6714
  • ADDED ImagePullSecrets in Helm chart supports a list 6773
  • ADDED Support for annotations in Helm chart 6802
  • FIXED App Health Checks: log failed probes when using gRPC 6772
  • FIXED Multiple in actor reminders, including addressing memory leaks and preventing race conditions during evaluations 6503 6523 6741
  • FIXED Disallow operations on reminders for actor types that are not currently being hosted 6493 6150
  • FIXED Race conditions in Configuration gRPC APIs 6558 6769
  • FIXED Configuration gRPC API: anti-pattern behavior can lead to leaks 6560
  • FIXED API logging format in control plane services 6693 6694
  • FIXED Prevent actor double activation on different hosts when a reminder is being executed during a rebalancing 6968
  • FIXED Preserve TypeURL property in gRPC-to-gRPC service invocation 7014
  • FIXED Using dapr.io/unix-domain-socket-path annotation causes deployments to fail 6705
  • FIXED Connection leak with app channel 6734 6774
  • FIXED PubSub’s CloudEvent trace fields can’t be customized when using custom CloudEvent 6800 components-contrib#3080
  • FIXED Improve daprd shutdown sequence to be more “graceful” 2478
  • FIXED Control plane services now run with ‘readOnlyRootFileSystem’ 6940
  • FIXED Actors and Workflow APIs now block while the actor runtime is being initialized 6972

Dapr CLI

  • FIXED Create dapr install directory before copy 1111
  • ADDED Support for Windows for dapr multi-app run 1220
  • ADDED Windows support for dapr stop -f 1221
  • FIXED dapr list display the paths to the application and daprd logs in multi-app run 1228
  • FIXED Fixed checks for container runtime installation 1300
  • ADDED Add APP_PROTOCOL env var for app 1318
  • FIXED Fix for Quote in username errors dapr init #972 1322
  • ADDED Add health and metrics port mapping for placement stand-alone mode 1323
  • ADDED Extend Multi-app run for Kubernetes in dev/test environment 1324

Components

  • Bindings:
    • Azure OpenAI:
      • New component: output binding for Azure OpenAI 2965 3022 2716
    • Azure SignalR:
      • Added client negotiate support 3073
    • Azure Storage Queues:
      • Messages sent to Dapr now contain additional metadata including dequeue count 3028 2375
    • HTTP:
      • [Breaking change] When reading a response, the amount of data read is capped at “maxResponseBodySize” as set in the metadata, with 100Mi as default 3040
      • Fixed a number of bugs, including inability to invoke URLs that contained .. 2981
    • Kafka:
      • Added metadata option oauthbearer.extensions 3008
    • Kubernetes:
      • [Breaking change] Path to kubeconfig file is now passed as metadata option and not as CLI flag 2992 3060
    • Local storage:
      • Disable access to some more system folders for security reasons 2947
    • MySQL:
      • Added support for parametrized queries 2973
    • PostgreSQL:
      • Added support for parametrized queries 2972
      • Added support for pgBouncer via queryExecMode 3002 3103
      • It is now possible to authenticate to Azure Database for PostgreSQL using Azure AD 2595
    • RabbitMQ:
      • Use metadata from request as header of the published message 2895 3030
    • Twilio Sendgrid:
      • Added support for dynamic templates 2412 2844
    • WASM:
      • Added support for strict sandboxing 2884
      • Added support for fetching WASM files via HTTP(S) 3005
      • Added support for wasi-http 3007
    • Zeebe:
  • Configuration stores:
    • Azure App Configuration:
      • [Breaking change] Metadata options have been changed to support Go durations (or seconds) instead of nanoseconds 2976 3004
    • PostgreSQL:
      • Added support for pgBouncer via queryExecMode 3002 3103
      • It is now possible to authenticate to Azure Database for PostgreSQL using Azure AD 2595
  • Crypto providers:
  • Middlewares:
    • Router alias:
      • Changed the format of the metadata the component accepts 2903
    • WASM:
      • Added support for strict sandboxing 2884
      • Added ability to pass config to guests 2918
      • Added support for fetching WASM files via HTTP(S) 3005
  • Name resolvers:
    • Consul:
      • Fixed resolution of IPv6 addresses. 3074
      • Consul now handles conflicts where an app is deployed at an address that previously was used by a different app (with a different ID) 2489 2980 2490 dapr#6642
    • Kubernetes:
      • Added templating capabilities for the name resolver 2883
  • PubSub:
    • JetStream:
      • Added support for delaying redelivery of failed messages 3079 3102
    • Kafka:
      • Added metadata option oauthbearer.extensions 3008
    • NATS Streaming:
      • Because the NATS Streaming project is deprecated, the Dapr component has been deprecated too. It will be removed in Dapr 1.13 3042 3043
    • Pulsar:
      • Added consumer proto schema validation 3014
    • RabbitMQ:
      • Added support for quorum queues 2544
      • Added option to override queue name via subscription request metadata 2791 2962
      • Added metadata option to override client name 2933
  • Secret stores:
  • State stores:

Dashboard

  • ADDED dapr app port annotation in instances API 150
  • FIXED StatefulSet applications not showing on Dapr Dashboard 249

.NET SDK

  • FIXED Fix HTTP examples in Workflow Console App 1107
  • FIXED Fix Workflow ignoring external event payload 1119
  • UPDATED Bump library version for Grpc.Net.Client 1126
  • ADDED Support for DAPR_HTTP_ENDPOINT and DAPR_GRPC_ENDPOINT environment variables 1124
  • ADDED Support for OnActorMethodFailedAsync method to simplify actor error logging 1014
  • UPDATED Drop support for NET3.1 and standardize on NET6 1045
  • ADDED Support for JSON Serialization in proxied actors 1073
  • ADDED Workflow support for API Tokens 1141
  • FIXED Fix Healthz requests to include the API Token if present 1145

Go SDK

  • ADDED Support for Dapr sidecar Metadata API 290
  • FIXED Serialization error - Actor codec is ignored by client 317
  • UPDATED Update Readme.md to include installtion guide 433
  • FIXED configuration example does not work out of the box 447
  • ADDED Log SDK version as gRPC user agent 421

Java SDK

  • ADDED Support for Per Actor Type Configuration 729
  • ADDED Support for distributed lock API 747
  • ADDED Support for DLQ (dead letter queue) 777
  • ADDED Workflow implementation in SDK 839
  • ADDED Environment variables to talk to remote Dapr APIs 876
  • ADDED Retry and timeout policy support for gRPC client. 889

Python SDK

  • ADDED Support for TLS and external Dapr endpoints via DAPR_HTTP_ENDPOINT and DAPR_GRPC_ENDPOINT environment variables 577
  • REMOVED Support for Python 3.7 which end of life and no longer receives security updates.
  • CHANGED Workflow Management now uses Beta API endpoints 605
Python Workflow Alpha SDK (dapr-ext-workflow)
  • ADDED Support for the Dapr API token 598
  • FIXED Miscellaneous minor fixes, including support for activities without input parameters.
  • ADDED Docs: Additional forkflow examples 575

JavaScript SDK

  • ADDED Examples and documentation for subscribing to configuration stores 465
  • ADDED Support for DAPR_HTTP_ENDPOINT and/or DAPR_GRPC_ENDPOINT 502
  • FIXED Handling of backpressure in Crypto API’s DaprChunkedStream 503
  • ADDED Tests to validate package.json and package-lock.json has the same version 505
  • ADDED HTTP PATCH verb support for service invocation 518
  • ADDED DAPR_API_TOKEN to gRPC client 520
  • UPDATED Workflow management APIs to use the beta endpoint instead of alpha 528
  • ADDED Support for wildcard topics (+, #) in PubSub 529

Upgrading to Dapr 1.12

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?

Local Machine / Self-hosted

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.12

Wait for the update to finish, ensure you are using the latest version of Dapr(1.12) with:

$ dapr --version

CLI version: 1.12
Runtime version: 1.12

Kubernetes

Upgrading from previous version

You can perform zero-downtime upgrades using both Helm 3 and the Dapr CLI.

Upgrading with zero-downtime is supported from Dapr 1.10 or higher. If upgrading from Dapr 1.9 or earlier, during a rollout you may encounter temporary issues with service invocation if the caller app is running Dapr 1.12 and the target is running Dapr 1.9 or earlier. In this case, we recommend upgrading to Dapr 1.11.x first.

If you are using gRPC-to-gRPC service invocation (legacy, non proxy-based) we recommend performing an upgrade to Dapr 1.11.5 first, before upgrading to 1.12.0. This will ensure the continued ability to perform gRPC-to-gRPC service invocation (legacy, non proxy-based) when the caller app is running Dapr 1.12.

Upgrade using the 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.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

Upgrade using Helm

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

Starting a fresh install on a cluster

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.12 --namespace dapr-system --wait

Alternatively, you can use the latest version of CLI:

dapr init --runtime-version=1.12 -k
Post installation

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>

Breaking Changes

  • Disallow operations on reminders for actor types that are not currently being hosted dapr#6493
  • The HTTP Binding now has a default maxResponseBodySize of 100 MB, for security reasons components-contrib#3040
  • Azure App Config: fix time format to time.duration components-contrib#3004

Deprecation Notices

  • 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 migrate to NATS JetStream.
  • The UnsubscribeConfiguration call for gRPC API has been deprecated. 6769