WebAssembly Language Support Matrix
This guide tracks support for compiling a language to WebAssembly. It is organized into three sections: Support for the top 20 languages, WebAssembly-specific languages, and other notable languages. We track whether the language can be compiled to run in the browser, in other non-browser environments, and in a WASI environment. In the detail page for each language, we do our best to not only state the current level of support, but also point to an array of useful resources.
WebAssembly Support in Top 20 Languages
This reports on the top 20 languages from RedMonk’s ranking. Some languages, like CSS, PowerShell, and “Shell”, don’t really have a meaningful expression in Wasm. However, we have left them here for completeness.
Language | Core | Browser | WASI | Spin SDK |
---|---|---|---|---|
JavaScript | ✅ | ✅ | ✅ | ✅ |
Python | ✅ | ⏳ | ✅ | ✅ |
Java | ✅ | ✅ | ✅ | ⏳ |
PHP | ✅ | ✅ | ✅ | ❌ |
CSS | N/A | N/A | N/A | N/A |
C# and .NET | ✅ | ✅ | ✅ | ✅ |
C++ | ✅ | ✅ | ✅ | ❌ |
TypeScript | ✅ | ⏳ | ❌ | ✅ |
Ruby | ✅ | ✅ | ✅ | ❌ |
C | ✅ | ✅ | ✅ | ❌ |
Swift | ✅ | ✅ | ✅ | ⏳ |
R | ❌ | ✅ | ❌ | ❌ |
Objective-C | ? | ❌ | ❌ | ❌ |
Shell | N/A | N/A | N/A | N/A |
Scala (JVM) | ✅ | ✅ | ✅ | ⏳ |
Scala (native) | ⏳ | ❌ | ❌ | ❌ |
Go | ✅ | ✅ | ✅ | ✅ |
PowerShell | ❌ | ❌ | ❌ | ❌ |
Kotlin (JVM) | ✅ | ✅ | ✅ | ⏳ |
Kotlin (Wasm) | ⏳ | ✅ | ✅ | ❌ |
Rust | ✅ | ✅ | ✅ | ✅ |
Dart | ✅ | ✅ | ⏳ | ❌ |
- Core means there is an implementation of WebAssembly 1.0
- Browser means there is at least one browser implementation
- WASI means the language supports at least Preview 1 of the WASI proposal
- Spin SDK indicates there is a Spin SDK for the language
Anything with WASI or Spin SDK support runs on Fermyon Cloud, Spin, and Fermyon Platform.
WebAssembly Specific Languages
Language | Browser | CLI | WASI | Spin SDK |
---|---|---|---|---|
AssemblyScript | ✅ | ✅ | ✅ | ❌ |
Grain | ✅ | ✅ | ✅ | ❌ |
Motoko | ✅ | ✅ | ✅ | ❌ |
- Browser means there is at least one browser implementation
- CLI means the language has a CLI runtime mode
- WASI means the language supports at least Preview 1 of the WASI proposal
- Spin SDK indicates there is a Spin SDK for the language
Other Notable Languages
These languages enjoy broad use (though perhaps not in the top 20) and have at least some degree of WebAssembly Support
Language | Browser | CLI | WASI | Spin SDK |
---|---|---|---|---|
Clojure | ✅ | ✅ | ✅ | ⏳ |
COBOL | ⏳ | ✅ | ⏳ | ❌ |
Erlang (BEAM) | ⏳ | ⏳ | ⏳ | ❌ |
Haskell | ✅ | ✅ | ✅ | ❌ |
Lisp | ⏳ | ⏳ | ⏳ | ❌ |
Lua | ✅ | ❌ | ❌ | ❌ |
Perl | ✅ | ❌ | ❌ | ❌ |
Prolog | ✅ | ❌ | ❌ | ✅ |
Zig | ✅ | ✅ | ✅ | ❌ |
- Browser means there is at least one browser implementation
- CLI means the language has a CLI runtime mode
- WASI means the language supports at least Preview 1 of the WASI proposal
- Spin SDK indicates there is a Spin SDK for the language
How To Read These Charts
For each environment, we use the following icons to indicate a level of support:
- ✅ Usable
- ⏳ In progress
- ❌ Not implemented
N/A
Not applicable
Spin, Fermyon Platform and Fermyon Cloud require WASI support. Any language that has a ✅ for WASI should be supported on the Fermyon Platform. The Spin SDK indicates that there is additional libraries available for Spin.
We are often asked which languages are best supported for production-grade WebAssembly. We suggest C/C++, Rust, and AssemblyScript.
Updates and Additions
The source for the WebAssembly Language Guide is located in a public GitHub project. If you find errors, want to make additions, or have further corrections for us, the issue queue is a great place to discuss.
If you’re more interested in chatting about things, check out our Discord server or hit us up a @FermyonTech on Twitter
Relevant Standards
Throughout our pages, we talk about technologies like WASI, Wagi, and Spin. Many of these are backed by formal documents. See the Standards page for links to the relevant texts along with helpful resources.