
# Dapr 1.0.0-rc.3

We're happy to announce the release of Dapr 1.0.0-rc.3!

We would like to extend our [thanks to all](#Acknowledgements) new and existing contributors who helped make this release happen.

This is a release candidate version as we progress towards Dapr v1.0.0. We appreciate you trying Dapr and providing feedback on this release.

See [this](#upgrading-to-dapr-100-rc3) section on upgrading Dapr to version 1.0.0-rc.3.

## Highlights ##

* Pub/Sub [per message time-to-live](https://v1-rc3.docs.dapr.io/developing-applications/building-blocks/pubsub/pubsub-message-ttl/)
Dapr enables per-message time-to-live (TTL) for all pub/sub components. Applications can set time-to-live per message, and subscribers will not receive those messages after expiration.
* [Sidecar to app authentication](https://v1-rc3.docs.dapr.io/operations/security/app-api-token/)
* [MySQL output binding](https://v1-rc3.docs.dapr.io/operations/components/setup-bindings/supported-bindings/mysql/)
* [MySQL state store](https://v1-rc3.docs.dapr.io/operations/components/setup-state-store/supported-state-stores/setup-mysql/)
* Component metadata's random value via `{uuid}` marker
* [Upgrade CLI command to upgrade the Dapr control plane](https://github.com/dapr/cli#upgrade-dapr-on-kubernetes)
* Runs as non-root by defaut on Kubernetes
* Numerous improvements to the [Dapr Dashboard](https://github.com/dapr/dashboard)
* Added [dapr-distributed-calendar sample](https://github.com/dapr/samples/tree/master/dapr-distributed-calendar)
* [Java SDK](https://github.com/dapr/java-sdk) fixed to perform async API calls to Dapr sidecar
* [Improvements to actor registration, exception handling](https://github.com/dapr/dotnet-sdk/issues/569) in the .NET SDK
* Service invocation in the SDK now uses HTTP as the underlying protocol so deeper integration with [.NET SDK](https://github.com/dapr/dotnet-sdk) API surface for HTTP is possible, which makes service invocation much more flexible. See [Service Invocation section](https://github.com/dapr/dotnet-sdk/issues/569) for more details

## Acknowledgements

Thanks to everyone who made this release possible!

@1046102779, @AaronCrawfis, @Betula-L, @DarqueWarrior, @Yggdrasill-7C9, @alpha-baby, @alydersen, @arghya88, @artursouza, @beiwei30, @cmendible, @darren-wang, @davidkarlsen, @dylandee, @eibrunorodrigues, @fjvela, @gaoxinge, @georgestevens99, @halspang, @hepin1989, @IroNEDR, @jigargandhi, @juazasan, @karishma-chawla, @karoldeland, @kevgo, @kzmake, @mchmarny, @mrchypark, @msfussell, @mukundansundar, @newbe36524, @pkedy, @rrylee, @rynowak, @skyao, @soiboxauxi, @tcnghia, @TenSt, @tomkerkhove, @trondhindenes, @vinayada1, @wcs1only, @withinboredom, @wjayesh, @XavierGeerinck, @xiazuojie, @yaron2, @youngbupark, @zzxwill

## New in this release

### Dapr Runtime

- **RESOLVED** Migrate Dockerfile used to build Dapr to static, nonroot runtime image [1551](https://github.com/dapr/dapr/issues/1551)

- **RESOLVED** Enable sidecar to app authentication [1781](https://github.com/dapr/dapr/issues/1781)

- **ADDED** Support for message expiration in PubSub. [2216](https://github.com/dapr/dapr/issues/2216)

- **RESOLVED** Make required the version field on Component YAML [2260](https://github.com/dapr/dapr/issues/2260)

- **FIXED** Empty etags treated as empty etags. [2320](https://github.com/dapr/dapr/issues/2320)

- **Change** response handling for cross-protocol invocation. [2342](https://github.com/dapr/dapr/issues/2342)

- **RESOLVED** v1.0 Milestone 3 Plan [2346](https://github.com/dapr/dapr/issues/2346)

- **RESOLVED** Error: app not subscribed to binding  [2468](https://github.com/dapr/dapr/issues/2468)

- **RESOLVED** How to configure oauth middleware in dapr1.0-rc1 and running? [2474](https://github.com/dapr/dapr/issues/2474)

- **GENERATED** _pb.go and _grpc.pb.go separately using newer gRPC protoc for Go. [2481](https://github.com/dapr/dapr/issues/2481)

- **RESOLVED** The invocation chain is break when using service invoke [2504](https://github.com/dapr/dapr/issues/2504)

- **RESOLVED** Access control configuration invalid w/o at least 1 policy  [2526](https://github.com/dapr/dapr/issues/2526)

- **RESOLVED** Add Metadata gRPC API [2527](https://github.com/dapr/dapr/issues/2527)

- **RESOLVED** Consistency of API names surfaced by each SDK [2535](https://github.com/dapr/dapr/issues/2535)

- **FIXED** Docker image to be distroless and nonroot. [2536](https://github.com/dapr/dapr/issues/2536)

- **FIXED** Error message for unknown state stores being HTTP escaped. [2551](https://github.com/dapr/dapr/issues/2551)

- **RESOLVED** Remove redundant cancelfunc calls [2598](https://github.com/dapr/dapr/pull/2598)

- **RESOLVED** GetBulkSecrets fails when access limits are set in config [2600](https://github.com/dapr/dapr/issues/2600)

- **FIXED** The middleware.http.uppercase middleware comes pre-registered in Standalone mode. [2602](https://github.com/dapr/dapr/issues/2602)

- **RESOLVED** Make missing app-id annotation have a clearer log message [2603](https://github.com/dapr/dapr/issues/2603)

- **FIXED** CLI and Helm chart no longer default to amd64 architecture for Kubernetes installs. This allows deployments to arm64 Kubernetes clusters to succeed with the default configuration. [2605](https://github.com/dapr/dapr/issues/2605)

- **RESOLVED** Add missing metadata in getBulkState() response [2608](https://github.com/dapr/dapr/pull/2608)

- **RESOLVED** Update setup-dapr-development-env.md [2614](https://github.com/dapr/dapr/pull/2614)

- **RESOLVED** Return HTTP 409 Conflict when ETag doesn't match [2619](https://github.com/dapr/dapr/issues/2619)

- **RESOLVED** RBAC issue on OpenShift when installing with Helm [2620](https://github.com/dapr/dapr/issues/2620)

- **RESOLVED** fix(fsm): Apply return type must be bool type, or  daprd runtime maybe panic [2626](https://github.com/dapr/dapr/pull/2626)

- **RESOLVED** Add Known Types repeated twice [2627](https://github.com/dapr/dapr/issues/2627)

- **RESOLVED** Secret API "bulk" http endpoint does not work  [2649](https://github.com/dapr/dapr/issues/2649)

- **RESOLVED** Update Bulk Secrets API to return map[string]map[string]string [2652](https://github.com/dapr/dapr/issues/2652)

- **RESOLVED** Update setup-dapr-development-env.md [2664](https://github.com/dapr/dapr/pull/2664)

- **RESOLVED** fix(actors): timer ticker bug [2670](https://github.com/dapr/dapr/pull/2670)

- **RESOLVED** Helm chart tlc [2692](https://github.com/dapr/dapr/pull/2692)

- **FIXED** Support multiple path segments in access control policy [2725](https://github.com/dapr/dapr/issues/2725)

### Dapr CLI

- **RESOLVED** Dapr Uninstall Fails with Dapr: cannot get the manifest file: https://api.github.com/repos/dapr/dapr/releases - 403 rate limit exceeded [415](https://github.com/dapr/cli/issues/415)

- **RESOLVED** Update Dapr CLI logging to better show errors and warnings [484](https://github.com/dapr/cli/issues/484)

- **RESOLVED** Change the way of dapr cli reinstalling [527](https://github.com/dapr/cli/issues/527)

- **RESOLVED** [feature] add a metrics-port on run command [554](https://github.com/dapr/cli/issues/554)

- **FIXED** Dapr slim init now creates a `config.yaml` file like a normal init. [556](https://github.com/dapr/cli/issues/556)

- **RESOLVED** Add Upgrade CLI command to upgrade the Dapr control plane services [560](https://github.com/dapr/cli/issues/560)

- **FIXED** Workaround to allow dapr to be run with rosetta on M1 macs [570](https://github.com/dapr/cli/issues/570)

- **RESOLVED** Document metrics port [573](https://github.com/dapr/cli/issues/573)

- **RESOLVED** Allow all Helm values to pass to init/upgrade commands [574](https://github.com/dapr/cli/issues/574)

- **RESOLVED** Helm link points to self hosted [576](https://github.com/dapr/cli/issues/576)

### Components

- **RESOLVED** Dapr pub/sub publish is stripping Cloud Event fields [506](https://github.com/dapr/components-contrib/issues/506)

- **RESOLVED** Document when to release a new version of a component [526](https://github.com/dapr/components-contrib/issues/526)

- **RESOLVED** Can't load oauth2 middleware in dapr1.0-rc1 kubernetes [537](https://github.com/dapr/components-contrib/issues/537)

- **RESOLVED** Update the Secrets Component documentation [559](https://github.com/dapr/components-contrib/issues/559)

- **RESOLVED** Add prefetch count to RabbitMQ pub/sub [560](https://github.com/dapr/components-contrib/issues/560)

- **FIXED** Kubernetes get secret to fallback to k8s namespace. [563](https://github.com/dapr/components-contrib/issues/563)

- **RESOLVED** Add concurrency to RabbitMQ [574](https://github.com/dapr/components-contrib/issues/574)

- **RESOLVED** Exclusive Queues for RabbitMQ [577](https://github.com/dapr/components-contrib/issues/577)

- **RESOLVED** Added Exclusive Flag to RabbitMQ queues [580](https://github.com/dapr/components-contrib/pull/580)

- **RESOLVED** Support priority queue for RabbitMQ Bind/Pubsub Components [582](https://github.com/dapr/components-contrib/issues/582)

- **RESOLVED** App able to subscribe to one GCP Pub/Sub topic only [583](https://github.com/dapr/components-contrib/issues/583)

- **RESOLVED** Shared Subscription in MQTT [589](https://github.com/dapr/components-contrib/issues/589)

- **RESOLVED** SecretStore BulkGetSecret method flattens all of secrets into a single map [590](https://github.com/dapr/components-contrib/issues/590)

- **RESOLVED** Update sample links [611](https://github.com/dapr/components-contrib/pull/611)

- **RESOLVED** Need a MySQL binding support similar with PostgreSQL [616](https://github.com/dapr/components-contrib/issues/616)

- **RESOLVED** Fix get bulk secret for hashicorp vault. [632](https://github.com/dapr/components-contrib/pull/632)

- **RESOLVED** Fix service bus new topic creation [636](https://github.com/dapr/components-contrib/pull/636)

### Dashboard

- **FIXED** display of full cmd and registered actors [78](https://github.com/dapr/dashboard/issues/78)

- **RESOLVED** Numerous improvements and issues on the Dashboard [93](https://github.com/dapr/dashboard/issues/93)

- **RESOLVED** Improve log page for K8s [104](https://github.com/dapr/dashboard/issues/104)

- **ENABLED** Dashboard to run unprivileged. [119](https://github.com/dapr/dashboard/issues/119)

- **FIXED** reported vulnerabilities by npm. [120](https://github.com/dapr/dashboard/issues/120)

### .NET SDK

The .NET SDK NuGet packages that corresponds with RC3 of the Dapr runtime is version `1.0.0-rc05`.

The .NET SDK has several major feature additions and impactful changes in this release. We recommend every user to read this [migration guide](https://github.com/dapr/dotnet-sdk/issues/569) as a supplement to the release notes.

- **RESOLVED** Remove Query all statenames from IActorStateManager because it does not behave as expected [53](https://github.com/dapr/dotnet-sdk/issues/53)

- **FIXED** Changed signatures to use IReadOnlyDictionary<TKey, TValue> over Dictionary<TKey, TValue> in public APIs [395](https://github.com/dapr/dotnet-sdk/issues/395)

- **FIXED** Actor Runtime should not report Exception text in HTTP responses [410](https://github.com/dapr/dotnet-sdk/issues/410)

- **ADDED** support for metadata in pub/sub [425](https://github.com/dapr/dotnet-sdk/issues/425)

- **FIXED** TrySaveStateAsync and TryDeleteStateAsync should only handle "rejections" based on ETag, not all RPC exceptions [426](https://github.com/dapr/dotnet-sdk/issues/426)

- **FIXED** Actors HTTP handlers don't work with some common frontend server patterns [434](https://github.com/dapr/dotnet-sdk/issues/434)

- **FIXED** bug in actor serialization of `ActorId`. [477](https://github.com/dapr/dotnet-sdk/issues/477)

- **RESOLVED** Have consistent API names for .NET SDK [500](https://github.com/dapr/dotnet-sdk/issues/500)

- **ADDED** DaprClient: Implement GetBulkSecretAsync [510](https://github.com/dapr/dotnet-sdk/issues/510)

- **RESOLVED** Change the name of Invoke to InvokeMethod on the Actor proxy for naming consistency [513](https://github.com/dapr/dotnet-sdk/issues/513)

- **RESOLVED** Throw DaprException for dapr errors [516](https://github.com/dapr/dotnet-sdk/issues/516)

- **RESOLVED** Use Task instead of ValueTask [517](https://github.com/dapr/dotnet-sdk/issues/517)

- **ADDED** Support for metadata in Publish API. [521](https://github.com/dapr/dotnet-sdk/issues/521)

- **FIXED** ActorProxy.Create(ActorId actorId, Type actorInterfaceType, string actorType) does not work[522](https://github.com/dapr/dotnet-sdk/issues/522)

- **RESOLVED** ModelBinding throws ArgumentNullException when state not found in store [524](https://github.com/dapr/dotnet-sdk/issues/524)

- **ADDED** More flexible options for HTTP service invocation [526](https://github.com/dapr/dotnet-sdk/issues/526)

- **FIXED** Support for null and empty etag. [545](https://github.com/dapr/dotnet-sdk/issues/545)

- **RESOLVED** Simplifying Service Invocation API surface [549](https://github.com/dapr/dotnet-sdk/issues/549)

- **RESOLVED** Expose Dapr API token to users as a settable value [551](https://github.com/dapr/dotnet-sdk/issues/551)

- **FIXED** DaprClient now implements IDisposable so that networking resources can be reclaimed deterministically. [559](https://github.com/dapr/dotnet-sdk/issues/559)

- **FIXED** Remove automatic protobuf conversion [442](https://github.com/dapr/dotnet-sdk/issues/442)

- **RESOLVED** Provide a single way to configure System.Text.Json serializer options for all Dapr Client and Actors features [532](https://github.com/dapr/dotnet-sdk/issues/532)

### Go SDK

- **RESOLVED** add metadata in state get response [128](https://github.com/dapr/go-sdk/pull/128)

- **RESOLVED** fix some typo [131](https://github.com/dapr/go-sdk/pull/131)

- **RESOLVED** Update SDK to support new etag mechanism, change BulkGetSecrets [134](https://github.com/dapr/go-sdk/issues/134)

- **RESOLVED** Add support for etag and bulk secret modifications [135](https://github.com/dapr/go-sdk/pull/135)

### Java SDK

The Maven version that corresponds with this release of the Dapr runtime is version `1.0.0-rc-4`.

The Java SDK has several major feature additions and impactful changes in this release. We recommend every user to read this [migration guide](https://github.com/dapr/java-sdk/issues/467) as a supplement to the release notes.

- **RESOLVED** add java.lang.reflect.Type to deserialize API [331](https://github.com/dapr/java-sdk/issues/331)

- **RESOLVED** Add wait() method to block until Sidecar is up [377](https://github.com/dapr/java-sdk/issues/377)

- **REFACTORED** CloudEvent serialization, also adding default constructor. [385](https://github.com/dapr/java-sdk/issues/385)

- **RESOLVED** validated handling of metadata and fixed when applicable. [396](https://github.com/dapr/java-sdk/issues/396)

- **RESOLVED** How to set timeout invoking service [399](https://github.com/dapr/java-sdk/issues/399)

- **FIXED** missing eTag response for state APIs. [405](https://github.com/dapr/java-sdk/issues/405)

- **RENAMED** methods and properties for consistency across SDKs. [409](https://github.com/dapr/java-sdk/issues/409)

- **RESOLVED** Rename invoke to invokeMethod for ActorProxy [418](https://github.com/dapr/java-sdk/issues/418)

- **RESOLVED** Implement getBulkSecret API [421](https://github.com/dapr/java-sdk/issues/421)

- **REMOVED** DaprException from IllegalArgumentException. [424](https://github.com/dapr/java-sdk/issues/424)

- **FIXED** input encoding for HTTP calls. [427](https://github.com/dapr/java-sdk/issues/427)

- **RESOLVED** Add support for metadata in Publish API [430](https://github.com/dapr/java-sdk/issues/430)

- **FIXED** datacontenttype to respect content-type metadata. [432](https://github.com/dapr/java-sdk/issues/432)

- **FIXED** implementations of DaprClient API were blocking for gRPC and HTTP. [434](https://github.com/dapr/java-sdk/issues/434)

- **RESOLVED** etag error code changes in dapr runtime need a change in the sdk [437](https://github.com/dapr/java-sdk/issues/437)

- **RESOLVED** Handle service invocation over HTTP only [438](https://github.com/dapr/java-sdk/issues/438)

- **REMOVED** unused `etag` param from getState() [439](https://github.com/dapr/java-sdk/issues/439)

- **RESOLVED** Why not implement java-sdk-springboot as a spring boot starter? [441](https://github.com/dapr/java-sdk/issues/441)

- **FIXED** Support for null and empty etag. [442](https://github.com/dapr/java-sdk/issues/442)

- **RENAMED** InvokeServiceRequest to InvokeMethodRequest. [443](https://github.com/dapr/java-sdk/pull/443)

- **RESOLVED** @ActorMethod to override method's name for client and service [444](https://github.com/dapr/java-sdk/issues/444)

- **REMOVED** Dependency from OpenTelemetry SDK [453](https://github.com/dapr/java-sdk/issues/453)

- **FIXED** error handling for service invocation with HTTP client and gRPC service. [461](https://github.com/dapr/java-sdk/issues/461)

- **ADDED** examples on how to write Unit tests with DaprClient and Actors. [470](https://github.com/dapr/java-sdk/issues/470)

- **FIXED** order of State key-value params. [472](https://github.com/dapr/java-sdk/issues/472)


### Python SDK

Python SDK version is 1.0.0rc3 and is available through pip/pypi

- **RESOLVED** Add wait() method to block until Sidecar is up [140](https://github.com/dapr/python-sdk/issues/140)

- **RESOLVED** For invoke Service - How to return error over grpc.  [141](https://github.com/dapr/python-sdk/issues/141)

- **RESOLVED** Naming changes [150](https://github.com/dapr/python-sdk/issues/150)

- **RESOLVED** Allow for a more recent version of grpcio [160](https://github.com/dapr/python-sdk/issues/160)

- **ADDED** code in state store example showcasing etag handling. [167](https://github.com/dapr/python-sdk/issues/167)

- **FIXED** Support for null and empty etag. [169](https://github.com/dapr/python-sdk/issues/169)

- **RESOLVED** Makes service method API invocations over HTTP by default. [176](https://github.com/dapr/python-sdk/issues/176)

- **RESOLVED** Add support for bulkGetSecret [179](https://github.com/dapr/python-sdk/issues/179)

- **REMOVE** dependency from OpenCensus SDK. [181](https://github.com/dapr/python-sdk/issues/181)

### PHP SDK

- **RESOLVED** Dapr composer org, package and publish [1](https://github.com/dapr/php-sdk/issues/1)

### Documentation

- **RESOLVED** Make it clear in the docs that all Dapr services Placements and Sentry service do not need Docker to run locally [857](https://github.com/dapr/docs/issues/857)

- **RESOLVED** Document components maturity status [935](https://github.com/dapr/docs/issues/935)

- **UPDATED** overview description for pub/sub topics and subscriptions [987](https://github.com/dapr/docs/issues/987)

- **RESOLVED** mDNS round robin capability [1025](https://github.com/dapr/docs/issues/1025)

- **RESOLVED** Fix spelling of Rust [1056](https://github.com/dapr/docs/pull/1056)

- **RESOLVED** Update apns.md [1058](https://github.com/dapr/docs/pull/1058)

- **RESOLVED** Fix typo in Kubernetes binding docs [1060](https://github.com/dapr/docs/pull/1060)

- **RESOLVED** [CONTENT] PubSub handling of CloudEvents and TTL [1061](https://github.com/dapr/docs/issues/1061)

- **RESOLVED** Add a note about installing the cli to M1 macs [1064](https://github.com/dapr/docs/issues/1064)

- **RESOLVED** refine code align in middleware concept [1066](https://github.com/dapr/docs/pull/1066)

- **RESOLVED** update link [1068](https://github.com/dapr/docs/pull/1068)

- **RESOLVED** updated rabbitmq pub/sub documentation [1069](https://github.com/dapr/docs/pull/1069)

- **RESOLVED** Change NATS streaming deliverAll to deliverNew [1074](https://github.com/dapr/docs/issues/1074)

- **RESOLVED** Update rabbitmq.md [1086](https://github.com/dapr/docs/pull/1086)

- **RESOLVED** Update the component docs for state stores to capture all the metadata fields and have complete examples [1087](https://github.com/dapr/docs/issues/1087)

- **RESOLVED** [CONTENT] Add info about `{uuid}` [1095](https://github.com/dapr/docs/issues/1095)

- **RESOLVED** Insert section for Dapr to App authentication [1096](https://github.com/dapr/docs/issues/1096)

- **RESOLVED** MySQL State component documentation  [1100](https://github.com/dapr/docs/issues/1100)

- **RESOLVED** Document Content Type application/cloudevents+json [1130](https://github.com/dapr/docs/issues/1130)

### Quickstarts

- **ADDED** Automated validation of quickstarts [357](https://github.com/dapr/quickstarts/issues/357)

- **RESOLVED** Error when running Python app: exec: "flask": executable file not found in $PATH [363](https://github.com/dapr/quickstarts/issues/363)

### Samples

- **RESOLVED** add new sample  [41](https://github.com/dapr/samples/pull/41)

## Upgrading to Dapr 1.0.0-rc.3

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.0.0-rc.3
```

Wait for the update to finish,  ensure you are using the latest version of Dapr(1.0.0-rc.3) with:

```bash
$ dapr --version

CLI version: 1.0.0-rc.4
Runtime version: 1.0.0-rc.3
```

### 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.0.0-rc.3 -k
```

To upgrade with high availability mode:

```
dapr upgrade --runtime-version 1.0.0.-rc.3 --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.0.0-rc.3 --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

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.0.0-rc.3 --namespace dapr-system --wait
```

Alternatively, you can use the latest version of CLI:

```
dapr init --runtime-version=1.0.0-rc.3 -k
```

##### Post installation

Verify the control plane pods are running and are healthy:

```
$ kubectl get pods -n dapr-system
NAME                                    READY   STATUS    RESTARTS   AGE
dapr-dashboard-85cc6c9f7d-hzk69         1/1     Running   0          13m
dapr-operator-84985cb985-h2zdv          1/1     Running   0          13m
dapr-placement-server-0                 1/1     Running   0          13m
dapr-sentry-5974c7cb6d-9bnqd            1/1     Running   0          13m
dapr-sidecar-injector-5b5bb9454-sfmmx   1/1     Running   0          13m
```

## Breaking Changes

### Component versioning

Specifying a component version is now required.
All components *MUST* now include the `v1` version in their spec:

```yaml
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: mycomponent
spec:
  version: v1
```

### ETags

Two changes were made regarding ETags:

1. An Etag mismatch operation will now return an HTTP status code of `409` and a gRPC code of `Aborted`.

2. There is now a distinction between missing and empty etags.
An missing etag from the request is assumed as last-write-wins, while an empty etag will attempt saving the record only if it doesn't exist.

### Dapr Runtime

- **RESOLVED** Make required the version field on Component YAML [2260](https://github.com/dapr/dapr/issues/2260)

- **FIXED** Empty etag treated as no etag. [2320](https://github.com/dapr/dapr/issues/2320)

- **CHANGED** response handling for cross-protocol invocation. [2342](https://github.com/dapr/dapr/issues/2342)

- **RESOLVED** Return HTTP 409 Conflict when ETag doesn't match [2619](https://github.com/dapr/dapr/issues/2619)

### .NET SDK

- **RESOLVED** Remove Query all statenames from IActorStateManager because it does not behave as expected [53](https://github.com/dapr/dotnet-sdk/issues/53)

- **RESOLVED** Prefer IDictionary<TKey, TValue> over Dictionary<TKey, TValue> in public APIs [395](https://github.com/dapr/dotnet-sdk/issues/395)

- **RESOLVED** TrySaveStateAsync and TryDeleteStateAsync should only handle "rejections" based on ETag, not all RPC exceptions [426](https://github.com/dapr/dotnet-sdk/issues/426)

- **RESOLVED** Actors HTTP handlers don't work with some common frontend server patterns [434](https://github.com/dapr/dotnet-sdk/issues/434)

- **RESOLVED** Have consistent API names for .NET SDK [500](https://github.com/dapr/dotnet-sdk/issues/500)

- **RESOLVED** Throw DaprException for dapr errors [516](https://github.com/dapr/dotnet-sdk/issues/516)

- **RESOLVED** Use Task instead of ValueTask [517](https://github.com/dapr/dotnet-sdk/issues/517)

- **RESOLVED** Reimagining service invocation for dotnet-sdk [526](https://github.com/dapr/dotnet-sdk/issues/526)

- **RESOLVED** Simplifying Service Invocation API surface [549](https://github.com/dapr/dotnet-sdk/issues/549)

- **RESOLVED** Expose Dapr API token to users as a settable value [551](https://github.com/dapr/dotnet-sdk/issues/551)

- **FIXED** DaprClient now implements IDisposable so that networking resources can be reclaimed deterministically. [559](https://github.com/dapr/dotnet-sdk/issues/559)

### Go SDK

- **RESOLVED** Remove unstable dependencies. [136](https://github.com/dapr/go-sdk/issues/136)

### Java SDK

- **REFACTORED** CloudEvent serialization, also adding default constructor. [385](https://github.com/dapr/java-sdk/issues/385)

- **FIXED** missing eTag response for state APIs. [405](https://github.com/dapr/java-sdk/issues/405)

- **RENAMED** methods and properties for consistency across SDKs. [409](https://github.com/dapr/java-sdk/issues/409)

- **RESOLVED** Handle service invocation over HTTP only [438](https://github.com/dapr/java-sdk/issues/438)

- **REMOVED** unused `etag` param from getState() [439](https://github.com/dapr/java-sdk/issues/439)

- **RENAMED** InvokeServiceRequest to InvokeMethodRequest. [443](https://github.com/dapr/java-sdk/pull/443)

- **REMOVED** dependency from OpenTelemetry SDK [453](https://github.com/dapr/java-sdk/issues/453)

- **FIXED** order of State key-value params. [472](https://github.com/dapr/java-sdk/issues/472)

### Python SDK

- **RESOLVED** Naming changes [150](https://github.com/dapr/python-sdk/issues/150)

- **REMOVED** dependency from OpenCensus SDK. [181](https://github.com/dapr/python-sdk/issues/181)
