Skip to main content
Version: v2

Language Support for WebAssembly Components

wasmCloud runs standard WebAssembly components targeting WASI P2. Any language toolchain that can produce a Wasm component with WASI P2 support can build components that run on wasmCloud.

This page provides a reference for various languages' support for compiling WebAssembly components, as well as wasmCloud ecosystem support for building and running components developed in a given language.

Component Support

This chart summarizes the current state of language support for WebAssembly components, from languages with built-in WASI P2 targets to toolchains that are still in progress.

LanguageToolchainStatusWASI version
Rustcargo + wasm32-wasip2 targetStableP2
GoTinyGo, or Go + componentize-goStableP2 (P3 via componentize-go)
TypeScript / JavaScriptjco + componentize-jsStableP2
C# / .NETcomponentize-dotnetStableP2
Pythoncomponentize-pyStableP2
Cwasi-sdk + wit-bindgen-cStableP2
C++wit-bindgen-cppExperimentalP2
Rubyruby.wasmIn progressP2 (partial)
KotlinKotlin/Wasm (native)Planned
SwiftSwiftWasmRoadmap accepted
JavaGraalWasmPlanned

Tier 1: Well-supported toolchains

These languages are supported by wasmCloud component project templates, wash dev integration, and documentation in the Developer Guide.

Rust

Rust has first-class WebAssembly support via the wasm32-wasip2 compiler target, which ships with the standard Rust toolchain.

  • Toolchain: cargo with target wasm32-wasip2 (install via rustup target add wasm32-wasip2)
  • Bindings: The wstd crate provides an async Rust standard library for Wasm components and WASI 0.2, hosted by the Bytecode Alliance. You can also use wit-bindgen directly for lower-level control.
  • Get started: Developer Guide | Rust Language Guide

JavaScript (TypeScript)

TypeScript components are built using the jco toolchain (part of the Bytecode Alliance), which compiles JS/TS to Wasm components via componentize-js.

Go

Go components can be built with either of two toolchains: TinyGo, which targets wasip2 directly and produces small binaries from a large subset of Go, or the standard Go compiler via componentize-go, which gives you the full Go standard library and runtime at the cost of larger artifacts and newer, pre-1.0 tooling. The wasmCloud Go SDK, examples, and tutorials use TinyGo today.

TinyGo or componentize-go?

The standard Go compiler has no wasip2 target yet, so componentize-go builds a wasip1 module and adapts it into a component, while TinyGo emits a component directly. See Choosing a toolchain in the Go Language Guide for the tradeoffs.

Tier 2: Stable toolchains

These languages have stable Component Model toolchains that can produce components compatible with wasmCloud. You can build components manually and run them with wash, but there are no wash project templates or wash dev integrations yet.

C# / .NET

componentize-dotnet is a Bytecode Alliance project that compiles .NET applications to Wasm components using NativeAOT.

  • Toolchain: componentize-dotnet NuGet package
  • Status: Stable; actively maintained by the Bytecode Alliance
  • Build: Components are built with dotnet build and the componentize-dotnet MSBuild integration
  • Repository: bytecodealliance/componentize-dotnet

Python

componentize-py is a Bytecode Alliance project that compiles Python applications to Wasm components.

  • Toolchain: componentize-py CLI
  • Status: Stable; actively maintained by the Bytecode Alliance
  • Build: componentize-py componentize --wit-path wit --world <world-name> -o output.wasm app.py
  • Repository: bytecodealliance/componentize-py

Tier 3: In progress or planned

These toolchains are actively working toward Component Model support. Components built with these tools may not yet be fully compatible with wasmCloud.

LanguageToolchainStatusMore information
Cwasi-sdk + wit-bindgen-cWASI P2 + Component Model support completewasi-sdk releases
C++wit-bindgen-cppExperimentalwit-bindgen-cpp repository
Rubyruby.wasmComponent Model support in progressruby.wasm repository
KotlinKotlin/WasmNative Wasm Component Model support planned by JetBrainsJetBrains tracking issue
SwiftSwiftWasmComponent Model roadmap acceptedWebAssembly vision
JavaGraalWasmWASI support plannedGraalVM documentation

Binding generators

Most languages use wit-bindgen (or a language-specific tool built on the same foundation) to generate typed bindings from WIT interface definitions. wit-bindgen currently supports:

  • Rust (wit-bindgen-rust)
  • Go (wit-bindgen-go)
  • C (wit-bindgen-c)
  • C# (via componentize-dotnet)
  • Java (wit-bindgen-java, early stage)

For TypeScript/JavaScript, jco handles binding generation as part of its build pipeline.

Further reading