Skip to main content
← Back

wadm Config Reconciliation, the Single wash CLI & KubeCon EU

The March 12, 2025 wasmCloud community call is a tooling-focused update for anyone building on the Wasm component model. Brooks Townsend demos a wadm reconciliation fix that takes local application deploys from around 15 seconds down to under one second by reacting to configuration events instead of waiting for a heartbeat. The team also marks the completion of the long-running merge of wash-cli and wash-lib into a single wash crate, previews wasmCloud's presence at KubeCon EU and WasmIO in Barcelona, and digs into tracing and observability for capability providers.

Key Takeaways

  • A bug in wadm's reconciliation logic made components with runtime configuration sit in reconciling until the next host heartbeat — fixing it so the scaler reacts to the config-created event cuts local deploys from roughly 15 seconds to under one second
  • wasmCloud uses the WASI runtime config interface to supply configuration to components and capability providers at runtime — things like a response language or a port to listen on — and that config is now reconciled before the component or provider starts
  • Community contributor mark added the ability for wash up to pull the latest patch version of the bundled NATS server and wadm automatically, so most users get the reconciliation speedup just by upgrading
  • The wash-cli and wash-lib crates are now merged into a single wash crate on crates.io; wash-lib lives on as a module with the same structure, so embedding users see minimal breakage, and the feature freeze on wash is lifted
  • Thanks to maintainer Ahmed for doing the bulk of the merge work; consolidating to one crate means one release instead of two and sets up future internal refactors of one of wasmCloud's longest-lived crates
  • KubeCon EU (London) and WasmIO (Barcelona) are weeks away, with wasmCloud talks across the maintainer and platform-engineering tracks, a wasmCloud booth all week now that the project is incubating in the CNCF, and a Couchbase-led wasmCloud workshop at WasmIO
  • For tracing in internal (host-built-in) providers, trace context is carried automatically through the function context, so you generally don't call the propagate-trace step the way external wRPC providers do; the built-in HTTP server uses hyper directly for the most control and performance
  • Improving the integration testing framework (especially around the provider SDK and its global state) is on the Q1 roadmap

Chapters

Meeting Notes

Demo: wadm Config Reconciliation Speedups

Brooks opened with a demo born out of a pairing session with wasmCloud users who hit annoying behavior in the local dev experience. He deployed a lightly modified Rust "hello world" component that supplies a piece of runtime configuration via the WASI runtime config interface — the same mechanism you'd use to set things like a response language or a listening port on either a component or a capability provider.

The symptom: the HTTP server provider reconciled quickly and the link was defined, but the component then sat in reconciling far longer than a ~200 KB Wasm module should need to start. The root cause was a small bug in wadm's reconciliation logic. wadm reconciles a component's configuration first, then starts the component — but when the config was created it didn't trigger a pass on the component's scaler, so nothing started until the next host heartbeat arrived. The fix makes the individual scaler react to the configuration-created event (with similar experimentation under way for links), so the component is scheduled immediately. The result: local deploys drop from around 15 seconds to under one second, and end-to-end tests appeared to run nearly twice as fast.

Brooks also credited community contributor mark, who implemented wash up pulling the latest patch version of the bundled NATS server and wadm automatically — so most users pick up the reconciliation improvement simply by upgrading.

Release Cadence: Ship Patches as They Land

Brooks reiterated wasmCloud's recent practice of cutting releases as soon as new functionality or patches are ready. This wadm patch shipped with just the one fix, which keeps changelogs clean and gets improvements into users' hands as quickly as possible. Feedback on the faster cadence is welcome.

wash-cli and wash-lib Are Dead — Long Live wash

The long-running effort to merge wash-cli and wash-lib into a single wash crate is complete. The wash name on crates.io was transferred from its original owner (a big thank-you to them). The old wash-cli and wash-lib crates remain published but will no longer receive updates.

For most users this is a non-event — unless you installed via cargo install wash-cli, in which case you'll switch your scripts to install wash. There were no feature changes between 0.39 and 0.40, so upgrading is safe. Library consumers will find that wash-lib now lives as a module inside the merged crate with the same internal structure, minimizing breakage; file an issue if anything is misplaced. Huge thanks to maintainer Ahmed, who did the vast majority of the merge work. With the merge done, the feature freeze on wash is lifted, and the team expects future internal refactors to modernize one of wasmCloud's longest-lived crates. For more on the CLI, see the wash docs and the developer guide.

Countdown to KubeCon EU and WasmIO

WebAssembly is woven throughout the KubeCon EU (London) schedule, and the dedicated WasmIO conference runs right before KubeCon in Barcelona. Liam ran through the wasmCloud-adjacent talks across the platform-engineering and maintainer tracks (including "wasmCloud's Wild Ride to Standards" and "Can You Maintain 1000 Apps? wasmCloud and Kubernetes"), Jonas's talks on meshing WebAssembly and SPIFFE identity for Wasm workloads, and Taylor's runtime and ecosystem-review sessions. Now that wasmCloud is incubating in the CNCF, there will be a wasmCloud booth open all week, plus time at the TAG Runtime booth and the Couchbase team's wasmCloud workshop at WasmIO. If you're attending, say hello in Slack or stop by the booth.

Publishing a Demo Component

Colin Murphy asked where to publish a demo component for a talk. Brooks recommended GitHub Packages, which is well supported — you can wash push directly to GitHub (the package starts private, so flip it to public), using either your own org or the wasmCloud org with a scoped personal access token. See the build-and-publish guide for the workflow.

Tracing and Observability in Internal Providers

Community member ossfellow asked whether internal (host-built-in) providers face restrictions on using the observability macro. Brooks explained there are no hard restrictions: for internal providers, trace context is carried automatically through the function context, so you generally don't need to call the propagate-trace step the way an external wRPC provider does. The remaining work is making sure a trace context on an incoming HTTP request creates a new span in the same trace, and that outgoing requests inject trace context into headers for downstream systems. For the built-in HTTP path, the recommendation is to work directly with the Wasmtime wasi-http types and use hyper as the low-level framework — hyper sits under reqwest anyway, so it gives the most control and best performance.

NATS Blobstore Provider and the Testing Framework

ossfellow also checked in on the NATS blobstore provider PR. The remaining blocker was a set of CI failures on main (a tracing-crate stack overflow surfaced only in debug-mode tests, unrelated to the PR's content) — Brooks offered to handle a rebase. The conversation circled back to a recurring theme: the integration testing framework needs investment. The wasmCloud-test-util exists, but integrating with the provider SDK is challenging because of global state that forces tests to run one at a time. Revisiting the testing framework is on the Q1 roadmap, and the team agreed to track the gaps as testing debt.

WebAssembly News and Updates

This week's headline news from the broader WebAssembly ecosystem is the run-up to KubeCon EU in London and the dedicated WasmIO conference in Barcelona, where WebAssembly has been incorporated across cloud-native tracks rather than siloed into a single co-located event. wasmCloud's incubation in the CNCF means a full-week project booth and presence at the TAG Runtime booth. On the tooling side, the consolidation of wash into a single crate and the wadm reconciliation speedup are the practical updates most builders will feel day-to-day. For the WebAssembly standards picture, the Bytecode Alliance and the component model repositories remain the canonical places to follow progress.

What is wasmCloud?

wasmCloud is a CNCF project that lets you build applications using WebAssembly components and deploy them anywhere — cloud, edge, or Kubernetes clusters. It uses the WebAssembly component model to let you write business logic in any supported language (Rust, Go, Python, TypeScript, and C#) while the platform handles capabilities like HTTP, messaging, and key-value storage through a pluggable provider architecture. wasmCloud's host is built on Wasmtime, and applications are described declaratively and reconciled by wadm, wasmCloud's application deployment manager. With built-in OpenTelemetry observability and Kubernetes integration, wasmCloud bridges WebAssembly's portable, sandboxed execution model and production cloud-native infrastructure.

Topic Deep Dive: The Wasm Component Model

Both of this call's headline updates trace back to the Wasm component model. The wadm reconciliation fix is about getting WebAssembly components — small, portable, typed units of business logic — scheduled the instant their configuration is ready, rather than stalling until a heartbeat. That matters precisely because components are so lightweight that a multi-second wait is pure overhead, not load time. The single wash crate, meanwhile, streamlines the developer tooling that builds and ships those components, from wash build through wash push to an OCI registry. And the tracing discussion is about making component-and-provider interactions observable end-to-end — propagating trace context across the transport so a request can be followed from an external caller, through the host, into a component, and back out again. As the component model matures, wasmCloud's bet is that the same declarative deploy, OCI distribution, and observability model works uniformly across languages and runtimes. To go deeper, start with the components overview and the interfaces docs, and read how wasmCloud 1.0 brought components to the enterprise for the bigger picture.

Who Should Watch This

This call is especially valuable for wasmCloud operators and platform engineers who deploy applications locally and will feel the wadm reconciliation speedup immediately (start at the demo), Rust developers and crate consumers tracking the wash-cli/wash-lib merge and how to update their installs (the merge discussion), and capability-provider authors working on tracing and observability who want to know how internal providers differ from external ones (the observability deep dive). Anyone heading to KubeCon EU or WasmIO will also want the events rundown.

Up Next

The next two community calls before KubeCon are expected to be regular meetings, with the KubeCon-week call likely broadcast from the conference floor as a quick update. Watch for the rest of the wash rename cleanup landing in CI, follow-up on the NATS blobstore provider PR, and the Q1 work to revisit the integration testing framework. For deeper background, the Documentation of the Week is the OCI packaging guide referenced in the demo-component discussion, and the Issue of the Week is the wadm reconciliation work covered above.

Get Involved

wasmCloud is a CNCF project and contributions are welcome. Join the community:

Full Transcript

Read the complete transcript with speaker labels and timestamps:

Read the full transcript →