
# Dapr 1.3.0

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

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

**Highlights**

If you’re new to Dapr, familiarize yourself by visiting the [getting started](https://docs.dapr.io/getting-started/) page.

- **Service Invocation**
    - Added **gRPC proxying to enable bring-your-own-proto [(preview feature)](https://docs.dapr.io/operations/support/support-preview-features.md)** [#323](https://github.com/dapr/dapr/issues/3231). Use your existing proto based gRPC services and have the traffic go through the Dapr sidecar. This enables Dapr applications to use the benefits of Service Invocation, including security, retries and ACLs to these gRPC services. See our [How-To: Invoke services using gRPC](https://docs.dapr.io/developing-applications/building-blocks/service-invocation/howto-invoke-services-grpc/) documentation for further details. 
- **Actors**
    - **Actor reminders and triggers now support ISO 8601 intervals** [#2513](https://github.com/dapr/dapr/issues/2513). Read more [here](https://docs.dapr.io/developing-applications/building-blocks/actors/howto-actors.md)
    - Added **actor reentrancy support in .NET, PHP and Python SDKs [(preview feature)](https://docs.dapr.io/operations/support/support-preview-features.md)** . Actor reentrancy remains a [preview feature](https://docs.dapr.io/operations/support/support-preview-features.md) in this release. Note that Java and PHP SDKs will support actor reentrancy in the next release.
    - Added **configuration for actor reentrancy [(preview feature)](https://docs.dapr.io/operations/support/support-preview-features.md)** [#3049](https://github.com/dapr/dapr/issues/3049). Actor reentrancy has several configuration values that must be understood by the runtime/actors. The configuration is provided to the runtime during the call to dapr/config
    - Support for **actor reminder storage partitioning [(preview feature)](https://docs.dapr.io/operations/support/support-preview-features.md)** [#2889](https://github.com/dapr/dapr/issues/2889). Applications can now enable partitioning of actor reminders in the state store across multiple keys for improved scale and performance. For more information on actor reminder storage partitioning, visit [Dapr's Actors Documentation]()
- **State Management**
    - Added **support for TTL (time to live) to a subset of state store components** [#306](https://github.com/dapr/components-contrib/issues/306). Applications can set time-to-live per state stored, and these states cannot be retrieved after expiration (the state is deleted) [Supported state store components that support TTL](https://docs.dapr.io/reference/components-reference/supported-state-stores/) are: Cassandra, Memcache, Redis, CosmosDB. Read more about [state TTL](https://docs.dapr.io/developing-applications/building-blocks/state-management/state-store-ttl/)
- **New components**
    - [**GraphQL binding**](https://docs.dapr.io/reference/components-reference/supported-bindings/graghql/) 
    - [**AWS SSM Parameter Store**](https://docs.dapr.io/reference/components-reference/supported-secret-stores/aws-parameter-store/) 
- **Setup VS Code development in a containerized environment and use this in GitHub Codespaces for contributing to dapr project** [#3229](https://github.com/dapr/dapr/issues/3229). Read more [here](https://github.com/dapr/dapr/blob/master/docs/development/setup-dapr-development-using-vscode.md)

> **Note: This release contains [breaking changes](#breaking-changes).**

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

## Acknowledgements

Thanks to everyone who made this release possible!

@1046102779, @AaronCrawfis, @akkie, @alvinhenrick, @amirmm11, @anhldbk, @artursouza, @Banchio, @beiwei30, @berndverst, @bjorkstromm, @caogj, @CodeMonkeyLeet, @CodingSinger, @daixiang0, @DanAbara, @DarqueWarrior, @delvh, @dmitsh, @emattiza, @eNeRGy164, @fabistb, @gogi2811, @greenie-msft, @halspang, @iamazy, @ItalyPaleAle, @jasonviviano, @jcdickinson, @jigargandhi, @Junnplus, @luckyxiaoqiang, @luiscantero, @marviniter, @msfussell, @mukundansundar, @orizohar, @pinxiong, @pkedy, @puzpuzpuz, @rovangju, @seeflood, @skyao, @stulzq, @Taction, @tanvigour, @tianjipeng, @tomkerkhove, @wcs1only, @withinboredom, @yaron2

## New in this release

### Dapr Runtime
- **RESOLVED** Have Actor reminder and triggers support ISO 8601 intervals standard format [2513](https://github.com/dapr/dapr/issues/2513)
- **RESOLVED** Improve developer documentation for Windows [2529](https://github.com/dapr/dapr/issues/2529)
- **ADDED** Custom component definition of Kubernetes secret store [2821](https://github.com/dapr/dapr/issues/2821)
- **RESOLVED** Support partitioned storage of actor reminders as experimental feature [2889](https://github.com/dapr/dapr/issues/2889)
- **FIXED** Data race and concurrency problems of actor placement. [2961](https://github.com/dapr/dapr/issues/2961)
- **ADDED** Log warning for missing app port when pub/sub subscription is loaded. [2979](https://github.com/dapr/dapr/issues/2979)
- **FIXED** Race condition between placement service table dissemination and actor removal [3023](https://github.com/dapr/dapr/issues/3023)
- **ADDED** Configuration for actor reentrancy [3049](https://github.com/dapr/dapr/issues/3049)
- **RESOLVED** Crash in daprd sidecar when multiple invocation requests are made without the server running [3128](https://github.com/dapr/dapr/issues/3128)
- **ADDED** Use pod anti-affinity for spreading across node for high-availability [3147](https://github.com/dapr/dapr/issues/3147)
- **ADDED** Use Pod Disruption Budget to ensure Dapr remains up [3148](https://github.com/dapr/dapr/issues/3148)
- **RESOLVED** Injector customize cluster domain of k8s when access some system service [3163](https://github.com/dapr/dapr/issues/3163)
- **RESOLVED** GetState API to return metadata in HTTP [3172](https://github.com/dapr/dapr/issues/3172)
- **RESOLVED** Exit runtime on connection error during component update loop  [3175](https://github.com/dapr/dapr/issues/3175)
- **RESOLVED** Use separate custom image for injector service in dapr_sidecar_injector chart [3192](https://github.com/dapr/dapr/issues/3192)
- **RESOLVED** Add support for metadata in pub/sub subscription CRD [3225](https://github.com/dapr/dapr/issues/3225)
- **ADDED** Support GitHub Codespaces for contributing to dapr project [3229](https://github.com/dapr/dapr/issues/3229)
- **RESOLVED** Call existing gRPC methods and bring your own gRPC protos - renewed gRPC experience.  [3231](https://github.com/dapr/dapr/issues/3231)
- **ADDED** PKCS8 support [3240](https://github.com/dapr/dapr/issues/3240)
- **FIXED** Go Panic on Actors usage (Redis) with PubSub (Redis) on Start [3258](https://github.com/dapr/dapr/issues/3258)
- **RESOLVED** Apply max request body to gRPC channel [3265](https://github.com/dapr/dapr/issues/3265)
- **FIXED** sendToOutputBinding incorrect make slice [3270](https://github.com/dapr/dapr/pull/3270)
- **RESOLVED** use dapr.io/enable-debug: "true" to debug dapr failed [3287](https://github.com/dapr/dapr/issues/3287)
- **FIXED** Race condition in grpc/api.go for state API [3323](https://github.com/dapr/dapr/issues/3323)
- **RESOLVED** InvokeBinding API now returns metadata in HTTP [3326](https://github.com/dapr/dapr/issues/3326)
- **ADDED** Git commit hash to STDOUT with new flag `--buildinfo` [3341](https://github.com/dapr/dapr/issues/3341)
- **FIXED** unblockPlacements concurrent calls will raise panic bug [3364](https://github.com/dapr/dapr/issues/3364)
- **ADDED** Support for aws parameter store [3369](https://github.com/dapr/dapr/pull/3369)
- **FIXED** operator component crd resouces update all dapr runtime [3375](https://github.com/dapr/dapr/pull/3375)
- **ADDED** GraphQL Binding (components-contrib#844) [3394](https://github.com/dapr/dapr/pull/3394)
### Dapr CLI
- **RESOLVED** Make install script work with non-privilege's environments like Azure Cloud Shell  [580](https://github.com/dapr/cli/issues/580)
- **ADDED** `dapr buildinfo` command to print commit id and other info [599](https://github.com/dapr/cli/issues/599)
- **ADDED** `dapr uninstall -k --all` which also removes CRDs [656](https://github.com/dapr/cli/issues/656)
- **FIXED** Added fallback version check for `dapr init` if Github API is unavailable [677](https://github.com/dapr/cli/issues/677)
- **ADDED** `dapr run --placement-host-address` now supports specifying TCP port [705](https://github.com/dapr/cli/issues/705)
- **RESOLVED** JSON/YAML output format for `dapr list` [728](https://github.com/dapr/cli/issues/728)
- **RESOLVED** Dapr List Displays Dapr Dashboards As Empty Services [736](https://github.com/dapr/cli/issues/736)
- **FIXED** The `--enable-profiling` and `--app-ssl` parameters not being properly passed to `daprd`[768](https://github.com/dapr/cli/pull/768)
### Components
- **RESOLVED** Event-Hub input binding should propagate event meta-data [227](https://github.com/dapr/components-contrib/issues/227)
- **RESOLVED** Add optional support for TTL (Time to Live) for state stores [306](https://github.com/dapr/components-contrib/issues/306)
    - *Currently supported components: Cassandra, Memcache, Redis, CosmosDB. See [this table](https://v1-3.docs.dapr.io/reference/components-reference/supported-state-stores/).*
- **RESOLVED** AWS Managed Cassandra State : not working [691](https://github.com/dapr/components-contrib/issues/691)
- **RESOLVED** Azure Storage - getBlobRetryCount [758](https://github.com/dapr/components-contrib/issues/758)
- **RESOLVED** Move The common Redis code to internal [857](https://github.com/dapr/components-contrib/issues/857)
- **RESOLVED** Add backoff for rabbitmq PubSub component [861](https://github.com/dapr/components-contrib/issues/861)
- **RESOLVED** Rabbitmq component goroutine not exit after close [863](https://github.com/dapr/components-contrib/issues/863)
- **RESOLVED** Update Zeebe to version 1.0 [875](https://github.com/dapr/components-contrib/issues/875)
- **RESOLVED** Move retry and config packages to dapr/kit for reuse [893](https://github.com/dapr/components-contrib/issues/893)
- **RESOLVED** Binding to GraphQL [902](https://github.com/dapr/components-contrib/issues/902)
- **RESOLVED** Dapr Mongo State Store component does not support srv record format [904](https://github.com/dapr/components-contrib/issues/904)
- **RESOLVED** Mysql should support more data types. [923](https://github.com/dapr/components-contrib/issues/923)
- **RESOLVED** Hashicorp Vault - using BulkGetSecret (through asp.net core) always return 404 Not Found [925](https://github.com/dapr/components-contrib/issues/925)
- **ADDED** ConsumerId parameter can also be referred as ConsumerGroup for Kafka [928](https://github.com/dapr/components-contrib/issues/928)
- **ADDED** Support Codespaces and VSCode devcontainers in Components-Contrib repo [935](https://github.com/dapr/components-contrib/issues/935)
- **FIXED** Panic when handle Pub/Sub with missing CloudEvent attributes (dapr#3281) [967](https://github.com/dapr/components-contrib/pull/967)
- **RESOLVED** Fix reported 3rd party vulnerabilities [979](https://github.com/dapr/components-contrib/issues/979)
### .NET SDK
- **ADDED** Support for actor reentrancy [661](https://github.com/dapr/dotnet-sdk/issues/661)
- **RESOLVED** Add support to provide Pubsub (and Topic) during runtime at startup for controller methods. [678](https://github.com/dapr/dotnet-sdk/issues/678)
- **RESOLVED** Adds support for providing pubsub and topic names during runtime. [681](https://github.com/dapr/dotnet-sdk/pull/681)
- **RESOLVED** Improve Actor error messages [684](https://github.com/dapr/dotnet-sdk/pull/684)
- **RESOLVED** fix: InvalidProgramException under ASP.Net 6.0 [711](https://github.com/dapr/dotnet-sdk/pull/711)
- **RESOLVED** Configurable actor reminder storage partitions [712](https://github.com/dapr/dotnet-sdk/pull/712)
- **RESOLVED** GrpcServiceSample: No message returned from method [719](https://github.com/dapr/dotnet-sdk/issues/719)
### Go SDK
- **RESOLVED** Introduce golangci-lint [168](https://github.com/dapr/go-sdk/issues/168)
- **RESOLVED** Invoke: gRPC errors are wrapped multiple times - cannot get the status code [186](https://github.com/dapr/go-sdk/issues/186)
- **RESOLVED** Expose GRPCClient.protoClient [188](https://github.com/dapr/go-sdk/issues/188)
- **RESOLVED** cleanup temp binary file [193](https://github.com/dapr/go-sdk/issues/193)
### Java SDK
- **RESOLVED** Update Spring Boot DaprBeanPostProcessor to evaluate expressions Topic attribute values [554](https://github.com/dapr/java-sdk/issues/554)
- **FIXED** Actor gRPC client to be non-blocking [562](https://github.com/dapr/java-sdk/issues/562)
- **RESOLVED** Update GRPC libraries for security updates [573](https://github.com/dapr/java-sdk/pull/573)
- **ADDED** Support for configuring actor reminder storage partitions [574](https://github.com/dapr/java-sdk/pull/574)
### Python SDK
- **ADDED** Support for actor reentrancy [214](https://github.com/dapr/python-sdk/issues/214)
- **RESOLVED** Configurable actor reminder storage patitions [236](https://github.com/dapr/python-sdk/pull/236)
- **ADDED** Implement State Isolation for Reentrant Actor Calls [237](https://github.com/dapr/python-sdk/issues/237)
### PHP SDK
- **ADDED** Dapr API token support [81](https://github.com/dapr/php-sdk/issues/81)
- **RESOLVED** Add Laravel example [84](https://github.com/dapr/php-sdk/pull/84)
- **ADDED** Support for actor reentrancy [85](https://github.com/dapr/php-sdk/issues/85)
- **RESOLVED** A whole new client [93](https://github.com/dapr/php-sdk/pull/93)
- **ADDED** native DateInterval support [95](https://github.com/dapr/php-sdk/issues/95)
- **RESOLVED** Support Reminder Storage Partitions Actor Runtime Config [97](https://github.com/dapr/php-sdk/issues/97)
### Documentation
- **RESOLVED** Add deployment and upgrade guidelines for self-hosted mode [760](https://github.com/dapr/docs/issues/760)
- **RESOLVED** [CONTENT] Incorrect curl syntax in Actors API examples [1365](https://github.com/dapr/docs/issues/1365)
- **RESOLVED** Enabling HA for existing Dapr installations on Kubernetes [1476](https://github.com/dapr/docs/issues/1476)
- **RESOLVED** [CONTENT] Actor sections should mention that only a single state store can be used for actor state [1525](https://github.com/dapr/docs/issues/1525)
- **RESOLVED** VS Code Dapr Extension Documentation Update [1533](https://github.com/dapr/docs/issues/1533)
- **RESOLVED** GCP Pub/Sub Binding required fields [1534](https://github.com/dapr/docs/issues/1534)
- **RESOLVED** gRPC service extension examples won't run [1542](https://github.com/dapr/docs/issues/1542)
- **RESOLVED** Secrets getting started guide should clarify path to file [1544](https://github.com/dapr/docs/issues/1544)
- **RESOLVED** Add gRPC proxy section [1548](https://github.com/dapr/docs/issues/1548)
- **RESOLVED** Building blocks articles do not link to the SDK topic for that building block [1549](https://github.com/dapr/docs/issues/1549)
- **RESOLVED** Add automation to create PR for submodule updates [1562](https://github.com/dapr/docs/issues/1562)
- **RESOLVED** metadata missing consumerGroup [1575](https://github.com/dapr/docs/issues/1575)
- **RESOLVED** Need topic that list all the **preview features** and when they were introduced [1592](https://github.com/dapr/docs/issues/1592)
- **RESOLVED** Actors reminder and triggers support ISO 8601 intervals standard format [1600](https://github.com/dapr/docs/issues/1600)
- **RESOLVED** Update info about supported Kubernetes versions [1603](https://github.com/dapr/docs/pull/1603)
- **RESOLVED** Document kubernetes secret store [1622](https://github.com/dapr/docs/pull/1622)
- **RESOLVED** Document how to use partitioning for actor reminders storage [1648](https://github.com/dapr/docs/issues/1648)
- **RESOLVED** updated Actor How To docs for reminder intervals [1651](https://github.com/dapr/docs/pull/1651)
- **RESOLVED** Document actor reminder partitioning [1658](https://github.com/dapr/docs/pull/1658)
- **RESOLVED** Add gRPC proxying content [1671](https://github.com/dapr/docs/issues/1671)
- **RESOLVED** Added a How-To section for VSCode debugging [1673](https://github.com/dapr/docs/pull/1673)
- **RESOLVED** Fix profiling flag example [1675](https://github.com/dapr/docs/pull/1675)
- **RESOLVED** Add a list of all current preview features [1678](https://github.com/dapr/docs/pull/1678)
- **RESOLVED** Update the list of supported Dapr versions for v1.3  [1684](https://github.com/dapr/docs/issues/1684)

## Upgrading to Dapr 1.3.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.3.0
```

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

```bash
$ dapr --version

CLI version: 1.3.0
Runtime version: 1.3.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.3.0 -k
```

To upgrade with high availability mode:

```
dapr upgrade --runtime-version 1.3.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.3.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

Please 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.3.0 --namespace dapr-system --wait
```

Alternatively, you can use the latest version of CLI:

```
dapr init --runtime-version=1.3.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.7.0    15s  2021-07-26 13:07.39
  dapr-sidecar-injector  dapr-system  True     Running  1         1.3.0   15s  2021-07-26 13:07.39
  dapr-sentry            dapr-system  True     Running  1         1.3.0   15s  2021-07-26 13:07.39
  dapr-operator          dapr-system  True     Running  1         1.3.0   15s  2021-07-26 13:07.39
  dapr-placement         dapr-system  True     Running  1         1.3.0   15s  2021-07-26 13:07.39
```

After Dapr 1.3.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

### Components
- **RESOLVED** Update Zeebe to version 1.0 [875](https://github.com/dapr/components-contrib/issues/875)
