RSS

Dapr v1.10 is now available

We’re happy to announce the release of Dapr 1.10.0! 🚀 🎉 🎈

We would like to extend our thanks to all the new and existing contributors who helped make this release happen.

Acknowledgements

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

Highlights

Dapr Workflows (preview)

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 Dapr Workflow or dive in and try out a .NET Dapr Workflow quickstart to see this in action.

Publish and subscribe to bulk messages (preview)

With the bulk publish and subscribe, 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.

Pluggable component SDKs (preview)

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 and are able to “plug” into Dapr. In this release preview SDKs for .NET, Java, and Go enable you to create pluggable components easily with the language of your choice. You can read more on .NET SDK here.

Multi-App Run to improve local development (preview)

With Multi-App Run, 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 here with Java, Go, .NET, JavaScript and Python

Resiliency policies now stable

In this release, resiliency policies, first introduced in the v1.7.0 release, are now stable. Try them out in these resiliency quickstarts

Stable component updates

In this release, the following components were designated as stable:

State management

Secret store

Bindings

PubSub

Deprecated components

The following components are now “deprecated” and marked for deletion in a future Dapr version:

  • Binding: Twitter 2506
  • PubSub: Hazelcast 2240

New components

There are now 111 built-in components in Dapr. Eight new components were added in this release:

CLI

A new --resources-path has been introduce for all resource types

  • 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 choice. See examples in the quickstarts

Observability

Regex for metrics

  • You can can now apply regex expressions on metrics to deal with high cardinality metrics that might cause large memory usage and egress costs.

New service invocation metrics

  • New metrics for service invocation were added 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.

Breaking changes and deprecations

Note: ** This release contains breaking changes and deprecations in the runtime and SDKs.

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.

See this section on upgrading Dapr to version 1.10.

New in this release

Dapr Runtime

  • ADDED Support for bulk publish and subscribe to improve throughput 2218
  • ADDED Support for rewriting high-cardinality path labels for metrics, avoiding overload in Prometheus 4133
  • ADDED Partial support for streaming in HTTP service invocation 5706 5648 5170
  • UPDATED Basic WebAssembly middleware with more flexible version 5003
  • ADDEDD ALLOWED_SERVICE_ACCOUNTS option to the helm chart 5019
  • ADDEDD caller’s and callee’s app-ids in headers for service invocation 5155
  • ADDED Dapr Workflow Building Block and Engine 5158 5537
  • FIXED gRPC proxy not operational during the graceful shutdown period 5198
  • ADDED Shared gRPC connections for bindings Pluggable Components 5231
  • CHANGED Enabled runAsNonRoot and readOnlyRootFilesystem for Dapr sidecar 5374
  • ADDED Allow creating Pods with automountServiceAccountToken: false - use bound tokens for identity in Dapr 5371 5359 5623
  • FIXED Bulk API for Secret Store throwing error 5320
  • FIXED Trace issue while using Resiliency 5321
  • FIXED /healthz/outbound bypasses API access rules just like /healthz 5379
  • ADDED Support loading multiple declarative subscriptions in a single YAML file 5347 5407
  • UPDATED Make Resiliency policies stable 5732
  • ADDED CLI option --no-health-check-api-logging to omit health checks from API logging 5457
  • ADDED More flags in charts, mostly which one related to sentry trust bundle 5469
  • ADDED Namespaced topics to PubSub namespaced consumer groups 5472
  • UPDATED Dapr shutdown to initiate after expiry of grace period 5481
  • ADDED Service Invocation Metrics 5485 5484
  • ADDED List of PubSub Subscriptions to metadata endpoint’s response 5510
  • ADDED Support to override cloud event attributes via metadata 5515 5840
  • FIXED Resiliency not parsing maxRetries: 0 5531
  • UPDATED Disallow dots in app-id in self-hosted mode 5552
  • FIXED Panic in placement membership heartbeat loop in sidecar 5575
  • ADDED Fetch subscription list over gRPC 5652
  • FIXED dapr_sidecar_injector.replicaCount is not considered with Helm deployment 5674
  • ALLOW Component metadata value to use {appID} 5690
  • FIXED Bug stopping dapr_runtime_resiliency_loaded being reported 5711
  • FIXED Reduce number of warnings when a component references a secret store that has not yet been loaded 5825
  • FIXED gRPC proxy now handles streaming and resiliency correctly 5777
  • ADDED Allow Dapr to watch resources in a configured namespace with role bindings 5787 5801
  • REMOVED “Server” header from HTTP responses 5821
  • CHANGED Helm chart to use a separate service account for each Dapr control plane service 5767
  • FIXED Resiliency to not retry on 201-299 status codes 5863
  • UPDATED Renamed MQTT components (binding, PubSub) to “MQTT3” (maintain the old names as aliases) 5759
  • FIXED Multiple fixes to gRPC proxy including panics, data loss, resiliency not working 5751
  • DEPRECATED gRPC service invocation API 5324
  • ADDED Add obfuscateURLs option to HTTP apiLogging configuration 5866 5409
  • ADDED Dapr Config CRD supports to .metrics in addition to .metric 5824
  • FIXED Goroutine leak when operations with Resiliency time out 5645
  • FIXED Service invocation panics if the nameresolver isn’t initialized 5559
  • FIXED Race conditions when Resiliency is enabled 5538

Components

  • New components:
    • State store: SQLite 3 2465
    • State store: Cloudflare Workers KV 2363
    • Binding: Cloudflare Queues 2363
    • Binding: KubeMQ 2272
    • PubSub: Azure Service Bus Queues 2211
    • PubSub: KubeMQ 2215
    • PubSub: Solace PubSub+ (AMQP) 2382
    • HTTP Middlewares: Router Alias 2041
  • The following components are now “Stable”:
    • State store: AWS DynamoDB 1539
    • State store: MySQL 2241
    • State store: CockroachDB 1928
    • Secret store: Hashicorp Vault 1926
    • Binding: Cron 2056
    • PubSub: Apache Pulsar 2013
    • PubSub: AWS SQS/SNS 1971
  • The following components are now “Deprecated” and marked for deletion in a future Dapr version:
    • Binding: Twitter 2506
    • PubSub: Hazelcast 2240
  • Breaking changes:
    • The Cron binding is now an input-only binding 2191
    • The Azure Event Grid binding now requires additional configuration to receive messages; see documentation
  • ADDED [Azure Service Bus Topics PubSub] Allow subscribing with sessions 289
  • FIXED [Redis Configuration Store] After Dapr is started, newly added keys cannot be subscribed 1999
  • ADDED [RabbitMQ Pubsub] Support for AMPQs (Secure AMPQ) protocol 2008
  • FIXED [Azure Config Store] component does not pull all keys using connection string 2061
  • ADDED [Redis Binding] Support for Delete and Get operations. 2068
  • ADDED [RabbitMQ PubSub] Native support for message TTL (time to live) 2072
  • ADDED [RocketMQ] New configuration options, orderly message support 2094
  • FIXED [WASM] Handles request URI edge cases 2168
  • FIXED [Kafka PubSub] Restore passing of Kafka record headers to subscribers 2212
  • ADDED [Redis] Add support for Redis 7 in all Redis Components 2228
  • CHANGED [All Dapr PubSub Components] Consumer group is now optional. The runtime injects a group name if not present 2233
  • FIXED [MySQL State Store] Fixed issues with transaction handling 2241
  • ADDED [MySQL State Store] MySQL state store is now validated against MariaDB too 2242
  • ADDED [RabbitMQ PubSub] Support AMQPS protocol with x509 authentication. 2246
  • FIXED [RabbitMQ PubSub] Wrong content-type handling 2238
  • FIXED [Kubernetes name resolver] Fixed customize configuration 2262
  • ADDED [Azure Storage Queues Binding] Add b64encoding option for messages 2249 2263
  • ADDED [Azure Storage Queues binding] Support setting a visibility timeout for receiving message 2259
  • FIXED [NATS PubSub] Fixed issues with leafnode subscription not working 2265
  • ADDED [Postgres State Store] Add Support for First-Write concurrency 2289
  • ADDED [Postgres State Store] Support TTL (time to live) 2302
  • CHANGED [Azure Blob Storage] Binding and State Store migrated to updated “track 2” Azure SDK 2290
  • ADDED [JetStream] Support for token-based auth 2295
  • FIXED [JetStream] Missing filter subject 2312
  • ADDED [JetStream] Add domain and apiPrefix options 2400
  • ADDED [JetStream] Add more metadata options 2180
  • ADDED [Jetstream] Support for message deduplication via Nats-Msg-Id #2200 2202
  • ADDED [Azure Event Hubs] Receiving of custom properties from IoT Hub 2298
  • FIXED [In-Memory State Store] Multiple fixes to component 2303
  • ADDED [MQTT PubSub] Support for MQTT retained information to pubsub message metadata 2299
  • FIXED [MQTT PubSub] ACK Retained Messages 2310
  • FIXED [MQTT components] improve reconnection handling and fix bugs 2467
  • ADDED [HTTP binding] Allow non-200 responses to be treated as non-errors 2321
  • ADDED [HTTP Binding] Two-Way SSL configuration for 2284
  • ADDED [HTTP binding] Propagate tracing headers 2452 2445
  • ADDED [HTTP Binding] Add token authentication options 2468
  • ADDED [NATS PubSub] Add AckPolicy option to 2340
  • FIXED [Local Storage binding] Improved handling of files not found 2374
  • ADDED [Local Storage binding] Support for disallowing access to certain paths, plus miscellaneous improvements. 2449
  • ADDED [AWS DynamoDB] Adds Support for Partition Key Metadata Field 2389
  • FIXED [AWS DynamoDB] Fixes Incorrect Implementation of the Partition Key Metadata Field 2426
  • ADDED [Apache Pulsar] Support for Apache Pulsar Schema Registry. 2450
  • CHANGED [Azure Event Hubs] upgrade SDK to “track 2” 2453
  • CHANGED [Azure Event Hubs] Update to use new Azure SDK for Go (“track 2”) 2101
  • FIXED [Azure Event Grid] Do not remove custom configuration options on subscriptions 2454
  • ADDED [All Azure components] Support PEM certificates from Azure AD 2462
  • FIXED [mDNS name resolver] shut down on context cancelation and not on OS signal, and other fixes 2477 2220
  • ADDED [Firestore State Store] Added noindex option to skip indexing of value 2479

Dapr CLI

  • ADDED Add fish shell completion 879
  • UPDATED Rename the run --components-path flag to a name for suitable for loading many resource types 953
  • ADDED Support the dapr runtime initialization in user provided directory 1056
  • FIXED: Use fully qualified names for container images 1090
  • ADDED Automate Publishing CLI to winget 1108
  • FIXED Update certificate fails with dapr installed with custom helm 1113
  • FIXED Failed to upgrade Dapr: release name is invalid: 1117
  • ADDED Missing flag –dapr-listen-addresses for dapr run CLI command 1119
  • ADDED --image-variant flag to mtls renew-certificate command 1125
  • FIXED self-hosted e2e tests on macOS-12 1130
  • FIXED GitHub API rate limiting 1133
  • FIXED Dapr run generates invalid app IDs 1136
  • ADDED Create a template for configuring multiple applications to be run with dapr run command 1141
  • ADDED Implement the new precedence rules for resources_dir for dapr run -f 1142
  • ADDED Add capability to run multiple apps from a given run configuration file 1143
  • ADDED dapr list --output json includes related Dapr Compose configuration file metadata 1153
  • FIXED Remove full stop from version string to match other subcommand help output 1163
  • ADDED support to dapr stop to handle applications spawned by dapr run -f 1165
  • FIXED dapr list --output json returns inconsistent JSON 1171
  • FIXED Error messaging in dashboard command. 1188
  • ADDEDdapr run track and dapr list display the PID of run commands 1191

.NET SDK

  • ADDED Add support for Bulk Subscribe 1009
  • ADDED Add support for Workflow Management 1003
  • ADDED Additional API coverage/support for Workflows 1012
  • ADDED Add support for Bulk Publish 958
  • ADDED Add support for ISO 8601 intervals 702
  • ADDED Add support for publishing raw messages(non cloud events) 718
  • ADDED Add support for Workflow Authoring 979
  • ADDED Add support for Bulk State APIs 785

Go SDK

Note: The Dapr Go SDK now requires Go 1.18 or higher.

  • ADDED Add wait() method to block until the Dapr sidecar is up 329
  • FIXED Return err as nil when replying with DROP status 349
  • ADDED Report SDK version in user-agent 328
  • FIXED Differentiating between actor state key not found vs. unexpected error 333
  • FIXED Removed some dependencies and fixed other bugs 346

Java SDK

  • ADDED Bulk publish and bulk subscribe implementation 778
  • DEPRECATED HTTP client in SDK 794 824
  • FIXED Add ElementType.TYPE to ActorType to enable it in Kotlin 797
  • ADDED Report SDK version in user-agent 810
  • UPDATED Update docs for configuration API 813
  • UPDATED Update springboot to latest minor.patch version. 826

Python SDK

  • ADDED Support for Python 3.11. Relaxes grpcio and protobuf requirements for wider compatibility 480
  • ADDED Additional Pubsub CloudEvent properties are now sent as CloudEvent extensions (gRPC) 405 524
  • FIXED PubSub topic used is not available in subscribing topic method (gRPC) 437
  • ADDED Adds default serializer option ensure_ascii = False for native Unicode representation 498
  • ADDED Support for deadLetterTopic in FastAPI/Flask and gRPC 518

Dashboard

  • ADDED Support for dashboard to list and stop apps started by dapr run -f . 243
  • FIXED Bug for viewing actor count information 239

Upgrading to Dapr 1.10

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

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

$ dapr --version
CLI version: 1.10
Runtime version: 1.10

Kubernetes

Upgrading from previous version

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

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

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

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

Alternatively, you can use the latest version of CLI:

dapr init --runtime-version=1.10 -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-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>

Breaking Changes

  • The Cron binding is now an input-only binding 2191
  • The Azure Event Grid binding now requires additional configuration to receive messages; see documentation

Deprecation Notices

  • Java SDK ihas deprecated HTTP client, gRPC client will be the only implementation supported - no change required for applications using the default client. 794 824
  • gRPC service invocation API is now deprecated, use gRPC proxy API instead 5324
  • Twitter Binding is now deprecated 2506
  • Hazelcast PubSub remains deprecated since 1.9 and will be removed in 1.11 2240
  • Dapr Dashboard will not be included in Dapr’s Helm chart in the next release as it will have its own chart.