docs/release_notes/v1.14.0.md
We're excited to announce the release of Dapr 1.14!
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.14.
These are the new feature highlights for the v1.14 release:
Many applications require job scheduling, or the need to take an action in the future. The new jobs API is an orchestrator for scheduling these future jobs, either at a specific time or for a specific interval. For example job scheduling is useful in scenarios such as automated database backups, regular Data Processing and ETL, email notifications, maintenance tasks and system updates and batch processing to name a few.
The Dapr’s Jobs API ensures the tasks represented in these types of scenarios are performed consistently and reliably, improving efficiency and reducing the risk of errors. Think of this as a scalable version of the popular Dapr Cron Binding, now as a first class API available via the Dapr SDKs.
You can read more in the Jobs API overview documentation, or dive into a Quickstart Go code example. Support for Jobs is also in the alpha Rust-SDK!
The Scheduler service is a new control plane service used to schedule jobs, running in self-hosted mode or on Kubernetes. It is installed by when using Helm or the Dapr CLI and is the service responsible for managing the scheduled jobs.
The new Scheduler service can optionally be used as the backend for actor reminders and enables increased throughput and lower latency for both actors and workflows. To use the scheduler service for actors and workflows, simply enable it in a Dapr Configuration resource like this:
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: featureconfig
spec:
features:
- name: SchedulerReminders
enabled: true
Important note: Existing reminder data is not be compatible with the scheduler service. The scheduler service should be used only for new actor and workflow reminders
Streaming subscriptions are a new type of subscription written in code. Streaming subscriptions are dynamic, meaning they allow for adding or removing subscriptions at runtime. They do not require a subscription HTTP endpoint in your application (which is required by the current programmatic and declarative subscriptions), making them easy to configure in code. Streaming subscriptions also do not require an app to be configured with the sidecar to receive messages. These are an incredibly easy way to configure topic subscriptions for your app. In this release streaming subscriptions are available in the Go SDK.
Namespacing in Dapr provides isolation, and thus multi-tenancy. With actor namespacing, the same actor type can be deployed into different namespaces. You can then call instances of these actors within the same namespace. Each namespaced actor deployment must use its own separate state store, especially if the same actor type is deployed into different namespaces.
When invoking Dapr using HTTP, metrics are created for each requested method by default. For example metrics include error rates, latency and throughput numbers. This can result in a high number of metrics being reported, known as high cardinality, which can impact memory usage and CPU for your application.
HTTP metric path matching allows you to manage and control the cardinality, or the amount, of HTTP metrics in Dapr. This is an aggregation of metrics, so rather than having a metric for each event, you can reduce the number of metrics events and report an overall number.
The transactional outbox feature allows you to commit state and then send a message in a single transaction and can be used with a broad combination of pub/sub brokers and databases. The transactional outbox is now stable in v1.14 release.
Now in this release, when using the outbox pattern, you can send a different payload to the pub/sub broker than the one saved in the database. These are called outbox message projections, and can be shaped in any way you need.
The ability to invoke non-Dapr endpoints using the Dapr Service invocation APIis now stable.
Although not part of the Dapr runtime v1.14 release, Dapr Shared provides alternative deployment choices for Dapr.
Dapr, by default, is injected as a sidecar to enable the Dapr APIs for your applications for the best availability and reliability. Dapr Shared enables two alternative deployment strategies to create Dapr applications using a Kubernetes Daemonset for a per-node deployment or a Deployment for a per-cluster deployment.
For example, Dapr Shared can be used to reduce resource usage in a cluster or to make a simpler testing deployment environment.
Thanks to everyone who made this release possible!
@aharonYK, @akshaya-a, @amardeep2006, @andrejpk, @andriisoldatenko, @AnnuCode, @antoniomaria, @agoktugaydin, @alundiak, @andrew-hillier, @antontroshin, @artur-ciocanu, @artursouza, @avoidalone, @berndverst, @bibryam, @bhagya05, @bkc, @bondz, @c-thiel, @cgillum, @cicoyle, @ckcd, @cmendible, @contributor, @daixiang0, @DeepanshuA, @denisbchrsk, @DropSnorz, @ductnn, @dwhiteddsoft, @ecabrerar, @Eileen-Yu, @elena-kolevska, @erwinkramer, @evacchi, @evhen14, @fabistb, @famarting, @james-bartlett, @filintod, @guspan-tanadi, @gralin, @hhunter-ms, @ibandhiya, @imneov, @ItalyPaleAle, @jake-engelberg, @jcchavezs, @jjcollinge, @jmprusi, @joebowbeer, @JoshVanL, @Jossec101, @kaibocai, @KrylixZA, @KentHsu, @kindknow, @ksachdeva, @laurentkempe, @m3nax, @mahparaashley, @marcoscale98, @manojks1999, @MattCosturos, @MichaelHindley, @mikeee, @MO2k4, @mohitpalsingh, @moonorange, @msfussell, @mukundansundar, @nadavv169, @nathandl86, @nelson-parente, @nenikola, @newbe36524, @nikitasarawgi, @olitomlinson, @passuied, @paulyuk, @pdebruin, @philliphoff, @pravinpushkar, @RafaelJCamara, @robertojrojas, @rochabr, @ruokun-niu, @Rutam21, @RyanLettieri, @sadath-12, @salaboy, @svdspradeep, @SantoDE, @shivam-51, @shivamkm07, @shubham1172, @Shubhdeep02, @sicoyle, @Taction, @thewilli, @thompson-tomo, @ThomasVitale, @tmacam, @toneill818, @TomasEkeli, @tlund101, @umerkle, @waltercoan, @wardbeyens, @WhitWaldo, @willtsai, @XavierGeerinck, @yaron2, @zedgell
dapr CLI 1032dapr status -k command does not show the scheduler service. 1433autodeleteonidlesec minimum of 300 3340pubsub.solace.amqp 3451dapr-ext-grpc 722To 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 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.14
Wait for the update to finish, ensure you are using the latest version of Dapr(1.14) with:
$ dapr --version
CLI version: 1.14
Runtime version: 1.14
You can perform zero-downtime upgrades using both Helm 3 and the Dapr CLI.
We've got some handy install scripts available: https://docs.dapr.io/getting-started/install-dapr-cli/ making sure to specify 1.14.0 as the CLI version.
Alternatively - download the latest release from here and put the dapr binary in your PATH.
To upgrade Dapr, run:
dapr upgrade --runtime-version 1.14 -k
To upgrade with high availability mode:
dapr upgrade --runtime-version 1.14 --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.14 --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 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.14 --namespace dapr-system --wait
Alternatively, you can use the latest version of CLI:
dapr init --runtime-version=1.14 -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.14 15s 2024-07-23 13:07.39
dapr-sentry dapr-system True Running 1 1.14 15s 2024-07-23 13:07.39
dapr-operator dapr-system True Running 1 1.14 15s 2024-07-23 13:07.39
dapr-placement dapr-system True Running 1 1.14 15s 2024-07-23 13:07.39
dapr-scheduler dapr-system True Running 1 1.14 15s 2024-07-23 13:07.39
After Dapr 1.14 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>
Actors are now namespaced, meaning that cross-namespace actor invocation is no longer supported. You must ensure that all actor invocations occur within the same namespace.
None.