

# Dapr 0.5.0

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

This release introduces a *new* Secrets API to get application secrets, comprehensive metrics for the Dapr runtime as well as Dapr's system components, the ability to scope components to a namespace and/or a list of authorized apps, improved logging with JSON output, tracing support for Pub/Sub, new components, retries for bindings and general bug fixes and stability improvements.

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/install-dapr/) 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 [Developing applications](https://docs.dapr.io/developing-applications/) section.

*__Note: This release contains a few minor breakings. See [breaking changes](#breaking-changes).__*

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

## New in this release

### Dapr Runtime

**Added** API for getting application secrets from any Dapr supported Secret Store (Thanks @cmendible)

**Added** Prometheus metrics API endpoints (Thanks @jjcollinge)

**Added** Ability to scope components to a namespace, as well as to a list of authorized apps

**Improved** Host IP choosing process in self-hosted mode

**Fixed** Case where user app returned an error and the runtime would return success to an input binding, causing the message to be removed without being processed

**Fixed** Crash in service invocation over gRPC with no data in payload

**Added** Tracing for Pub/Sub messages

**Added** Metrics groups including process and runtime level metrics

**Improved** Logging messages and error details for components

**Added** JSON formatted logs

**Fixed** Possible crash where service invocations were allowed before certificate was issued (Thanks @lynn-orrell)

**Improved** Docker build to allow multi-arch images

**Fixed** Custom Content-Type being overridden in service invocation

**Renamed** `HOST_IP` environment variable to `DAPR_HOST_IP` to manually set the Host IP for the runtime

**Changed** HTTP Get State API to return `204` instead of `200` when a key does not exist

### Components

**Added** AWS Secret Manager Secret Store (Thanks @sayboras)

**Added** GCP Secret Manager Secret Store (Thanks @dev-drprasad)

**Added** Ability to set the `toNumber` on a per-call basis for the Twilio binding (Thanks @ksivamuthu)

**Updated** Secret Store Index (Thanks @RicardoNiepel)

**Updated** Azure Event Hubs binding to use Event Processor Host (Thanks @abhirockzz)

**Fixed** SQL Server returning error for key not found

### CLI

**Changed** `dapr list` and `dapr run` to rely on metadata API, fixing sync issues and zombie processes

**Added** `-k` shorthands for all Kubernetes specific commands (Thanks @CarlosLanderas)

**Fixed** Error message showing on with `dapr uninstall --kubernetes` even if successful

**Fixed** One line installer downloading wrong version

**Changed** All `dapr-id` occurrences to `app-id`

**Fixed** K8s client init when multiple contexts exist in KUBECONFIG (Thanks @CarlosLanderas)

**Updated** CLI to provide warning when overriding local component YAMLs

**Added** Ability to run CLI with the Dapr runtime without an app

### System Components

**Added** Metrics endpoint for Sidecar-Injector

**Added** Metrics endpoint for Kubernetes Operator

**Added** Metrics endpoint for Sentry CA

**Added** Metrics endpoint for Actors Placement Service

### .NET  SDK

**Added** Secrets API support

**Improved** Client APIs for gRPC

**Refactored** Separate Clients into a single API Client

**Added** Concurrency model for state operations (Thanks @rynowak)

**Added** Consistency model options for state operations (Thanks @rynowak)

**Added** editorconfig and removed Stylecop.Analyzers dependency

**Updated** Actor serialization to JSON by default

**Updated** Usage of Newtonsoft.Json package to System.Text.Json

### Java SDK

**Fixed** Hot monos in gRPC client

**Added** Secrets API support

**Fixed** Swallowing actor exceptions

**Added** Strongly typed actors

### Samples

**Fixed** Node.JS subscriber in Pub/Sub sample

**Fixed** Output message for Python in Bindings sample

### Docs

**Added** Observability (metrics/logs) concepts

**Added** Grafana dashboard template

**Changed** `Dapr ID` to `App ID` for consistency

**Fixed** Pub/Sub API reference (Thanks @lynn-orrel)

**Updated** Azure Event Hubs binding spec

**Refactored** Concepts and API references structure

**Added** Monitoring tools(metric and logs) setup How-To tutorial

**Added** Secrets API How-To tutorial

**Updated** Diagrams

**Added** AWS Secret Manager How-To tutorial

**Added** GCP Secret Manager How-To tutorial

**Added** Azure Storage Queues binding spec

**Added** Azure KeyVault documentation

**Added** Component authorization How-To tutorial

**Added** Documentation for metrics monitoring tools

**Added** Documentation for logs monitoring tools

**Added** Cheat-sheet for common diagnostics queries

## Upgrading to Dapr 0.5.0

If you're upgrading from an older version of Dapr to 0.5.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:

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

```
dapr init
```

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

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

```
dapr uninstall --kubernetes
```

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

If you previously installed Dapr using __Helm 2.X__:

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

If you previously installed Dapr using __Helm 3.X__:

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

```
helm repo update
```

Wait until Dapr is uninstalled, and make sure the `dapr-system` namespace is gone.

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

## Breaking Changes

### Azure Event Hubs Binding

The Azure Event Hubs binding is now using Event Processor Host to provide reliable checkpointing.
The updated YAML spec can be found [here](https://docs.dapr.io/operations/components/setup-bindings/supported-bindings/eventhubs/).

### Host IP Environment Variable

The environment variable `HOST_IP` is now changed to `DAPR_HOST_IP`.

### DAPR-ID parameter removed

When launching Dapr manually with the `daprd` binary, to specify the ID of the app, use `app-id` instead of `dapr-id`.

### Status Code for missing key in Get State API

The HTTP Get State endpoint will now return `204 Not Found` status code instead of `200 OK`.
