mrkeyoor.com_
Tue 01 Sept 17:42 UTC
Self-Hostedevaluationupdated 30 Aug 2026

dapr review

Dapr is a sidecar runtime that gives applications common distributed-system capabilities through HTTP and gRPC APIs. It handles service calls, state, messaging, workflows, actors, secrets, scheduled jobs, and LLM access so application code does not have to bind directly to every backing service.

+8 / 2dstars / 7d
Verdict

Our Dapr run built successfully, but 21 of 239 test targets failed, so adoption should begin with a production-shaped proof rather than faith in the local build. Dapr makes sense for a platform team standardizing several distributed capabilities across languages, especially when sidecars are already an acceptable cost. A small service using one broker and one database will usually be easier to operate without it.

We ran it

Lab card: what happened when we ran daprScreenshot of dapr (dapr.io)
Install✓ · 193s1338 packages
Build✓ · 229s
Tests✗ · 168s218 passed · 21 failed of 239 (go test)
Repo4524 files~535,895 lines of source · 36 MB · 23 CI workflows · tests dir

Answers from our run

Does dapr build from source?

Dependencies installed in 193 seconds (1338 packages), and the build succeeded in 229 seconds. We cloned commit 6cf57ab into a clean Debian container with 3 CPUs and no project-specific setup.

Do dapr's tests pass?

Not all of them: 218 of 239 passed and 21 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use dapr?

A single service that only needs one database or broker: Dapr adds a sidecar and operating model whose value appears when several building blocks are in use.

What are the alternatives to dapr?

Temporal, Istio, NATS Server. Our Dapr run built successfully, but 21 of 239 test targets failed, so adoption should begin with a production-shaped proof rather than faith in the local build.

Setup2/5Build passed; 21 test targets failed and deployment adds sidecars
Docs5/5Concepts, APIs, SDKs, components, and deployment paths are documented
Community5/526,046 stars, current pushes, and 440 issues and PRs
Maturity4/5CNCF graduated with active fixes for serious runtime faults

Discussed on

  1. hnProject includes a dependancy that has a license that forbids its use213 points
  2. hnShow HN: New Agentic AI Framework in CNCF23 points
  3. hnShow HN: Document agent example that can parse and chat over unstructured data15 points
  4. hnShow HN: CNCF announces Dapr Agents, a vendor-neutral AI framework10 points

Who it’s for

Platform teams supporting several services, languages, and infrastructure backends.
Application teams that want state, pub/sub, service invocation, or workflows behind the same local API.
Kubernetes operators prepared to own sidecars, control-plane services, component definitions, and observability.
Teams building durable workflows or agents that must resume after process and node failures.

Who it’s NOT for

A single service that only needs one database or broker: Dapr adds a sidecar and operating model whose value appears when several building blocks are in use.
Systems that require exactly-once event delivery: the README describes pub/sub as at-least-once, so handlers must tolerate repeats.
Teams expecting every connector and SDK in this repository: the README points to separate components-contrib, SDK, CLI, docs, quickstart, and sample repositories.
Workflow operators who need list, history, and rerun support through every SDK today: open issue 9729 asks for those runtime operations to be wrapped across the SDKs.
Small teams without time to test upgrades under real traffic: v1.18.3 fixed sidecar crashes, stuck workflows, dropped terminations, scheduler faults, and pub/sub delivery failures.

Setup reality

Our sandbox installed 1,338 Go packages in 193 seconds. The build succeeded in 229 seconds. Tests failed with exit code 1 after 168 seconds: 218 passed and 21 failed out of 239.

Building the runtime is only the first layer. A useful deployment needs the Dapr CLI or Kubernetes setup, a sidecar beside each app, component definitions, and whichever state stores, brokers, secret stores, or LLM providers those APIs call. Those external systems bring their own credentials.

The failing log tail showed several integration framework, performance, Kubernetes, runner, and utility packages passing, then only a final FAIL line. It did not identify the 21 failing packages or a cause, so the result cannot support a narrower diagnosis.

Dapr pays off when several distributed problems meet

Dapr runs beside an application as a process or container and exposes its capabilities over HTTP or gRPC. Application code calls Dapr for state, pub/sub, service invocation, secrets, configuration, jobs, locks, cryptography, workflows, actors, bindings, or conversations with language models. Native SDKs exist for several languages, but the network API is the important boundary: services written in different stacks can use the same runtime contract.

The breadth is the attraction and the warning. A platform team can present one approved way to call services, store state, publish events, and retrieve secrets. A team using only 1 of those APIs inherits the sidecar, configuration model, and release process without much consolidation benefit. Dapr is easier to justify across a fleet than beside one uncomplicated application.

Durable workflows depend on state and runtime operations

Dapr Workflows persist progress so an execution can resume after process crashes, pod restarts, node failures, rolling deployments, or other infrastructure interruptions. The same mechanism is pitched for business processes and long-running agents. Actors add another stateful programming model, while the Conversation API connects LLM providers with prompt caching and tool calls. These pieces can share Dapr's identity, messaging, and state interfaces.

Durability does not remove backing infrastructure. Workflows and actors need a correctly configured actor state store, and applications still choose the component implementation behind every API. Open issue 9729 also shows an administrative gap: the runtime has operations for listing workflow instances, reading history, and rerunning failures, but the issue asks for all SDKs to expose them. Operators may need direct gRPC access until their chosen SDK catches up.

What happened when we ran it

Our fresh Debian sandbox installed 1,338 Go packages in 193 seconds. Building commit 6cf57ab succeeded in 229 seconds. The repository had 4,524 files, roughly 535,895 lines of source, and a 36 MB checkout. We found 23 CI workflow files and a tests directory, but no Dockerfile in the repository root.

Tests ended with exit code 1 after 168 seconds: 218 passed and 21 failed out of 239. The supplied tail listed successful packages for integration helpers, metrics, scheduler proxies, performance, Kubernetes platforms, runners, load testing, summaries, and utilities. It then printed FAIL without the individual failing package names or error messages. That evidence tells us the suite was red, but not why.

The failure happened in an unprivileged container with 3 CPUs, 8 GB of RAM, and no secrets. A fresh environment can expose unstated service or system-package requirements, yet this log does not show either. Teams evaluating Dapr should rerun the failing targets with full logs and the services their intended components require. Calling the suite healthy because many packages passed would hide the 21 failures.

At-least-once messaging puts duplication in your application

Dapr's pub/sub API separates application code from a specific broker, and service invocation adds retries, tracing, and mutual TLS around calls. Component definitions select the actual state store, queue, vault, or cloud service. This can make a platform change less invasive because the application-facing API stays stable while the backing component changes.

The README explicitly describes pub/sub as at-least-once delivery. Consumers therefore need idempotency or another way to cope with repeated events. Release v1.18.3 is a useful reminder of the failure modes around that boundary: it fixed a crash caused by a non-string trace field in an HTTP CloudEvent and a gRPC delivery problem involving closed connections. The release also notes that redelivery behavior depends on the broker component.

Security defaults still need policy and component work

Dapr issues workload identities and supports mutual TLS between applications. Access policies can deny traffic by default and allow named applications. Secret APIs keep vault-specific clients out of application code, while cryptography APIs can operate without exposing keys to the application process. These are good building blocks for a platform standard.

They are not a finished security policy. Operators decide which identities may call which apps, where component credentials live, how certificates and secrets are rotated, and which API surfaces are enabled. Every added state store, broker, or cloud service brings its own permissions. The README's claim that Dapr runs across Kubernetes, clouds, virtual machines, edge hosts, and air-gapped systems describes portability of the runtime model, not identical operational work on 5 environments.

Version 1.18.3 fixed failures worth testing in upgrades

The latest release was v1.18.3 on August 14, 2026. Its fix list includes an actor state store that could not be hot reloaded, sidecars disconnecting from Placement, scheduler shutdown and redelivery faults, stalled workflows that could remain stuck, workflow termination events that could be dropped, and Azure authentication fallback that could stop too early. One fix prevented malformed trace data from crashing an HTTP pub/sub sidecar.

Those are specific production faults in core paths. Their fixes show maintainers responding, while their severity argues for staged upgrades, workload-specific regression tests, and an exit plan for sidecar failures. Dapr had 26,046 stars and 440 combined issues and pull requests when fetched. The last push was August 28, 2026, so the issue count sits alongside current development rather than a dormant repository.

The repository is one part of the product

The main repository contains the Go runtime and overview material. The CLI, documentation, quickstarts, samples, contributed components, and language SDKs live in separate repositories. That split is reasonable for a project this large, but a source audit of dapr/dapr alone cannot verify the connector or SDK version your application will use.

Dapr is a strong platform choice when a team is already paying separately for workflow durability, messaging wrappers, service identity, state adapters, and secret integrations. Our 193-second install, 229-second build, and failed test step describe a codebase with real weight and a test result that needs investigation. Trial the exact APIs, components, SDKs, and failure scenarios you plan to operate before making the sidecar a dependency of every service.

Alternatives

ProjectWhat it isPick it when
Temporal gh↗A server and SDK platform centered on durable application workflows.pick this instead when workflow durability is the main requirement and Dapr's wider API set would go unused.
Istio gh↗A Kubernetes service mesh focused on traffic, identity, policy, and telemetry.pick this instead when service-to-service networking is the problem and application state or workflow APIs are unnecessary.
NATS Server gh↗A messaging server with pub/sub, request/reply, persistence, and streaming.pick this instead when messaging is the whole job and your applications can use a broker client directly.

What people are saying

  1. [github-trending] dapr/dapr

Sources

  1. Dapr README
  2. Dapr runtime v1.18.3 release
  3. Workflow management SDK issue 9729
  4. Pub/sub root span issue 9990
  5. Dapr getting started guide

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →