
# Dapr 0.9.0

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

**Highlights**


* New components: [Scheduler binding](https://docs.dapr.io/operations/components/setup-bindings/supported-bindings/cron/), [PostgreSQL state store](https://docs.dapr.io/operations/components/setup-state-store/supported-state-stores/setup-postgresql/)
* Dapr dashboard Helm integration
* Command completion feature in Dapr CLI
* [Initialize Dapr without Docker dependency](https://docs.dapr.io/operations/hosting/self-hosted/self-hosted-no-docker/)
* [Transaction support in the Azure Cosmos DB component](https://docs.dapr.io/operations/components/setup-state-store/supported-state-stores/setup-azure-cosmosdb/)
* Dapr dashboard CLI command
* [Local development secret store](https://docs.dapr.io/operations/components/setup-secret-store/supported-secret-stores/file-secret-store/)
* [Modified Dapr init and uninstall behavior](https://github.com/dapr/dapr/blob/release-0.9/docs/decision_records/cli/CLI-002-self-hosted-init-and-uninstall-behaviors.md)

We would like to extend our thanks to all 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/).

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

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

## New in this release

### Dapr Runtime

**Integrated** Postgresql state store (Thanks @brooke-hamilton)

**Added** github actions workflow to push helm charts to githubpages helm repo

**Fixed** inappropriate HTTP API status codes

**Added** install dapr control plane to linux containers

**Added** Dapr dashboard Helm integration

**Fixed** state error messages

**Added** transaction support for actors using cosmos

**Added** injection of Dapr env vars in user container

**Improved** http/gRPC internal metadata handling

**Fixed** add trace headers if not provided in response

**Added** decision record for HTTP Appcallback versioning

**Added** Registering local secretstore (Thanks @cmendible)

**Added** Dapr dependencies in e2e test apps whenever proto has breaking changes

**Added** functionality to remove default components dir

**Fixed** stateapp dockerfile

**Renamed** default config to daprsystem config

**Changed** servicediscovery pkg to nameresolution pkg and remove mdns code

**Added** sidecar injector readiness/liveness probe path adjustement (Thanks @piotr.mscichowski)

**Fixed** return GRPC OK for 2xx http status code

**Fixed** Helm chart installation issue with missing package

**Added** ARC-004-http-server ADR

**Fixed** 1s delay for service invocation on selfhost mode

 **Fixed** TestSignCSR flaky test

**Added** destination appID target and header tests


### Dapr CLI

**Added** command completion feature to Dapr CLI (Thanks @halation3)

**Added** support to initialize dapr without docker dependency

**Added** new CLI dapr dashboard command (Thanks @gdhuper)

**Added** support in the dashboard to accept -n namespace argument

**Updated** standalone dapr init and uninstall behavior (#breaking-changes)

**Updated** cli documentation to cover all command options (Thanks @halation3)

**Updated** linter version to 1.26

**Fixed** timeout for linter

**Added** tracing config, Zipkin component on init

**Updated** dapr init behavior to create default component files (#breaking-changes)

**Fixed** path truncation issue with Windows

**Added** functionality to pass components folder to daprd


### Components

**Added** transaction support in the Cosmos db component

**Fixed** json array envelope parsing

**Fixed** double envelope when published payload is already a cloud event

**Added** support output to Twitter binding

**Added** PostgreSQL State Store (Thanks @brooke-hamilton)

**Updated** cloudevent identification

**Added** scheduler (cron) binding

**Fixed** Azure Service Bus lock renewal per topic (Thanks @jjcollinge)

**Added** functionality to handle errors in AzureEventHubs.Read (Thanks @nilstschmidt.de)

**Fixed** enableTLS to work as per the config for Apache Pulsar (Thanks @khous)

**Fixed** context deadline exceeded issue with an operation timeout

**Renamed** and refactored servicediscovery to nameresolution pkg

**Updated** setting URL in mongoDB component to make username/password optional

**Refactored** JSONSecretStore to LocalSecretStore (Thanks @cmendible)

**Fixed** the minimum delay of 1s for service invocation


### Java SDK

**Fixed** content-type for Spring controller

**Updated** use of TypeRef for deserialization and client APIs

**Updated** samples to use --components-path

**Fixed** documentation for samples directory


### .NET SDK

**Updated** dotnet sdk in github actions

**Fixed** actor method names in getting started guide (Thanks @@LayZeeDK)

**Fixed** InvokeAsync example in getting started guide (Thanks @@LayZeeDK)

### Rust/Go SDK

**Added** pub sub example (Thanks @gdhuper)

**Updated** and Beautified code snippet (Thanks @franpog859)


### JS-SDK

**Updated** workflow to publish npm package

**Updated** package.json of samples


### Docs

**Added** threat model image png

**Added** readme note for uninstall in linux

**Updated** minor style guide changes to hybrid-clusters howto stub

**Fixed** typo in setup-azure-servicebus.md (Thanks @candreso)

**Added** docs for dapr init without Docker

**Updated** Put a note that Windows containers are not supported in Kubernetes

**Updated** Cosmos documentation for transaction changes

**Moved** Kubernetes hybrid-cluster guide howto

**Added** Kubernetes docs for installing dapr to hybrid windows/linux clusters

**Updated** Azure Service Bus metadata (Thanks @jjcollinge)

**Updated** section related to output binding support

**Updated** documentation related to PostgreSQL (Thanks @brooke-hamilton)

**Updated** bindings_api.md

**Added** cron binding documentation

**Added** binding listing, docs on canceling schedules

**Added** local development secret store how to (Thanks @cmendible)

**Added** docs for injecting env vars

**Updated** to rename default config to daprsystem config

**Updated** docs for Zipkin initialization

**Updated** with missing Kafka link in reference section

**Updated** component-secrets.md

**Updated** W3C tracing docs to describe how to use tracing in your applications

**Added** Dapr with Docker docs (Thanks @jjcollinge)

**Updated** the doc as how to retrieve the response headers

**Added** How to Use W3C Trace Context

**Added** link from main observability how-to

**Updated** Grafana dashboard - dapr sidecar dashboard and add new actor dashboard #634

**Added** links to videos from the community calls

**Updated** Event Hubs doc

**Updated** Pub/Sub index


## Upgrading to Dapr 0.9.0

If you're upgrading from an older version of Dapr to 0.9.0, 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. Note that this will remove the default .dapr directory, binaries and all containers dapr_redis, dapr_placement and dapr_zipkin. Linux users need to run sudo if they have installed binary in default path /usr/local/bin/ or have docker command needing sudo.:

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

Next, get the latest CLI following [these](https://github.com/dapr/cli#installing-dapr-cli) instructions, 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 downloaded the CLI, run:

```bash
dapr init
```

Wait for the update to finish, and you're good to go!
Make sure you have the right runtime version (0.9.0) with:

```bash
dapr --version
```

### Kubernetes

Download the latest CLI release as outlined above in the `Local Machine / Self-hosted` section.

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

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

It's fine to ignore any errors that might show up.

If you previously installed Dapr using __Helm 2.X__:

```bash
helm del --purge dapr
```

If you previously installed Dapr using __Helm 3.X__:

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

Update the Dapr repo:

```bash
helm repo update
```

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

You can now follow [these](https://docs.dapr.io/getting-started/install-dapr/#install-with-helm-advanced) instructions on how to install Dapr using __Helm 3__.

Alternatively, if you want to install Dapr in a dev/test setup, run:

```
dapr init --kubernetes
```

#### Post installation

After Dapr 0.9.0 has been installed, perform a rolling restart for your deployments.

## Breaking Changes

### Standalone dapr init and uninstall behavior
* dapr uninstall --all now removes the default .dapr directory and binaries
* dapr init fails if a previous version is installed. You will need to run dapr uninstall first.
* dapr init now deploys a local Zipkin container by default for use with local diagnostic testing.

### Dapr init behavior to create default component files
* The default component files are  now created during dapr init time.

### Cosmos DB partition key setup and usage

The name of the required partition key has changed from `/id` to `/partitionKey`.  Please see [this](https://docs.dapr.io/operations/components/setup-state-store/supported-state-stores/setup-azure-cosmosdb/) for more details.
