Skip to main content
← Back

wasmCloud Monorepos & Composing Wasm Components Across Languages

The January 8, 2025 wasmCloud community call is about making the project's polyglot tooling easier to find and contribute to — and about what the Wasm component model unlocks once you do. Jonas Bergius walks through the new wasmCloud/go monorepo and its experimental x namespace, Lachlan Heywood shows the matching wasmCloud/typescript repo and a Changesets-based contribution flow, and Colin Murphy demos composing a Rust component with a Node.js component using JCO and wac to build a C2PA content-credentials handler. The call closes with a reminder about Q1 2025 roadmap planning and a Q&A on how WASI and wasmCloud interface versions are released.

Key Takeaways

  • The wasmCloud/go monorepo consolidates the Go component SDK, provider SDK, client libraries, examples, and templates under a single namespace and vanity URL, so the upstream Go module cache makes the move seamless and existing imports keep working
  • An experimental x namespace gives the Go ecosystem a place to ship in-progress ideas — like an OpenTelemetry exporter usable from inside a component (gated today by TinyGo's Protocol Buffers limitations) and a Go client library for talking to wasmCloud
  • The wasmCloud/typescript monorepo does the same for TypeScript/JavaScript, housing the washboard app plus the lattice-client-core and lattice-client-react packages, with NPM releases automated off tag pushes
  • Changesets is being trialed to lower the bar for new contributors — maintainers can add a changeset file to a PR instead of asking contributors to rewrite and force-push Conventional Commits
  • Example READMEs now sync nightly into the docs site, making every example searchable and linkable at wasmcloud.com starting with Go and expanding to other languages
  • Colin's C2PA demo composes two components in different languages — a Rust component that reads content-credential provenance and a Node.js front door — fused with wac and run via JCO, all from a single WIT interface
  • C2PA is "an SBOM for content": provenance metadata signed into images, video, and PDFs, backed by camera makers, Adobe, and major platforms — a strong real-world case for component composition
  • WASI interfaces follow a "train" release model (a regular cadence every couple of months until WASI 0.3), while draft interfaces can be cut anytime and wasmCloud-namespaced interfaces roll more slowly for stability

Chapters

Meeting Notes

Consolidating the Go Ecosystem under wasmCloud/go

With Brooks on vacation, Liam Randall hosted and handed off to Jonas Bergius, who walked through the consolidation of most of the project's Go repositories into a single wasmCloud/go namespace. Building components, providers, client libraries, examples, and templates now live in one place, surfaced through a self-explanatory top-level layout and a README that explains each folder. Code that used to live under repos like component-sdk-go now sits at wasmCloud/go/component, published through the existing go.wasmcloud.dev vanity URLs — so thanks to upstream Go's module caching, existing imports keep resolving and the migration is effectively invisible to consumers. The lone holdout is wadge, which bundles enough different technologies that the team has not yet decided whether it belongs in the monorepo. Jonas also gave a shout-out to Eric Gregory for pointing the wasmCloud docs at the new repository.

An Experimental x Namespace

Jonas introduced a new x (experimental) namespace under the Go vanity URL for ideas that are usable but not yet finalized. The first example is an OpenTelemetry exporter that lets you emit OTel signals from inside a WebAssembly component; it depends on a now-released TinyGo 0.35 and is held back from top-level status mainly because TinyGo's Protocol Buffers support doesn't yet cover all exporter formats, so it takes some care to wire up. A second x package — a Go client library, contributed by Lucas, for consuming wasmCloud events and talking to a host using plain Go structs — rounds out the namespace. Asked whether the main (Rust) wasmCloud repo would get a similar experimental space, Taylor noted the x pattern is idiomatic Go; the Rust side leans on feature flags instead (e.g. a couple of experimental wash features and the 1.5-era host built-ins), with more experimental surface likely arriving over the coming months.

The TypeScript Monorepo and Changesets

Lachlan Heywood showed the parallel wasmCloud/typescript monorepo, which gathers the TypeScript/JavaScript libraries, examples, and the washboard app. The two packages publishing to NPM today — lattice-client-core and lattice-client-react — release automatically from this repo on a tag push. To lower the barrier for new contributors, Lachlan is trialing Changesets: rather than requiring contributors to learn Conventional Commits and force-push reworded commits, a maintainer can drop a small Markdown changeset file onto a PR, and the tooling then versions the affected packages and opens a follow-up release PR. It keeps descriptive changelogs without adding friction — an experiment the team will keep or drop based on how it plays out.

Syncing Examples into the Docs, and the C2PA Demo

Taylor demonstrated automation that syncs example READMEs into the wasmcloud.com docs nightly — starting with Go and generalizable to every language — so examples become fully searchable and linkable on the site, with Eric Gregory layering in tutorial-quality framing. Then Colin Murphy demoed a personal open-source project, c2pa-component: a Rust component (built from a WIT interface derived from a C2PA/Python SDK) that reads an image's content-credential provenance, composed via wac with a Node.js component built using JCO into a single fused .wasm. The Node side handles an incoming HTTP POST, streams the binary into the Rust component, and returns the asset's C2PA manifest. The key insight: one WIT file can generate both CLIs and HTTP handlers across languages, and you can swap transports or languages freely — exactly the promise of the WebAssembly component model.

What C2PA Is, and the Q1 2025 Roadmap

For context, C2PA (the Coalition for Content Provenance and Authenticity) embeds and cryptographically signs provenance metadata into images, video, and PDFs — Jonas framed it memorably as "an SBOM for content." With camera makers, Adobe, news sites, Meta, and Google on board, it's a strong real-world case for composing a security-sensitive Rust component (image analysis, cryptography) with a front door in any other language. Liam closed by reminding everyone that the following Wednesday would be the Q1 2025 roadmap planning meeting, run from the wasmCloud GitHub Discussions roadmap thread, with Brooks leading the first session before maintainers begin rotating through.

WebAssembly News and Updates

The throughline of this call is developer experience for the WebAssembly component model across languages — the same composition story that landed wasmCloud's 1.0 release (see wasmCloud 1 Brings Components to the Enterprise). Consolidating the Go and TypeScript ecosystems into monorepos — with vanity-URL stability, automated NPM releases, and Changesets-driven contribution — makes it materially easier to build and ship components in Go and TypeScript. On the tooling side, JCO and wac let a single WIT interface drive a fused, multi-language component, as Colin's C2PA demo showed. And the Q&A clarified how the broader WASI interface ecosystem ships: a predictable train release model under the W3C WebAssembly Community Group, fast-moving draft interfaces, and slower, stability-minded wasmCloud-namespaced interfaces. For more, follow the Bytecode Alliance and the WASI subgroup.

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, C#, and more) while the platform handles capabilities like HTTP, messaging, and key-value storage through a pluggable provider architecture. wasmCloud's reference host is built on Wasmtime, and components are distributed as OCI artifacts and wired together over NATS. 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

Every demo in this meeting traces back to the Wasm component model. The Go and TypeScript monorepos exist to make it easier to author and publish components in those languages — generating typed bindings from a WIT interface and packaging the result as a portable OCI artifact. Colin's C2PA demo is the component model's headline benefit made concrete: a Rust component and a Node.js component, generated from one WIT file, composed with wac into a single fused module that runs through JCO — two languages cooperating through typed interfaces without either side trusting the other's internals. Because the interface is the contract, you can swap the transport (CLI or HTTP) or re-implement a side in Go or Python without touching the rest. As more language toolchains reach full component-model support, "write a component once, compose it with any other language" moves from promise to everyday practice — and it's the foundation wasmCloud's components and services are built on.

Who Should Watch This

This call is especially valuable for Go developers building Wasm components who want one place to find the SDKs, examples, and experimental packages (Jonas's wasmCloud/go tour at 4:53), TypeScript and JavaScript developers tracking the consolidated repo and a lower-friction contribution flow (Lachlan's Changesets walkthrough at 13:45), and anyone evaluating cross-language component composition — including content-provenance and C2PA use cases — who should watch Colin's Rust-plus-Node.js demo at 24:43.

Up Next

The next community call is the Q1 2025 roadmap planning session, held the following Wednesday and driven by the wasmCloud GitHub Discussions roadmap thread. Expect the maintainers to turn community feedback into the quarter's priorities, with Brooks leading the first session before the team begins rotating facilitation across project maintainers. Drop your input in the discussion thread, in Slack, or wherever is easiest.

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 →