Since WebAssembly only specifies a low-level language, the bytecode is usually produced by compiling a higher-level language. Among the first languages supported in Rust with the project/module (crate) wasm-bindgen as well as C and C++, compiled with Emscripten (based on LLVM). Many other programming languages now have a WebAssembly compiler, including C#, Go, Java, Lua, Python, or Ruby. Web browsers compile the wasm bytecode into the machine language of the host they are running on before executing it.
The project is supported by all major browser engine developers, ie Mozilla, Microsoft, Google and Apple.
Since March 2017, version 1 has been delivered by default with Chrome, Firefox, Edge and Webkit. The standard was officially established on December 5, 2019. Other functions have been standardized individually and are under development or already included in some implementations.
Development of WebAssembly code
The development of webassembly code is possible in several programming languages, for other languages there are runtime systems such as WebAssembly. In addition to the byte code (wasm), there is a text form (wat) from which the byte code can be generated directly using the wat2wasm command.
Also, Rust and Go compile to WebAssembly natively. According to polls, Rust is the most popular language for Wasm applications. The JWebAssembly project translates Java bytecode to WebAssembly (experimental). However, there is also a proprietary compiler for Java called CheerpJ.
With the Blazor framework (for WebAssembly), a runtime system (IL interpreter) is loaded as a WebAssembly, so that the programming languages C# and F# can ultimately be used in the browser. Starting with .NET 6, translation to WebAssembly bytecode can be done at development time (AOT), making the app larger. Python can be used in the browser via the pyodide project (experimental).
Use outside of the browser
In the future, WebAssembly will also be able to be used outside of browsers via a new interface called WASI. The wasmtime command starts a stand-alone runtime environment for WebAssembly. The runtime environment for WebAssembly can also be embedded in different languages. There is also a micro runtime with reduced memory usage.
With Wasmer there is also another implementation of a runtime environment that was released in January 2021 with version 1.0.0 (and thus classifies itself as stable).