
# Dapr 1.0.0-rc.1

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

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-rc1) section on upgrading Dapr to version 1.0.0-rc.1.


> Dapr CLI version in this release is 1.0.0-rc.2 and is not compatible with runtime versions prior to 1.0.0-rc.1. Download Dapr CLI 1.0.0-rc.2 from [here](https://github.com/dapr/cli/releases) and put the `dapr` binary in your PATH, or use the rc1 install script in the Getting Started guide.

> For Java applications using Dapr Java SDK, use SDK version 0.10.0.

> For .Net applications using Dapr .Net SDK, use SDK version 0.12.0-preview01.

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


**Highlights**

These are some highlights for this release;

- The [actor placement service](https://v1-rc1.docs.dapr.io/developing-applications/building-blocks/actors/actors-background/#actor-placement-service) now has a high availability (HA) configuration to improve resilience and enable upgrades on production system that use actors to minimize downtime on actor instance availability.
 - Substantial work has been done on improving the scale and performance of actors.
- [Open Telemetry](https://opentelemetry.io/docs/) is now an [option to capture observability events](https://v1-rc1.docs.dapr.io/operations/monitoring/open-telemetry-collector/) including logs, metrics and tracing.
    > Note: This is the last release that will support the LocalForwarder and its [tracing exporter components](https://github.com/dapr/components-contrib/tree/master/exporters). These Dapr components will be removed in the next release and instead be replaced with OpenTelemetry exporters.
 - All Dapr APIs can now be called on the Dapr sidecar before the app has responded on the app-port. For example, this enables the app to retrieve secrets before the app starts, enabling setting up JWT validation in an auth pipeline/middleware.
 - Http endpoints in your app can now be https endpoints, which previously were blocked. If your app is listening on `https` or has a gRPC TLS configuration enabled, use the  `app-ssl` flag like this. This will have Dapr invoke the app over an insecure SSL channel.

     `dapr run --app-id nodeapp --app-port 3000 node app.js --app-ssl`

 - Published [service invocation API performance numbers](https://v1-rc1.docs.dapr.io/operations/performance-and-scalability/) for the v0.11.3 release which will be updated with each future release.
 - The CLI component command `dapr components -k` now shows version information for each component.

## New in this release

### Dapr Runtime

- **ENABLED** placement service to run with multiple instances [663](https://github.com/dapr/dapr/issues/663)

- **UPDATED** documentation to use OpenTelemetry instead of Local Forward [1080](https://github.com/dapr/dapr/issues/1080)

- **ENABLED** secrets API before application endpoint is ready [1493](https://github.com/dapr/dapr/issues/1493)

- **IMPROVED** RabbitMQ's PubSub implementation to automatically reconnect on 'channel/connection is not open' [1688](https://github.com/dapr/dapr/issues/1688)

- **FIXED** verbosity for 'host removed' logs in placement service [1726](https://github.com/dapr/dapr/issues/1726)

- **UPDATED** error handling in HTTP and gRPC APIs [1742](https://github.com/dapr/dapr/issues/1742)

- **ADDED** ability for Dapr to use a non-secure SSL connection when communicating with the app [1883](https://github.com/dapr/dapr/issues/1883)

- **FIXED** Component YAMLs needing quoted values for Kubernetes [1893](https://github.com/dapr/dapr/issues/1893)

- End to end tests now save container logs [2063](https://github.com/dapr/dapr/issues/2063)

- **FIXED** gRPC error handing to follow grpc error handling guide [2067](https://github.com/dapr/dapr/issues/2067)

- **ADDED** RFC1123 validation for app IDs [2068](https://github.com/dapr/dapr/issues/2068)

- **UPDATED** Change hardcoded integer status codes to constants for HTTP API [2070](https://github.com/dapr/dapr/issues/2070)

- **FIXED** memory leak and high memory utilization in actor building block [2093](https://github.com/dapr/dapr/issues/2093)

- **IMPROVED** Actor distribution and made replication factor configurable [2094](https://github.com/dapr/dapr/issues/2094)

- **REMOVE** redundant 'metadata' in dapr_sidecar_injector_service.yaml [2136](https://github.com/dapr/dapr/issues/2136)

- **FIXED** Dapr does not report error when component category is invalid [2146](https://github.com/dapr/dapr/issues/2146)

- **FIXED** disabling metrics configuration [2163](https://github.com/dapr/dapr/issues/2163)

- **ADDED** E2E tests option to run in HA mode [2188](https://github.com/dapr/dapr/issues/2188)

- **ADDED** permission of "Watch" for crds of Subscriptions [2208](https://github.com/dapr/dapr/issues/2208)

- **ADDED** Unit tests for Sentry and gRPC server [2212](https://github.com/dapr/dapr/issues/2212)

- **FIXED** wrong error response when grpc callee returns error for http->gRPC invocation [2220](https://github.com/dapr/dapr/issues/2220)

- **FIXED** .Net gRPC appcallback server OnInvoke callback failure [2221](https://github.com/dapr/dapr/issues/2221)

- **FIXED** input binding load order [2222](https://github.com/dapr/dapr/issues/2222)

- **REMOVED** deprecated flags from `daprd` main [2232](https://github.com/dapr/dapr/issues/2232)

- **FIXED** Pubsub fails delivery on 200 with empty JSON [2235](https://github.com/dapr/dapr/issues/2235)

- **ADDED** configurable healthz port for placement service [2242](https://github.com/dapr/dapr/issues/2242)

- **VALIDATED** CosmosDB state store for actors [2243](https://github.com/dapr/dapr/issues/2243)

- **CHANGED** preferred node affinity to required [2245](https://github.com/dapr/dapr/issues/2245)

- **ADDED** codecov rules to ensure that no PR reduces unit test coverage [2262](https://github.com/dapr/dapr/issues/2262)

- **FIXED** Dapr hiding gRPC transport error in service invocation [2272](https://github.com/dapr/dapr/issues/2272)

- **ADDED** the feature to collect Dapr control plane service logs when the test is done [2284](https://github.com/dapr/dapr/issues/2284)

- **CHANGED** Cors middleware to optional + added tests [2285](https://github.com/dapr/dapr/pull/2285)

- **IMPROVED** performance by removing `fmt.Sprintf` from hot path for service invocation [2287](https://github.com/dapr/dapr/pull/2287)

- **FIXED** Update OpenTelemetry attribute keys `db.{type,url,instance}` to the latest spec `db.{system,connection_string,name}` [2288](https://github.com/dapr/dapr/issues/2288)

- **FIXED** memory leak in app health check for actor [2292](https://github.com/dapr/dapr/pull/2292)

- **REMOVED** 60 seconds timeout on app channel [2301](https://github.com/dapr/dapr/issues/2301)

- **USE** Go 1.15.3 to build binary [2303](https://github.com/dapr/dapr/issues/2303)

- **FIXED** race condition of busy flag and channel and unnecessary heap alloc in actor locking [2306](https://github.com/dapr/dapr/issues/2306)

- **REMOVED** package deprecation warning for protoc-gen-go [2313](https://github.com/dapr/dapr/issues/2313)

- **ADDED** Additional unit test coverage for HTTP API [2315](https://github.com/dapr/dapr/issues/2315)

- **ADDED** HTTP PUT support for statestore APIs [2316](https://github.com/dapr/dapr/issues/2316)

- **ADDED** limits/requests in helm charts [2325](https://github.com/dapr/dapr/issues/2325)

- **FIXED** Dapr API status codes for HTTP audited and updated to match documentation [2338](https://github.com/dapr/dapr/issues/2338)

- **FIXED** memory leak in pending actor call metric [2339](https://github.com/dapr/dapr/issues/2339)

- **FIXED** unnecessary memory alloc for actor in actor invocation call flow [2340](https://github.com/dapr/dapr/issues/2340)

- **SWITCH** apiextensions.k8s.io/v1beta1 to apiextensions.k8s.io/v1 [2354](https://github.com/dapr/dapr/issues/2354)

- **ADDED** the option to generate crd via controller-gen [2355](https://github.com/dapr/dapr/issues/2355)

- **ADDED** Raft server and its state for placement [2373](https://github.com/dapr/dapr/issues/2373)

- **USE** Raft state to maintain dapr runtime host state and hashing table [2374](https://github.com/dapr/dapr/issues/2374)

- **ENABLED** placement client in runtime to connect the leader of placement [2375](https://github.com/dapr/dapr/issues/2375)

- **UPDATED** helm chart to install three placement replicas for HA mode [2376](https://github.com/dapr/dapr/issues/2376)

- **ADDED** graceful server shutdown for placement [2377](https://github.com/dapr/dapr/issues/2377)

- **ADDED** gRPC method to register actor timer [2388](https://github.com/dapr/dapr/issues/2388)

- **ADDED** gRPC method to unregister actor timer [2397](https://github.com/dapr/dapr/issues/2397)

- **ADDED** gRPC method to invoke actors [2400](https://github.com/dapr/dapr/issues/2400)

- **FIXED** Fail Dapr sidecar if specified configuration cannot be loaded properly [2425](https://github.com/dapr/dapr/issues/2425)

### Dapr CLI

- **IMPROVED** help messages [421](https://github.com/dapr/cli/issues/421)

- **UPGRADED** Golang Lint to 1.31.0 [443](https://github.com/dapr/cli/issues/443)

- **SKIP** container check for Redis when --redis-host is specified [479](https://github.com/dapr/cli/issues/479)

- **ADDED** Enable SSL connection flag [494](https://github.com/dapr/cli/issues/494)

- **REMOVED** deprecated commands [503](https://github.com/dapr/cli/issues/503)

- **FIXED** azure auth import in CLI [504](https://github.com/dapr/cli/issues/504)

- **ADDED** Version and scopes field to `dapr components -k` output [505](https://github.com/dapr/cli/issues/505)

- **FIXED** Dapr CLI status command to display dapr-placement-server StatefulSet [509](https://github.com/dapr/cli/issues/509)

- **FIXED** CLI publish to accept 2xx codes [510](https://github.com/dapr/cli/issues/510)

- **FIXED** Empty spaces in path [513](https://github.com/dapr/cli/issues/513)

- **ADDED** version argument in one line scripts to pull the specific version of dapr cli [516](https://github.com/dapr/cli/issues/516)

- **CHANGED** `dapr init` behavior to download the latest daprd binary when cli version has -rc suffix [518](https://github.com/dapr/cli/issues/518)

### Components

- **ADDED** Apple Push Notification Service Output Binding [480](https://github.com/dapr/components-contrib/issues/480)

- **ENABLED** metadata to force HTTPS on final redirect from oauth2 middleware [486](https://github.com/dapr/components-contrib/issues/486)

- **REMOVE** CloudKMS from Secret Stores [495](https://github.com/dapr/components-contrib/issues/495)

- **ADDED** Ack wait and MaxInFlight Parameters to Nats Streaming Component [505](https://github.com/dapr/components-contrib/issues/505)

- **FIXED** Azure Blob Storage binding not saving JSON values [515](https://github.com/dapr/components-contrib/issues/515)

### Dashboard

- **FIXED** Display app name (id) in Dashboard on K8s [87](https://github.com/dapr/dashboard/issues/87)

- **ADDED** Support for imagePullSecret Secret on Helm Chart [2475](https://github.com/dapr/dapr/issues/2475)

### .NET SDK

- **ADDED** HTTP status code for error in method invocation [400](https://github.com/dapr/dotnet-sdk/issues/400)

- **ADDED** configurable log level in .Net SDK [406](https://github.com/dapr/dotnet-sdk/issues/406)

- **USE** Guid to generate unique Actor ID [415](https://github.com/dapr/dotnet-sdk/issues/415)

- **FIXED** Bug in the Actors SDK for dotnet-sdk. Actor Reference and Id can now be stored [444](https://github.com/dapr/dotnet-sdk/issues/444)

- **FIXED** documentation for Actor sample in .Net [450](https://github.com/dapr/dotnet-sdk/issues/450)

### Java SDK

- **FIXED** Save byte[] in actor's state store [352](https://github.com/dapr/java-sdk/issues/352)

- **FIXED** register timer method to return timer's name, enabling use of auto-generated values [355](https://github.com/dapr/java-sdk/issues/355)

- **FIXED** withObjectSerializer method to return generic type in ActorProxyBuilder [356](https://github.com/dapr/java-sdk/issues/356)

- **UPDATED** dependencies expect opentelemetry [361](https://github.com/dapr/java-sdk/issues/361)

- **FIXED** Timer invocation after Actor runtime app restarts [362](https://github.com/dapr/java-sdk/issues/362)

- **ADDED** Added codecov rules to ensure that no PR reduces unit test coverage [364](https://github.com/dapr/java-sdk/issues/364)

- **FIXED** high memory consumption issue in Java SDK for HTTP communication [370](https://github.com/dapr/java-sdk/issues/370)

- **UPDATED** opentelemetry library to 0.7.1. **CHANGED** repo ID of spring repo to spring [382](https://github.com/dapr/java-sdk/issues/382)

### Python SDK

- **ADDED** W3C trace headers to Dapr API calls [97](https://github.com/dapr/python-sdk/issues/97)

- **Updated** dapr python sdk pkg documents [125](https://github.com/dapr/python-sdk/issues/125)

- **ADDED** missing etag to StateResponse [128](https://github.com/dapr/python-sdk/issues/128)

- **ADDED** Added codecov reports to python-sdk PRs [133](https://github.com/dapr/python-sdk/issues/133)

### Documentation

- **UPDATED** environment-setup.md [841](https://github.com/dapr/docs/pull/841)

- **ADDED** Performance section in docs [863](https://github.com/dapr/docs/issues/863)

- **FIXED** documentation link to "Sending Messages to Output Bindings" [867](https://github.com/dapr/docs/pull/867)

- **ADDED** Documentation for enabling Dapr to talk to an app via an SSL connection [868](https://github.com/dapr/docs/issues/868)

- **FIXED** dead link to Ignite video session [878](https://github.com/dapr/docs/pull/878)

- **FIXED** links in page developing-applications/ides/vscode-remotecontainers/ [887](https://github.com/dapr/docs/issues/887)

## Upgrading to Dapr 1.0.0-rc.1

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

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

```bash
$ dapr --version

CLI version: 1.0.0-rc.2
Runtime version: 1.0.0-rc.1
```

### Kubernetes

#### Upgrading from previous version

If you previously installed Dapr using Helm, you can upgrade Dapr to a new version.
If you installed Dapr using the CLI, go [here](#starting-fresh-install-on-a-cluster).

##### 1. Get the latest CLI

Download the latest RC release from [here](https://github.com/dapr/cli/releases) and put the `dapr` binary in your PATH.

##### 2. Upgrade existing cluster

Follow instructions below to migrate from 0.11.x placement service to 1.0.0-rc.1 placement service safely.

First run these two commands to disable `helm upgrade` from uninstall 0.11.x placement service.

```sh
kubectl annotate deployment dapr-placement helm.sh/resource-policy=keep -n dapr-system
kubectl annotate svc dapr-placement helm.sh/resource-policy=keep -n dapr-system
```

Then, export certs:

```sh
dapr mtls export -o ./certs
```

Now, upgrade Dapr to 1.0.0-rc.1 using the below commands:

```sh
helm repo update
helm upgrade dapr dapr/dapr --version 1.0.0-rc.1 --namespace dapr-system --reset-values --set-file dapr_sentry.tls.root.certPEM=./certs/ca.crt --set-file dapr_sentry.tls.issuer.certPEM=./certs/issuer.crt --set-file dapr_sentry.tls.issuer.keyPEM=./certs/issuer.key --set global.ha.enabled=true --wait
```

Once Dapr is installed completely, ensure that 0.11.x dapr-placement service is still running and **wait until all PODs are running**
```sh
kubectl get pods -n dapr-system -w

NAME                                     READY   STATUS    RESTARTS   AGE
dapr-dashboard-69f5c5c867-mqhg4          1/1     Running   0          42s
dapr-operator-5cdd6b7f9c-9sl7g           1/1     Running   0          41s
dapr-operator-5cdd6b7f9c-jkzjs           1/1     Running   0          29s
dapr-operator-5cdd6b7f9c-qzp8n           1/1     Running   0          34s
dapr-placement-5dcb574777-nlq4t          1/1     Running   0          76s  ---- 0.11.x placement
dapr-placement-server-0                  1/1     Running   0          41s
dapr-placement-server-1                  1/1     Running   0          41s
dapr-placement-server-2                  1/1     Running   0          41s
dapr-sentry-84565c747b-7bh8h             1/1     Running   0          35s
dapr-sentry-84565c747b-fdlls             1/1     Running   0          41s
dapr-sentry-84565c747b-ldnsf             1/1     Running   0          29s
dapr-sidecar-injector-68f868668f-6xnbt   1/1     Running   0          41s
dapr-sidecar-injector-68f868668f-j7jcq   1/1     Running   0          29s
dapr-sidecar-injector-68f868668f-ltxq4   1/1     Running   0          36s
```


Restart your application deployments to update the Dapr runtime.
```sh
kubectl rollout restart deploy/<DEPLOYMENT-NAME>
```

Once the deployment is completed, delete the 0.11.x dapr-placement service by running the following commands:
```sh
kubectl delete deployment dapr-placement -n dapr-system
kubectl delete svc dapr-placement -n dapr-system
```

All done!

#### Starting fresh install on a cluster

You can use Helm 3 to install Dapr:
```sh
helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update
helm install dapr dapr/dapr --version 1.0.0-rc.1 --namespace dapr-system
```

Alternatively, you can use the latest version of CLI:

```
dapr init --runtime-version=1.0.0-rc.1 --kubernetes
```

If you previously installed Dapr on your Kubernetes cluster using the Dapr CLI, run:

*Note: Make sure you're uninstalling with your existing CLI version*

```bash
dapr uninstall --kubernetes
```

If you previously installed Dapr using __Helm 3.X__:

```bash
helm uninstall dapr -n dapr-system
```

If you installed Dapr with Helm to a namespace other than `dapr-system`, modify the uninstall command above to account for that.

##### 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
```

After Dapr 1.0.0-rc.1 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

### Annotations

The following annotations are no longer supported:

* `dapr.io/id`
* `dapr.io/port`
* `dapr.io/protocol`

Instead, use the following:

* `dapr.io/app-id`
* `dapr.io/app-port`
* `dapr.io/app-protocol`

### Dapr Runtime

- **REMOVED** deprecated flags from `daprd` main [2232](https://github.com/dapr/dapr/issues/2232)

- **FIXED** Pubsub fails delivery on 200 with empty JSON [2235](https://github.com/dapr/dapr/issues/2235)

- **FIXED** Dapr API status codes for HTTP audited and updated to match documentation [2338](https://github.com/dapr/dapr/issues/2338)

- **SWITCH** apiextensions.k8s.io/v1beta1 to apiextensions.k8s.io/v1 [2354](https://github.com/dapr/dapr/issues/2354)

### Dapr CLI

- **REMOVED** deprecated cli command flags [503](https://github.com/dapr/cli/issues/503)


## Acknowledgements

Thanks to everyone who made this release possible!

Special thanks to @jigargandhi for the amazing work on [1493](https://github.com/dapr/dapr/issues/1493).
Also, thanks to @skyao for the great work on [2101](https://github.com/dapr/dapr/issues/2101)

@Li-Yanzhi, @TenSt, @abserari, @ajaysingh77, @artursouza, @beiwei30, @bvwells, @cilerler, @cmendible, @discostu105, @halspang, @jdubois, @jigargandhi, @juazasan, @kendallroden, @mfcollins3, @mukundansundar, @rynowak, @skyao, @tcnghia, @tianvan, @tylermurry, @vinayada1, @wcs1only, @yaron2, @youngbupark
