
# Dapr 1.5.0

We're happy to announce the release of Dapr 1.5.0!

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

## Highlights

### Components upgraded to `Stable`

The Dapr Steering and Technical Committee (STC) [voted](https://github.com/dapr/community/issues/99) to change the components certification criteria and rename components from `GA` to `Stable`.

The following components are now upgraded to `Stable` indicating that they are suitable for use in production scenarios:
- [Kafka Pub/sub](https://v1-5.docs.dapr.io/reference/components-reference/supported-pubsub/) 
- [Azure KeyVault Secret store](https://v1-5.docs.dapr.io/reference/components-reference/supported-secret-stores/)
- [Azure SQL Server State store](https://v1-5.docs.dapr.io/reference/components-reference/supported-state-stores/)

In addition, multiple fixes have been made to other components including RabbitMQ pub/sub, MySQL state store, and PostgreSQL state store.

For more information see the [Dapr components reference](https://v1-5.docs.dapr.io/reference/components-reference/).

### Query API for state management

The state management building block API now includes a query API, currently in `Alpha` state.  This API provides a way of querying the key/value data stored in state store components. It is not a replacement for a complete query language, and is focused on retrieving, filtering and sorting key/value data that you have saved through the state store APIs.

Even though the state store is a key/value store, the value might be a JSON document with its own hierarchy, keys, and values. This query API allows you to use those keys and values to retrieve corresponding documents.

For more information read the [state management query API docs](https://v1-5.docs.dapr.io/developing-applications/building-blocks/state-management/howto-state-query-api/).

### Configuration API building block
Configuration is a new building block API introduced in this release and is currently in `Alpha` state.  Consuming application configuration is a common task when writing applications and frequently configuration stores are used to manage this configuration data. A configuration item is often dynamic in nature and is tightly coupled to the needs of the application that consumes it. The Configuration API provides an abstraction over different stores and exposes key/value data and importantly with the ability to subscribe to configuration item update notfications.

In this initial release this API can only be used over gRPC. HTTP will be made available before the final stable release (for example, `\v1.0\configuration\myconfigstore`).

For more information read the [configuration overview](https://v1-5.docs.dapr.io/developing-applications/building-blocks/configuration/app-configuration-overview/).


### Actors in the Go SDK
Virtual actors are now available in the Dapr Go SDK. See [go-sdk/21](https://github.com/dapr/go-sdk/issues/21) for details.

For a Dapr actor example using the Go SDK, see [go-sdk/examples/actor](https://github.com/dapr/go-sdk/tree/main/examples/actor).

### Actors reliability improvement
Enhancements to the actor runtime were released to improve reliability. See [dapr/1914](https://github.com/dapr/dapr/issues/1914) and [dapr/3533](https://github.com/dapr/dapr/issues/3533) for details. 

### Support for ARM64 Macs (Preview)

Dapr CLI, sidecar and Dashboard are now natively compiled for ARM64 Macs. Also, Dapr CLI installation via Homebrew was fixed. See the [Dapr CLI installation instructions](https://v1-5.docs.dapr.io/getting-started/install-dapr-cli/) for details.

### New components

New components added to this release include:
- [Azure CosmosDB Gremlin API Binding](https://v1-5.docs.dapr.io/reference/components-reference/supported-bindings/cosmosdbgremlinapi/)
- [Alibaba Cloud Tablestore Binding](https://v1-5.docs.dapr.io/reference/components-reference/supported-bindings/alicloudtablestore/)


### Next steps
If you're new to Dapr, visit the [getting started](https://docs.dapr.io/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](https://docs.dapr.io/concepts/) and the [Developing applications](https://docs.dapr.io/developing-applications/).



See [this](#upgrading-to-dapr-1.5.0) section on upgrading Dapr to version 1.5.0.

## Acknowledgements

Thanks to everyone who made this release possible!

@1046102779, @AaronCrawfis, @abhishek-galoda, @alvinhenrick, @amimimor, @anhldbk, @AnyISalIn, @apuzyrevsky, @artursouza, @beiwei30, @berndverst, @caogj, @CodeMonkeyLeet, @CrazyHZM, @cshi0, @cwdsuzhou, @daixiang0, @DarinShapiroMS, @Darquewarrior, @denis111, @dmitsh, @doddgu, @fjvela, @greenie-msft, @halspang, @hokandil, @huiyangz, @ItalyPaleAle, @jjcollinge, @Juneezee, @krutsko, @l0ll098, @LaurenceLiZhixin, @li1234yun, @marviniter, @mnussbaum, @msfussell, @mthmulders, @mukundansundar, @orizohar, @penghuima, @pkedy, @qmhu, @ravi-k4, @richgo, @swuecho, @Taction, @tanvigour, @theonefx, @tomkerkhove, @wcs1only, @willtsai, @wmeints, @workfigure, @XavierGeerinck, @yaron2


## New in this release

### Dapr Runtime
- **RESOLVED** Improve the reliability of partition table dissemination for actors [1914](https://github.com/dapr/dapr/issues/1914)
- **ADDED** Configuration API [2988](https://github.com/dapr/dapr/issues/2988)
- **FIXED** Http opa middleware crash [3216](https://github.com/dapr/dapr/issues/3216)
- **RESOLVED** Pass ReadBufferSize argument to fasthttp server and grpc server [3319](https://github.com/dapr/dapr/issues/3319)
- **ADDED** New parameters to add custom label at pod level [3435](https://github.com/dapr/dapr/issues/3435)
- **FIXED** Dapr runtime sends InputBinding events to undesignated locations [3472](https://github.com/dapr/dapr/issues/3472)
- **FIXED** Postgres support for actors [3533](https://github.com/dapr/dapr/issues/3533)
- **RESOLVED** Add tolerations support to Helm Chart values. [3534](https://github.com/dapr/dapr/issues/3534)
- **RESOLVED** Fixed typo in secret store init [3535](https://github.com/dapr/dapr/pull/3535)
- **RESOLVED** Operator: hide debug log [3543](https://github.com/dapr/dapr/pull/3543)
- **FIXED** Metadata headers not sent to server via dapr gRPC proxy [3561](https://github.com/dapr/dapr/issues/3561)
- **FIXED** Put 'kubernetes-admin' in allow list [3571](https://github.com/dapr/dapr/issues/3571)
- **ADDED** State Store Query API [3662](https://github.com/dapr/dapr/issues/3662)
- **RESOLVED** Retriable pubsub error should include the topic in the logging [3675](https://github.com/dapr/dapr/issues/3675)
- **RESOLVED** Make release notes script list authors while ignoring case [3684](https://github.com/dapr/dapr/pull/3684)
- **RESOLVED** Support for PATCH request in service invocation [3696](https://github.com/dapr/dapr/issues/3696)
- **RESOLVED** Create unit test for admission control [3708](https://github.com/dapr/dapr/issues/3708)
- **FIXED** Fixed panic sending on a nil gRPC stream in the placement heartbeat loop [3727](https://github.com/dapr/dapr/issues/3727)
- **ADDED** Support to override sidecar image per app in K8s via `dapr.io/sidecar-image` [3745](https://github.com/dapr/dapr/issues/3745)
- **FIXED** Resource leak for grpc server connection [3752](https://github.com/dapr/dapr/pull/3752)
- **FIXED** Crash backoff in dapr operator after upgrade to 1.4.3 (helm doesn't upgrade CRDs definitions) [3756](https://github.com/dapr/dapr/issues/3756)
- **FIXED** gRPC inbound request metrics is empty [3768](https://github.com/dapr/dapr/pull/3768)
- **RESOLVED** Default W3CString should not be passed down [3769](https://github.com/dapr/dapr/issues/3769)
- **RESOLVED** Automatically set GOMAXPROCS to match Linux container CPU quota [3781](https://github.com/dapr/dapr/pull/3781)
- **RESOLVED** Change API version of PodDisruptionBudget to policy/v1 when supported [3799](https://github.com/dapr/dapr/pull/3799)
- **FIXED** Binding event panic [3804](https://github.com/dapr/dapr/pull/3804)
- **ADDED** Support for Kafka version setting in Pubsub [3806](https://github.com/dapr/dapr/issues/3806)
- **RESOLVED** Cleanly shutdown HTTP and gRPC servers when Dapr is shutdown [3810](https://github.com/dapr/dapr/issues/3810)
- **ADDED** azure.cosmosdb.gremlinapi binding [3851](https://github.com/dapr/dapr/pull/3851)
### Dapr CLI
- **ADDED** Support for unix domain socket [788](https://github.com/dapr/cli/pull/788)
- **FIXED** use input param namespace when listing Pods [798](https://github.com/dapr/cli/pull/798)
- **RESOLVED** Allow specifying of runtime-version via Env Var for `dapr init` [806](https://github.com/dapr/cli/pull/806)
### Components
- **RESOLVED** Certify Azure SQL Server as stable in state store [949](https://github.com/dapr/components-contrib/issues/949)
- **RESOLVED** Certify Apache Kafka as stable in pubsub [953](https://github.com/dapr/components-contrib/issues/953) [1241](https://github.com/dapr/components-contrib/pull/1241)
- **RESOLVED** Certify Azure Key Vault w/ Managed Identity as stable in secret store [959](https://github.com/dapr/components-contrib/issues/959)
- **ADDED** User agent header for Azure services [1014](https://github.com/dapr/components-contrib/issues/1014)
- **ADDED** Azure Service Bus message metadata for Pubsub [1071](https://github.com/dapr/components-contrib/pull/1071)
- **ADDED** Delay queue params for Pulsar [1107](https://github.com/dapr/components-contrib/pull/1107)
- **FIXED** Postgres state store and add it to conformance tests [1117](https://github.com/dapr/components-contrib/issues/1117)
- **ADDED** Mysql conformance test [1122](https://github.com/dapr/components-contrib/issues/1122) [1168](https://github.com/dapr/components-contrib/issues/1168)
- **ADDED** Enhancements to CREATE operation GCP Storage Bucket binding + adds GET, DELETE and LIST [1125](https://github.com/dapr/components-contrib/issues/1125)
- **FIXED** Azure Storage Queue resolving extra double quotation [1130](https://github.com/dapr/components-contrib/issues/1130)
- **RESOLVED** Update Azure Service Bus Go SDK to latest [1141](https://github.com/dapr/components-contrib/issues/1141)
- **RESOLVED** RabbitMQ binding uses text/plain as content type [1144](https://github.com/dapr/components-contrib/issues/1144)
- **RESOLVED** Pass the message body in OPA middleware [1166](https://github.com/dapr/components-contrib/issues/1166)
- **FIXED** RabbitMQ pubsub ignores 'durable' metadata [1181](https://github.com/dapr/components-contrib/issues/1181)
- **FIXED** RabbitMQ pubsub does not handle channel closing properly [1187](https://github.com/dapr/components-contrib/issues/1187)
- **FIXED** TLS with Kafka pubsub component [1188](https://github.com/dapr/components-contrib/issues/1188)
- **UPDATED** paho.mqtt.golang to v1.3.5 [1192](https://github.com/dapr/components-contrib/pull/1192)
- **RESOLVED** binding/mysql: optimize output error [1195](https://github.com/dapr/components-contrib/pull/1195)
- **RESOLVED** Reconnect RabbitMQ on 'unexpected command received' error [1198](https://github.com/dapr/components-contrib/pull/1198)
- **RESOLVED** add metadata to query request/response [1215](https://github.com/dapr/components-contrib/pull/1215)
- **ADDED** Support message-id property from IoTHub device events in EventHubs [1221](https://github.com/dapr/components-contrib/pull/1221)
- **RESOLVED** restrict sns/sqs pubsub subscription permissions [1230](https://github.com/dapr/components-contrib/issues/1230)
- **FIXED** MQTT bindings can hang on Close() [1235](https://github.com/dapr/components-contrib/issues/1235)
- **RESOLVED** Body of email empty in SMTP binding when invoking the binding over gRPC [1253](https://github.com/dapr/components-contrib/issues/1253)
- **FIXED** Body content parsing for SMTP binding [1254](https://github.com/dapr/components-contrib/pull/1254)
- **ADDED** Warning generated by SMTP binding when username and password are both set. [1255](https://github.com/dapr/components-contrib/issues/1255)
- **ADDEDED**  Option to override Kafka Broker version [1275](https://github.com/dapr/components-contrib/pull/1275)
- **RESOLVED** Renamed package for CosmosDB.GramlinAPI binding component [1276](https://github.com/dapr/components-contrib/pull/1276)
### Dashboard
- **ADDED** Configurable base URL [128](https://github.com/dapr/dashboard/issues/128)
- **RESOLVED** Generate binaries for Darwin ARM64 (including M1 Macs) [174](https://github.com/dapr/dashboard/issues/174)
### .NET SDK
- **RESOLVED** Support .net 6 preview 4 new Minimal APIs [695](https://github.com/dapr/dotnet-sdk/issues/695)
- **RESOLVED** Response.BodyWriter on Net6.0  Required Call  CompleteAsync()? [704](https://github.com/dapr/dotnet-sdk/issues/704)
- **RESOLVED** Report error correctly for missing route key on [FromState] [706](https://github.com/dapr/dotnet-sdk/issues/706)
- **ADDED** Support for gRPC proxying [741](https://github.com/dapr/dotnet-sdk/issues/741)
- **RESOLVED** StateManager request don't have dapr-api-token header. [767](https://github.com/dapr/dotnet-sdk/issues/767)
- **RESOLVED** Allow multiple topics to call the same endpoint [715](https://github.com/dapr/dotnet-sdk/issues/715)
- **RESOLVED** IIS Express Problem - app returned http status code 400 from subscription endpoint [743](https://github.com/dapr/dotnet-sdk/issues/743)
- **FIXED** Falsely logged default subscription message [760](https://github.com/dapr/dotnet-sdk/issues/760)
### Go SDK
- **ADDED** Actor support [21](https://github.com/dapr/go-sdk/issues/21)
- **RESOLVED** Add metadata support for PublishEvent API [164](https://github.com/dapr/go-sdk/issues/164)
- **RESOLVED** Rationalize PublishEvent* APIs [174](https://github.com/dapr/go-sdk/issues/174)
- **RESOLVED** By default, gRPC limits incoming messages to 4 MB and expose parameter to allow user to set the limit [189](https://github.com/dapr/go-sdk/issues/189)
- **RESOLVED** Decode data_base64 cloudEvent for http service [201](https://github.com/dapr/go-sdk/pull/201)
- **FIXED** HTTP service stop method doesn't do anything [208](https://github.com/dapr/go-sdk/issues/208)
- **RESOLVED** Dapr client doesn't report failure when instantiated without a daprd connection [212](https://github.com/dapr/go-sdk/issues/212)
- **RESOLVED** Make client init fail if server connection fails [213](https://github.com/dapr/go-sdk/pull/213)
### Python SDK
- **RESOLVED** Data argument not sent to output binding when calling `DaprClient.invoke_binding` [274](https://github.com/dapr/python-sdk/issues/274)
- **RESOLVED** DaprJSONEncoder bug [283](https://github.com/dapr/python-sdk/issues/283)

## Upgrading to Dapr 1.5.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 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:

```bash
dapr uninstall --all
```

For RC releases like this, download the latest and greatest release from [here](https://github.com/dapr/cli/releases) and put the `dapr` binary in your PATH.

Once you have installed the CLI, run:

```bash
dapr init --runtime-version=1.5.0
```

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

```bash
$ dapr --version

CLI version: 1.5.0
Runtime version: 1.5.0
```

### 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](https://github.com/dapr/cli/releases) and put the `dapr` binary in your PATH.

To upgrade Dapr, run:

```
dapr upgrade --runtime-version 1.5.0 -k
```

To upgrade with high availability mode:

```
dapr upgrade --runtime-version 1.5.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*

##### 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.5.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*

#### Starting a fresh install on a cluster

See [how to deploy Dapr on a Kubernetes cluster](https://docs.dapr.io/operations/hosting/kubernetes/kubernetes-deploy/) 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.5.0 --namespace dapr-system --wait
```

Alternatively, you can use the latest version of CLI:

```
dapr init --runtime-version=1.5.0 -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.9.0    15s  2021-11-09 13:07.39
  dapr-sidecar-injector  dapr-system  True     Running  1         1.5.0   15s  2021-11-09 13:07.39
  dapr-sentry            dapr-system  True     Running  1         1.5.0   15s  2021-11-09 13:07.39
  dapr-operator          dapr-system  True     Running  1         1.5.0   15s  2021-11-09 13:07.39
  dapr-placement         dapr-system  True     Running  1         1.5.0   15s  2021-11-09 13:07.39
```

After Dapr 1.5.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>
```

## Breaking Changes

None.
