
# Dapr 1.0.0

We're excited to announce the release of Dapr 1.0.0! 🎉🎉🎉🎉 🎈🎈🎈🎈

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](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-100) section on installing/upgrading Dapr to version 1.0.0.

For a list of all changes since 0.11 release, refer to the release notes from the release candidates:

- [1.0.0-rc.3](v1.0.0-rc.3.md) - [breaking changes](v1.0.0-rc.3.md#breaking-changes)
- [1.0.0-rc.2](v1.0.0-rc.2.md) - [breaking changes](v1.0.0-rc.2.md#breaking-changes)
- [1.0.0-rc.1](v1.0.0-rc.1.md) - [breaking changes](v1.0.0-rc.1.md#breaking-changes)

> For Java applications using Dapr Java SDK, use SDK version 1.0.0. See [upgrade instructions for the Java SDK](https://github.com/dapr/java-sdk/issues/493).

> For .Net applications using Dapr .Net SDK, use SDK version 1.0.0. See [upgrade instructions for the .Net SDK](https://github.com/dapr/dotnet-sdk/issues/593).

## Acknowledgements ❤️

Thanks to everyone who made this release possible!

@AaronCrawfis, @1046102779, @abserari, @alpha-baby, @alydersen, @ajaysingh77, @arghya88, @artursouza, @beiwei30, @Betula-L, @bvwells, @cilerler, @cmendible, @cvictory, @DarqueWarrior, @darren-wang, @davidkarlsen, @discostu105, @dylandee, @eibrunorodrigues, @eNeRGy164, @fjvela, @gaoxinge, @georgestevens99, @halspang, @harrykimpel, @hepin1989, @IroNEDR, @issacg, @jdubois, @jigargandhi, @jjcollinge, @juazasan, @karishma-chawla, @karoldeland, @kendallroden, @kevgo, @ksivamuthu, @kzmake, @Li-Yanzhi, @mchmarny, @mfcollins3, @msfussell, @mrchypark, @mukundansundar, @newbe36524, @orizohar, @PeterGerrard, @Phiph, @pkedy, @ProfessorMc, @Qalifah, @rrylee, @rynowak, @sau-lanvy, @shubham1172, @skyao, @soiboxauxi, @tcnghia, @TenSt, @tianvan, @tomkerkhove, @trondhindenes, @tylermurry, @vinayada1, @wcs1only, @withinboredom, @wjayesh, @XavierGeerinck, @xiazuojie, @yaron2, @Yggdrasill-7C9, @youngbupark, @wwulfric, @ZeyadYasser, @zzxwill

## Highlights since the 0.11 release

- The [actor placement service](https://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.
- 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://docs.dapr.io/operations/performance-and-scalability/).
- The CLI component command `dapr components -k` now shows version information for each component.
- Support for HTTP query parameters with many values per key, including support in SDKs. [2786](https://github.com/dapr/dapr/pull/2786)
- Added the ability to share state between different applications using prefix strategies. Visit [this](https://docs.dapr.io/developing-applications/building-blocks/state-management/howto-share-state/) link to learn more.
- Added a [bulk secrets API](https://docs.dapr.io/reference/api/secrets_api/#get-bulk-secret) to get all the secrets at once from a secret store that the app has access to. Implemented in the [secret components](https://github.com/dapr/components-contrib/tree/master/secretstores)
- Actors in Java SDK communicate to Dapr sidecar via GRPC. This allows better performance for invocation of Actor methods, timers and reminders.
- Deprecation of exporters component [#2337](https://github.com/dapr/dapr/issues/2337):  Tracing is now part of Dapr core, and tracing settings have moved to Configuration CRD. See [this doc](https://docs.dapr.io/operations/configuration/configuration-overview/#tracing) for information about the new tracing settings. For more detailed instructions on setting up tracing in new Configuration, check out the [observability quickstart sample](https://github.com/dapr/quickstarts/tree/v1.0.0/observability) as well as backend-specific guides for [Zipkin](https://v1-rc2.docs.dapr.io/operations/monitoring/zipkin/), [Jaeger](https://docs.dapr.io/operations/monitoring/jaeger/), [New Relics](https://docs.dapr.io/operations/monitoring/newrelic/), and [OpenTelemetry trace backends like Azure AppInsight](https://docs.dapr.io/operations/monitoring/open-telemetry-collector/).
- Service invocation performance test results now published and available at the [dapr perf website](http://daprperf.azurewebsites.net/)
- Full review on the [Dapr CLI](https://docs.dapr.io/reference/cli/) to make command parameters consistent, update descriptions, provide more examples and add capabilities such as getting the [output for configuration](https://docs.dapr.io/reference/cli/dapr-configurations/).Note that this includes breaking changes.
- Improvements to the [Dapr metrics dashboards](https://docs.dapr.io/operations/monitoring/grafana/).
- Round robin load balancing of mDNS requests. This supports multiple app instances for a single standalone app id with round robin load balancing across them for environments that support mDNS, such a physical machines.  For example, if you have 1 instance of app A and 5 instances of app B and then call from A->B, Dapr round robins' between the 5 B instances.
- Added the option to specify whether Dapr should ignore errors when loading a component and continue initialization. See [here](https://docs.dapr.io/operations/components/component-schema/) for the new `ignoreErrors` field.
- [Dependency injection (DI)](https://github.com/dapr/dotnet-sdk/issues/505) for .NET actors
- Pub/Sub [per message time-to-live](https://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://docs.dapr.io/operations/security/app-api-token/)
- [MySQL output binding](https://docs.dapr.io/operations/components/setup-bindings/supported-bindings/mysql/)
- [MySQL state store](https://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
- Support for `data_base64` attribute when wrapping pubsub payload as CloudEvent. [2612](https://github.com/dapr/dapr/issues/2612)
- Java SDK uses Reactor's context builtin capabilities and does not have Context object as part of the request and response objects anymore. [478](https://github.com/dapr/java-sdk/issues/478)


## New in this release since 1.0.0-rc.3

### Dapr Runtime

- **RESOLVED** Add sha256sum to the released files [626](https://github.com/dapr/dapr/issues/626)
- **RESOLVED** oauth middleware not obtaining token [1699](https://github.com/dapr/dapr/issues/1699)
- **RESOLVED** Require versions in APIs [2297](https://github.com/dapr/dapr/issues/2297)
- **FIXED** Update E2E procedures to replace deprecated kafka chart [2450](https://github.com/dapr/dapr/issues/2450)
- **ADDED** Support for binary data when wrapping pubsub payload as CloudEvent. [2612](https://github.com/dapr/dapr/issues/2612)
- **RESOLVED** Update the license header in all files [2758](https://github.com/dapr/dapr/issues/2758)
- **RESOLVED** Apply access list url normalization [2768](https://github.com/dapr/dapr/pull/2768)
- **RESOLVED** Helm chart has duplicate securityContext attributes for dapr-sidecar-injector [2784](https://github.com/dapr/dapr/issues/2784)
- **RESOLVED** Allow duplicate query string parameters in service to service invocation [2786](https://github.com/dapr/dapr/pull/2786)
- **FIXED** gRPC app callback should use data_base64 CloudEvent field when present. [2794](https://github.com/dapr/dapr/issues/2794)

### Dapr CLI

- Fix Dapr stable version initialization [592](https://github.com/dapr/cli/issues/592)

### Components

- **RESOLVED** Azure Blob Storage Binding Expecting String for Data [492](https://github.com/dapr/components-contrib/issues/492)
- **RESOLVED** Remove Exporter Components now OpenTelemetry is adopted.  [508](https://github.com/dapr/components-contrib/issues/508)
- **RESOLVED** Allow DynamoDB state store to resolve credentials using AWS SDK credentials chain [647](https://github.com/dapr/components-contrib/issues/647)
- **RESOLVED** Support Kafka partition key in Pub/Sub [667](https://github.com/dapr/components-contrib/issues/667)
- **FIXED** handling of key not found in mongodb to return empty result instead of errror. [684](https://github.com/dapr/components-contrib/issues/684)
- **RESOLVED** Error when saving byte[] in cosmosdb [685](https://github.com/dapr/components-contrib/issues/685)
- **RESOLVED** Kafka pubsub can drop message in partial failures [687](https://github.com/dapr/components-contrib/issues/687)

### .NET SDK

- **RESOLVED** Handle content type of "application/octet-stream" in CloudEvent data [582](https://github.com/dapr/dotnet-sdk/issues/582)
- **RESOLVED** Add missing cancellation token [584](https://github.com/dapr/dotnet-sdk/issues/584)

### Go SDK

- **RESOLVED** Updates for next runtime RC [142](https://github.com/dapr/go-sdk/issues/142)

### Java SDK

- **RESOLVED** Fix PubSub publish + Update IT to use RC3 bits. [471](https://github.com/dapr/java-sdk/pull/471)
- **RESOLVED** Enhancing validation for ActorTurnBasedConcurrencyIT. [474](https://github.com/dapr/java-sdk/pull/474)
- **RESOLVED** Adds IT to confirm eTag is parsed correctly to/from runtime. [475](https://github.com/dapr/java-sdk/pull/475)
- **REMOVED** Context from request and response objects. [478](https://github.com/dapr/java-sdk/issues/478)
- **ADDED** Support many values for one query param in HTTP and binary data in Cloud Event for PubSub. [484](https://github.com/dapr/java-sdk/issues/484)
- **ADDED** Support to publish CloudEvent payload (and others) with correct content-type per event. [491](https://github.com/dapr/java-sdk/issues/491)

### Python SDK

- **ADDED** Autovalidation for python examples. [177](https://github.com/dapr/python-sdk/issues/177)
- **RESOLVED** Allow multiple query param values per key for service invocation [192](https://github.com/dapr/python-sdk/issues/192)

### Rust SDK

- **RESOLVED** update proto to the latest [30](https://github.com/dapr/rust-sdk/issues/30)
- **RESOLVED** Automate cargo package publish process [33](https://github.com/dapr/rust-sdk/issues/33)

### C++ SDK

- **RESOLVED** Update copyright header [27](https://github.com/dapr/cpp-sdk/issues/27)

### JavaScript SDK

- **RESOLVED** Upgrade proto to the latest [63](https://github.com/dapr/js-sdk/issues/63)

### Documentation

- **RESOLVED** Update troubleshooting guide for tracing [208](https://github.com/dapr/docs/issues/208)
- **RESOLVED** Improved the service invocation building block concepts doc [362](https://github.com/dapr/docs/issues/362)
- **RESOLVED** Provide guidance doc to use Prometheus queries to view Dapr metrics [707](https://github.com/dapr/docs/issues/707)
- **RESOLVED** Update the mTLS configuration doc to describe how to run Sentry control plan service locally [851](https://github.com/dapr/docs/issues/851)
- **RESOLVED** Establish a deprecation/support versions policy [864](https://github.com/dapr/docs/issues/864)
- **RESOLVED** Update docs for dapr/dapr#2338 [899](https://github.com/dapr/docs/issues/899)
- **RESOLVED** Binding documentation needed for Alicloud Object Storage (OSS) [970](https://github.com/dapr/docs/issues/970)
- **RESOLVED** Incorrect instructions for sending ETag [1071](https://github.com/dapr/docs/issues/1071)
- **RESOLVED** Updating K8s guidance to include app rollout step for when a cluster is completely restarted [1072](https://github.com/dapr/docs/issues/1072)
- **RESOLVED** Update Secrets API reference with the new Get Bulk Secret HTTP Response type [1089](https://github.com/dapr/docs/issues/1089)
- **RESOLVED** Add competing consumer concept to pub/sub overview docs [1093](https://github.com/dapr/docs/issues/1093)
- **RESOLVED** Add documentation for the "--dapr-http-max-request-size" argument for the CLI and "dapr.io/http-max-request-size"  annotation [1099](https://github.com/dapr/docs/issues/1099)
- **RESOLVED** Document all the environments variables used by developer in code and in the dapr CLI [1114](https://github.com/dapr/docs/issues/1114)
- **RESOLVED** Rework Azure Blob Storage documentation to be more clear [1122](https://github.com/dapr/docs/pull/1122)
- **RESOLVED** Update the component docs for bindings to capture all the metadata fields and have complete examples [1137](https://github.com/dapr/docs/issues/1137
- **RESOLVED** Update get-started-component.md [1139](https://github.com/dapr/docs/pull/1139)
- **RESOLVED** HTTP Binding missing information/outdated [1153](https://github.com/dapr/docs/issues/1153)
- **RESOLVED** CLI Upgrade command missing [1163](https://github.com/dapr/docs/issues/1163)
- **RESOLVED** Update the Kubernetes Hosting documentation [1168](https://github.com/dapr/docs/issues/1168)
- **RESOLVED** Update the Service Invocation Perf numbers for v1.0 [1169](https://github.com/dapr/docs/issues/1169)
- **RESOLVED** fixed typo in Service invocation overview [1170](https://github.com/dapr/docs/pull/1170)
- **RESOLVED** Remove retry policies section for state [1172](https://github.com/dapr/docs/issues/1172)
- **RESOLVED** v1.0 - Update RC related commands in "getting-started" [1188](https://github.com/dapr/docs/issues/1188)
- **RESOLVED** It is unclear which state store components support actors [1199](https://github.com/dapr/docs/issues/1199)

### Quickstarts

- **RESOLVED** Document steps to setup allow lists feature for self hosted mode [317](https://github.com/dapr/quickstarts/issues/317)
- **RESOLVED** Add OpenTelemetry collector agent instruction into quickstarts sample [324](https://github.com/dapr/quickstarts/issues/324)
- **RESOLVED** Kafka helm chart deprecated. [325](https://github.com/dapr/quickstarts/issues/325)
- **RESOLVED** Kubernetes quickstarts should point at 'latest' container tags. [346](https://github.com/dapr/quickstarts/issues/346)

### Test Infrastructure

- **RESOLVED** Update test-infra to v0.12.0 .Net SDK  [78](https://github.com/dapr/test-infra/issues/78)

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

Next, follow [these](https://github.com/dapr/cli#installing-dapr-cli) instructions to install the latest CLI version, or alternatively 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
```

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

```bash
$ dapr --version

CLI version: 1.0.0
Runtime version: 1.0.0
```

### Kubernetes

#### Upgrading from a 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 -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

*Note: If upgrading from Dapr 0.11.x, use the CLI to upgrade*

To upgrade Dapr using Helm, run:

```
helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update

helm upgrade dapr dapr/dapr --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

helm install dapr dapr/dapr --create-namespace=true --namespace dapr-system --wait
```

Alternatively, you can use the latest version of CLI:

```
dapr init -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.6.0    15s  2021-02-14 13:07.39
  dapr-sidecar-injector  dapr-system  True     Running  1         1.0.0   15s  2021-02-14 13:07.39
  dapr-sentry            dapr-system  True     Running  1         1.0.0   15s  2021-02-14 13:07.39
  dapr-operator          dapr-system  True     Running  1         1.0.0   15s  2021-02-14 13:07.39
  dapr-placement         dapr-system  True     Running  1         1.0.0   15s  2021-02-14 13:07.39
```

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

- **FIXED** handling of key not found in mongodb to return empty result instead of errror. [684](https://github.com/dapr/components-contrib/issues/684)
- **RESOLVED** Error when saving byte[] in cosmosdb [685](https://github.com/dapr/components-contrib/issues/685)


### Java SDK

- **REMOVED** Context from request and response objects. [478](https://github.com/dapr/java-sdk/issues/478)
- **ADDED** Support many values for one query param in HTTP and binary data in Cloud Event for PubSub. [484](https://github.com/dapr/java-sdk/issues/484)

### .Net SDK
- **RESOLVED** Handle content type of “application/octet-stream” in CloudEvent data [582](https://github.com/dapr/dotnet-sdk/issues/582)

### Python SDK

- **RESOLVED** Support multiple values for a single query param key in service invocation [192](https://github.com/dapr/python-sdk/issues/192)
