Skip to content

v0.7.1 — go provider family: Dapr embedded, no sidecar

Choose a tag to compare

@sideeffffect sideeffffect released this 13 Oct 01:25
· 15 commits to main since this release

A third provider family: Dapr itself, embedded in the component. No sidecar, and no HTTP or gRPC between the app and Dapr. The dapr-wasm-components:interfaces WIT package does not change since v0.7.0; the version moves to 0.7.1 only to tag this release. Apps need no change.

New

  • dapr-wasm-components-go-outbound (Go, built with componentize-go). It contains the Dapr runtime that daprd runs (github.com/dapr/dapr v1.18.7). Every building block is a direct call into that runtime. Configure it with daprd's own flags as the program arguments.
  • dapr-wasm-components-go-inbound (Rust, 117 KB). A small loop (wasi:cli/run) that takes Dapr's deliveries from go-outbound and calls the app's *-callback exports. The two components are a pair; the composed app has one Go runtime and one Dapr runtime.
  • compose.sh --out go composes the pair. Run the result with wasmtime run -S inherit-network -S tcp -S allow-ip-name-lookup ... composed.wasm --app-id my-app --resources-path /resources.
  • Values are raw bytes, so binary state roundtrips byte-exact.
  • e2e/tests/go.rs runs the same real-Dapr scenario as the sidecar suites (two runtimes, Redis pub/sub, Consul name resolution). CI runs it in the new go-e2e job.

Limits

  • Self-invocation does not work. The app is one long-running instance, so it cannot receive a call while it handles another. Invoking its own app id fails at once with app-unreachable. A call cycle A → B → A hangs unless you set a Dapr resiliency timeout.
  • Size: go-outbound is about 264 MB (the Dapr runtime plus component SDKs). The first wasmtime compile takes about 30 s.
  • Name resolution: mDNS cannot work in Wasm (no UDP multicast). Use Consul (or another resolver) and set DAPR_HOST_IP.
  • Dapr's HotReload feature is off: WASI cannot watch files.
  • Not every Dapr component is included: sqlite, Pulsar, Dubbo and some Azure components do not build for Wasm.
  • Actors, workflow and jobs are implemented but not yet covered by the real-Dapr test (it does not start placement and scheduler).

Details: README, wiki, PR #12.