WebAssembly support is ever evolving. Right now it is supported by the following languages:
-
C / C++ – has very good (production ready) support via EmScripten, or other minimal LLVM-based toolchains
-
Rust – WebAssembly is an officially supported target, with a highly active community around it.
-
Go – has now supports WebAssembly as an official, yet experimental, target
-
C# – has experimental support via Blazor, however this currently requires embedding a .NET runtime into Wasm. Blazor was officially adopted by Microsoft as an experimental technology, with a recent preview release.
-
D – the “betterC” subset of D can be compiled to WebAssembly through LDC (LLVM compiler).
-
TypeScript – via AssemblyScript, highly experimental, but gaining momentum.
-
Java – via TeaVM or Bytecoder
-
Haxe – just announced support
-
Kotlin – Kotlin/Native 0.4 gained experimental support of WebAssembly and via TeaVM
-
Python – Pyodide is a port of Python to WebAssembly that includes the core packages of the scientific Python stack (Numpy, Pandas, matplotlib).
-
PHP – Experimental, but with a working prototype
-
Perl – WebPerl is a port of the Perl binary to WebAssembly, allowing you to run Perl scripts on the web.
-
Scala – using the Emscripten compiler, and TeaVM
-
Ruby – via the run.rb project
-
Swift – using SwiftWasm
There are commercial solutions also:
- RemObjects – Which has announced support for C#, Java, Swift and Oxygene
Regarding JavaScript, it is unlikely to gain support as WebAssembly is a statically typed assembly language.
There are also various more obscure / hobbyist languages that support WebAssembly. Further details can be found on the more exhaustive Awesome WebAssembly Languages list.