Dapr — Overview#
Identity#
- Module path: github.com/dapr/dapr
- Go version: 1.26.1
- License: Apache 2.0
- Repository: https://github.com/dapr/dapr
Purpose#
Dapr (Distributed Application Runtime) is a portable, event-driven runtime that makes it easy for developers to build resilient, stateless and stateful microservice applications across cloud and edge environments. It solves the hard infrastructure problems in distributed systems — pub/sub messaging, state management, service-to-service invocation, secret management, workflow orchestration, and actors — by exposing them as standardized HTTP/gRPC APIs through a sidecar process. The sidecar model means any language or framework can use Dapr without importing a SDK or library.
Significance#
Dapr is a CNCF graduated project with broad industry adoption, particularly among platform engineering teams building internal developer platforms. Its sidecar architecture and language-agnostic API model make it influential as a reference design for “infrastructure as API” — abstracting away vendor-specific SDKs for messaging, storage, and secrets behind a stable, portable interface. With official SDKs for Go, Java, .NET, Python, JavaScript, Rust, and C++, it has one of the largest polyglot ecosystems among CNCF runtimes. Its pluggable component model (via the separate components-contrib repository) is widely cited as a pattern for vendor-neutral infrastructure integration.
Key metrics#
- Go files: 2,339
- Top-level directories: cmd, dapr, charts, docker, docs, grafana, img, pkg, swagger, tests, tools, utils
- Direct dependencies: 83
- Size tier: L (500–2000 .go files range; this project sits at the upper end)
Notable characteristics#
- Sidecar architecture: The runtime runs as a separate process (or container) injected alongside each application instance, communicating via localhost HTTP or gRPC. This is the defining structural decision of the entire project.
- Pluggable component system: Dapr’s building blocks (state stores, pub/sub brokers, secret stores, bindings) are implemented as pluggable components in the separate
components-contribrepo, consumed via interface abstractions. This enables swapping Redis for CosmosDB without code changes. - Multiple transport protocols: Supports both HTTP and gRPC natively. The project uses
connectrpc.com/connectalongside standardgoogle.golang.org/grpc, and includes its own proto-defined API surface. - Actor model built-in: Implements virtual actors (similar to Orleans / Akka) with placement service, reminder scheduling via
diagridio/go-etcd-cron, and durable workflow viadapr/durabletask-go— making it one of the few CNCF projects to ship a production actor runtime. - Deep Kubernetes integration: Ships its own Kubernetes operator, CRDs, and controller via
sigs.k8s.io/controller-runtime, but also runs in self-hosted mode — the same binary serves both deployment targets, with configuration determining the hosting model.