Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion docs/languages.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ The languages below can be compiled to WebAssembly with WASI support. Some toolc
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ---------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| C and C++ | [`wasi-sdk`](https://github.com/WebAssembly/wasi-sdk) | Modules; components via `wasm-tools component new` | 0.1, 0.2 | W3C Wasm CG | 0.3 toolchain support is not yet shipped |
| C# | [`componentize-dotnet`](https://github.com/bytecodealliance/componentize-dotnet) | Components | 0.2 | Bytecode Alliance | Pre-release toolchain |
| Dart | [`wasi`](https://pub.dev/packages/wasi) | Components | 0.3 | Dart community | |
| Go | Upstream Go (`GOOS=wasip1`) | Modules | 0.1 | Go Project | |
| Go | [`go-modules`](https://github.com/bytecodealliance/go-modules); [TinyGo](https://tinygo.org/) | Components | 0.2 | Bytecode Alliance; TinyGo Project | |
| Java | [GraalVM](https://www.graalvm.org/) | Planned | Planned | Oracle | Planned: see the [tracking issue](https://github.com/oracle/graal/issues/9762), [roadmap](https://github.com/orgs/oracle/projects/21/views/1), and [presentation](https://youtu.be/uefc2t9AmQI?t=1218) |
Expand All @@ -27,7 +28,7 @@ The languages below can be compiled to WebAssembly with WASI support. Some toolc

- **Modules vs components.** A Wasm **module** is a single binary in the core WebAssembly format and can use WASI 0.1. A **component** is built to the Component Model and can use WASI 0.2 or 0.3, gaining composability, cross-language interoperability, and richer interface types. See the [Releases](releases/index.md) and [Roadmap](roadmap.md) pages for more on the WASI releases.
- **Adapting modules to components.** Several toolchains produce core modules today and wrap them into components using [`wasm-tools component new`](https://github.com/bytecodealliance/wasm-tools) with a 0.1-to-0.2 adapter. This is the path for C/C++ and MoonBit.
- **WASI 0.3 ecosystem state.** Broad 0.3 support across languages is still landing. Rust has WASI 0.3 bindings in the [`wasip3`](https://crates.io/crates/wasip3) crate, written for the nightly Tier 3 `wasm32-wasip3` target. It can be used from the stable Tier 2 `wasm32-wasip2` target, though upstream recommends matching the crate to the target, and the standard library on `wasm32-wasip2` still uses WASI 0.2. `jco` ships an experimental `preview3-shim` for Node.js. Other toolchains have not yet shipped 0.3 support, so target WASI 0.2 with those.
- **WASI 0.3 ecosystem state.** Broad 0.3 support across languages is still landing. Rust has WASI 0.3 bindings in the [`wasip3`](https://crates.io/crates/wasip3) crate, written for the nightly Tier 3 `wasm32-wasip3` target. It can be used from the stable Tier 2 `wasm32-wasip2` target, though upstream recommends matching the crate to the target, and the standard library on `wasm32-wasip2` still uses WASI 0.2. `jco` ships an experimental `preview3-shim` for Node.js. Dart requires WASI 0.3. Other toolchains have not yet shipped 0.3 support, so target WASI 0.2 with those.
- **Version pinning.** The Component Model defines [canonical interface names](https://github.com/WebAssembly/component-model/blob/main/design/mvp/Explainer.md#-canonical-interface-name) so that components can link across compatible versions, but not all tools support this version-aware linking yet. Until they do, target the same version (`0.3.0`) across all WIT-aware tools. Mismatches surface as confusing `wrong type` errors at instantiation.

### Building guides
Expand All @@ -40,6 +41,7 @@ For hands-on guides covering setup and a "hello world" per language, see the Com
- [Go](https://component-model.bytecodealliance.org/language-support/building-a-simple-component/go.html)
- [C](https://component-model.bytecodealliance.org/language-support/building-a-simple-component/c.html)
- [C#](https://component-model.bytecodealliance.org/language-support/building-a-simple-component/csharp.html)
- [Dart](https://component-model.bytecodealliance.org/language-support/building-a-simple-component/dart.html)
- [MoonBit](https://component-model.bytecodealliance.org/language-support/building-a-simple-component/moonbit.html)

### Bindings generators
Expand All @@ -51,6 +53,7 @@ The bindings generators below provide a way to make Wasm function calls using [i
| Wasm Interface Types | C | [wit-bindgen c](https://github.com/bytecodealliance/wit-bindgen/tree/main/crates/c) |
| Wasm Interface Types | C++ | [wit-bindgen cpp](https://github.com/bytecodealliance/wit-bindgen/tree/main/crates/cpp) |
| Wasm Interface Types | C# | [wit-bindgen csharp](https://github.com/bytecodealliance/wit-bindgen/tree/main/crates/csharp) |
| Wasm Interface Types | Dart | [wasm_tools bindgen](https://github.com/simolus3/wasm.dart/tree/main/pkg/wit_bindgen_dart) |
| Wasm Interface Types | JSON Schema | [component2json](https://github.com/microsoft/wassette/tree/main/crates/component2json) |
| Wasm Interface Types | Markdown | [wit-bindgen markdown](https://github.com/bytecodealliance/wit-bindgen/tree/main/crates/markdown) |
| Wasm Interface Types | Moonbit | [wit-bindgen moonbit](https://github.com/bytecodealliance/wit-bindgen/tree/main/crates/moonbit) |
Expand Down
Loading