Skip to main content
Version: v2.0.0-rc

Language Support

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
GoTinyGoStableP2
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 (TinyGo)

wasmCloud uses TinyGo (not the standard Go compiler) for WebAssembly component support. TinyGo compiles a large subset of Go to WebAssembly with a much smaller binary footprint.

Why TinyGo?

The standard Go compiler does not yet support the Wasm Component Model. TinyGo targets wasip2 directly and produces much smaller binaries, making it the current path for Go developers building Wasm components.

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