Menu
Home Explore People Places Arts History Plants & Animals Science Life & Culture Technology
On this page
WebAssembly
Cross-platform assembly language and bytecode designed for execution in web browsers

WebAssembly (Wasm) is a portable binary-code format for executable programs, designed to enable high-performance applications on web pages and beyond. It is an open standard supporting many popular programming languages across various operating systems. First released in 2017 and endorsed by the World Wide Web Consortium (W3C) in 2019, Wasm benefits from contributions by major tech companies like Mozilla, Microsoft, Google, and Apple. Its development earned the Programming Languages Software Award from the ACM SIGPLAN in 2021, highlighting its impact on software portability and performance.

Related Image Collections Add Image
We don't have any YouTube videos related to WebAssembly yet.
We don't have any PDF documents related to WebAssembly yet.
We don't have any Books related to WebAssembly yet.
We don't have any archived web articles related to WebAssembly yet.

History

The name WebAssembly is intended to suggest bringing assembly language programming to the Web, where it will be executed client-side — by the website-user's computer via the user's web browser. To accomplish this, WebAssembly must be much more hardware-independent than a true assembly language.

WebAssembly was first announced in 2015,16 and the first demonstration was executing Unity's Angry Bots in Firefox,17 Google Chrome,18 and Microsoft Edge [Legacy].19 The precursor technologies were asm.js from Mozilla and Google Native Client,2021 and the initial implementation was based on the feature set of asm.js.2223

In March 2017, the design of the minimum viable product (MVP) was declared to be finished and the preview phase ended.24 In late September 2017, Safari 11 was released with support. In February 2018, the WebAssembly Working Group published three public working drafts for the Core Specification, JavaScript Interface, and Web API.25262728

In June 2019, Chrome 75 was released with WebAssembly threads enabled by default.29

Since April 2022, WebAssembly 2.0 has been in draft status.3031 It adds many SIMD-related instructions and a new v128 datatype, with the ability for functions to return multiple values, and mass memory initialize/copy.

Implementations

While WebAssembly was initially designed to permit near-native code execution speed in the web browser, it has been considered valuable outside of such, in more generalized contexts.3233 Since WebAssembly's runtime environments (RE) are low-level virtual stack machines (akin to JVM or Flash VM) that may be embedded into host applications, some implementations create standalone runtime environments like Wasmtime [Wikidata] and Wasmer [Wikidata].3435 WebAssembly runtime environments are embedded in application servers to host "server-side" WebAssembly applications and in other applications to support plug-in-based software extension architectures, e.g., "WebAssembly for Proxies" (Proxy-Wasm) which specifies a WebAssembly-based ABI for extending proxy servers.3637

Web browsers

In November 2017, Mozilla declared support "in all major browsers",38 after WebAssembly was enabled by default in Edge [Legacy] 16.39 This support also includes mobile web browsers for iOS and Android. As of March 2024, 99% of tracked web browsers support WebAssembly (version 1.0),40 more than for its predecessor asm.js.41 For some extensions, from the 2.0 draft standard, support may be lower, but still more than 90% of web browsers may already support, e.g. the reference types extension.42

Compilers

WebAssembly implementations usually use either ahead-of-time (AOT) or just-in-time (JIT) compilation, but may also use an interpreter. While the first implementations were in web browsers, there are also non-browser implementations for general-purpose use, including Wasmer,43 Wasmtime44 or WAMR,45 wasm3, WAVM, and many others.46

Because WebAssembly executables are precompiled, it is possible to use a variety of programming languages to make them.47 This is achieved either through direct compilation to Wasm, or through an implementation of their corresponding virtual machines in Wasm. Some 40 programming languages are reported to support Wasm as a compilation target.48

Emscripten compiles C and C++ to Wasm49 using Clang as a frontend, replacing LLVM as backend and using Binaryen [Wikidata] as an optimizer.50 The Emscripten SDK can compile any LLVM-supported languages (such as C, C++ or Rust, among others) source code into a binary file which runs in the same sandbox as JavaScript code.51 Emscripten provides bindings for several commonly used environment interfaces like WebGL.

As of version 8, a standalone Clang can compile C and C++ to Wasm.52 Its initial aim was to support compilation from C and C++,53 though support for other source languages such as Rust, .NET languages545556 and AssemblyScript57 (TypeScript-like) is also emerging.

After the MVP release, WebAssembly added support for multithreading and garbage collection (WasmGC, and web browsers including Safari have added support for it),58 which allowed more efficient compilation for garbage-collecting programming languages like C# (supported via Blazor), F# (supported via Bolero59 with help of Blazor) and Python.60

A number of other languages have some support, including Haskell,61 Python,62 Julia,636465 Ruby66 and Ring.6768

A number of systems can compile Java and other JVM languages to JavaScript and WebAssembly. These include CheerpJ,69 JWebAssembly70 and TeaVM.71 Kotlin supports WebAssembly directly.7273

Limitations

Web browsers do not permit WebAssembly code to directly manipulate the Document Object Model. Wasm code must defer to JavaScript for this.74

In an October 2023 survey of developers, less than half of the 303 participants were satisfied with the state of WebAssembly. A large majority cited the need for improvement in four areas: WASI, debugging support, integration with JavaScript and browser APIs, and build tooling.75

For memory-intensive allocations in WebAssembly, there are "grave limitations that make many applications infeasible to be reliably deployed on mobile browsers [..] Currently allocating more than ~300MB of memory is not reliable on Chrome on Android without resorting to Chrome-specific workarounds, nor in Safari on iOS."76

All major browsers allow WebAssembly if Content-Security-Policy is not specified, or if "unsafe-eval" is used, but behave differently otherwise.77 Chrome requires "unsafe-eval",7879 though a worker thread can be a workaround.80

Security considerations

In June 2018, a security researcher presented the possibility of using WebAssembly to circumvent browser mitigations for Spectre and Meltdown security vulnerabilities once support for threads with shared memory is added. Due to this concern, WebAssembly developers put the feature on hold.818283 However, in order to explore these future language extensions, Google Chrome added experimental support for the WebAssembly thread proposal in October 2018.84

WebAssembly has been criticized for allowing greater ease of hiding the evidence for malware writers, scammers and phishing attackers; WebAssembly is present on the user's machine only in its compiled form, which "[makes malware] detection difficult".85 Speed and the easy ability to conceal in WebAssembly have led to its use in hidden crypto mining within the website visitor's device.868788 Coinhive, a now defunct service facilitating cryptocurrency mining in website visitors' browsers, claims their "miner uses WebAssembly and runs with about 65% of the performance of a native Miner."89 A June 2019 study from the Technische Universität Braunschweig analyzed the usage of WebAssembly in the Alexa top 1 million websites and found the prevalent use was for malicious crypto mining, and that malware accounted for more than half of the WebAssembly-using websites studied.9091 An April 2021 study from Universität Stuttgart found that since then crypto mining has been marginalized, falling to below 1% of all WebAssembly modules gathered from a wide range of sources, also including the Alexa top 1 million websites.92

As WebAssembly supports only structured control flow, it is amenable toward security verification techniques including symbolic execution.93

Performance

Benchmark results vary between implementations and between themselves. Performance was benchmarked early to be around 91% (i.e., 10% slower) for running code, not including load/instantiation time94 or more recently between 100% and 33% of native rates,95 and 120% of JavaScript (i.e. 20% faster).9697

A 2021 study suggested that WebAssembly, in the versions they tested at that time, was much faster than JavaScript in certain cases with some browsers, such as running a complex function on a small file, e.g. processing a graphics file, but that JavaScript had some optimizations available, e.g. JIT, that WebAssembly did not.98

Benchmarking has revealed several other pain-points for WebAssembly, such as poor performance because of no direct access to the DOM,99 a problem which is being addressed.100

WASI

WebAssembly System Interface (WASI) is a simple interface (ABI and API) designed by Mozilla, which is intended to be portable to any platform.101 It provides POSIX-like features like file I/O constrained by capability-based security.102103 There are additional proposed ABI/APIs.104105

WASI is influenced by CloudABI and Capsicum.106

Solomon Hykes [fr], a co-founder of Docker, wrote in 2019, "If WASM+WASI existed in 2008, we wouldn't have needed to create Docker. That's how important it is. WebAssembly on the server is the future of computing."107

Specification

Host environment

The general standard provides core specifications for the JavaScript API and details on embedding.108

Virtual machine

Wasm code (binary code, i.e. bytecode) is intended to be run on a portable virtual stack machine (VM).109 The VM is designed to be faster to parse and execute than JavaScript and to have compact code representation.110 Any external functionality (like syscalls) that may be expected by Wasm binary code is not stipulated by the standard. It rather provides a way to deliver interfacing via modules by the host environment that the VM runs in.111112

Wasm program

A Wasm program is designed as a separate module containing collections of various Wasm-defined values and program type definitions. These are provided in either binary or textual format (see below) that have a common structure.113 Such a module may provide a start function that is executed upon instantiation of a wasm binary.

Instruction set

The core standard for the binary format of a Wasm program defines an instruction set architecture (ISA) consisting of specific binary encodings of types of operations which are executed by the VM (without specifying how exactly they must be executed).114 The list of instructions includes standard memory load/store instructions, numeric, parametric, control of flow instruction types and Wasm-specific variable instructions.115

The number of opcodes used in the original standard (MVP) was a bit fewer than 200 of the 256 possible opcodes. Subsequent versions of WebAssembly pushed the number of opcodes a bit over 200. The WebAssembly SIMD proposal (for parallel processing) introduces an alternate opcode prefix (0xfd) for 128-bit SIMD. The concatenation of the SIMD prefix, plus an opcode that is valid after the SIMD prefix, forms a SIMD opcode. The SIMD opcodes bring an additional 236 instructions for the "minimum viable product" (MVP) SIMD capability (for a total of around 436 instructions).116117 Those instructions, the "finalized opcodes"118 are enabled by default across Google's V8 (in Google Chrome), the SpiderMonkey engine in Mozilla Firefox, and the JavaScriptCore engine in Apple's Safari119 and there are also some additional proposal for instructions for later "post SIMD MVP", and there is also a separate "relaxed-simd" proposal on the table.120

These SIMD opcodes are also portable and translate to native instruction sets like x64 and ARM. In contrast, neither Java's JVM nor CIL support SIMD, at their opcode level, i.e. in the standard; both do have some parallel APIs which provide SIMD speedup. There is an extension for Java adding intrinsics for x64 SIMD,121 that isn't portable, i.e. not usable on ARM or smartphones. Smartphones can support SIMD by calling assembly code with SIMD, and C# has similar support.

Code representation

In March 2017, the WebAssembly Community Group reached consensus on the initial (MVP) binary format, JavaScript API, and reference interpreter.122 It defines a WebAssembly binary format (.wasm), which is not designed to be used by humans, as well as a human-readable WebAssembly text format (.wat) that resembles a cross between S-expressions and traditional assembly languages.

The table below shows an example of a factorial function written in C and its corresponding WebAssembly code after compilation, shown both in .wat text format (a human-readable textual representation of WebAssembly) and in .wasm binary format (the raw bytecode, expressed below in hexadecimal), that is executed by a Web browser or run-time environment that supports WebAssembly.

C source code and corresponding WebAssembly
C source codeWebAssembly .wat text formatWebAssembly .wasm binary format
int factorial(int n) { if (n == 0) return 1; else return n * factorial(n-1);}(func (param i64) (result i64) local.get 0 i64.eqz if (result i64) i64.const 1 else local.get 0 local.get 0 i64.const 1 i64.sub call 0 i64.mul end)00 61 73 6D 01 00 00 0001 06 01 60 01 7E 01 7E03 02 01 000A 17 0115 0020 005004 7E42 010520 0020 0042 017D10 007E0B0B

All integer constants are encoded using a space-efficient, variable-length LEB128 encoding.123

The WebAssembly text format is more canonically written in a folded format using S-expressions. For instructions and expressions, this format is purely syntactic sugar and has no behavioral differences with the linear format.124 Through wasm2wat, the code above decompiles to:

(module (type $t0 (func (param i64) (result i64))) (func $f0 (type $t0) (param $p0 i64) (result i64) (if $I0 (result i64) ;; $I0 is an unused label name (i64.eqz (local.get $p0)) ;; the name $p0 is the same as 0 here (then (i64.const 1)) (else (i64.mul (local.get $p0) (call $f0 ;; the name $f0 is the same as 0 here (i64.sub (local.get $p0) (i64.const 1))))))))

A module is implicitly generated by the compiler. The function is referenced by an entry of the type table in the binary, hence a type section and the type emitted by the decompiler.125 The compiler and decompiler can be accessed online.126

See also

Notes

 This article incorporates text from a free content work. Licensed under Apache License 2.0 (license statement/permission). Text taken from Text Format​, jfbastien; rossberg-chromium; kripken; titzer; s3ththompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; binji; andrewosh, GitHub. WebAssembly/design.

References

  1. Mozilla. "Understanding WebAssembly text format". MDN Web Docs. Retrieved 9 December 2019. https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format

  2. "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 18 June 2019. WebAssembly is an open standard... https://webassembly.github.io/spec/core/intro/introduction.html

  3. "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 18 June 2019. WebAssembly is a ... code format https://webassembly.github.io/spec/core/intro/introduction.html

  4. "Conventions — WebAssembly 1.0". webassembly.github.io. Retrieved 17 May 2019. WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure. https://webassembly.github.io/spec/core/syntax/conventions.html

  5. "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 18 June 2019. ... this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. These will each define a WebAssembly application programming interface (API) suitable for a given environment. https://webassembly.github.io/spec/core/intro/introduction.html

  6. "Introduction — WebAssembly 1.1". webassembly.github.io. Retrieved 19 February 2021. Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well. https://webassembly.github.io/spec/core/intro/introduction.html

  7. Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 June 2017). "Bringing the Web Up to Speed with WebAssembly". SIGPLAN Notices. 52 (6): 185–200. doi:10.1145/3140587.3062363. ISSN 0362-1340. While the Web is the primary motivation for WebAssembly, nothing in its design depends on the Web or a JavaScript environment. It is an open standard specifically designed for embedding in multiple contexts, and we expect that stand-alone implementations will become available in the future. https://doi.org/10.1145%2F3140587.3062363

  8. "Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. Retrieved 28 July 2020. https://v8.dev/blog/emscripten-standalone-wasm#running-in-wasm-runtimes

  9. "Wasmer - The Universal WebAssembly Runtime". wasmer.io. Retrieved 19 February 2021. Compile everything to WebAssembly. Run it on any OS or embed it into other languages. https://wasmer.io/

  10. World Wide Web Consortium. "WebAssembly Core Specification". World Wide Web Consortium (W3). Retrieved 9 December 2019. https://www.w3.org/TR/wasm-core-1/

  11. Couriol, Bruno. "WebAssembly 1.0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers". infoq.com. Retrieved 9 December 2019. https://www.infoq.com/news/2019/12/webassembly-w3c-recommendation/

  12. "WebAssembly Specification — WebAssembly 1.1". webassembly.github.io. Retrieved 22 March 2021. https://webassembly.github.io/spec/core/

  13. "Programming Languages Software Award". www.sigplan.org. http://www.sigplan.org/Awards/Software/

  14. Bright, Peter (18 June 2015). "The Web is getting its bytecode: WebAssembly". Ars Technica. Condé Nast. https://arstechnica.com/information-technology/2015/06/the-web-is-getting-its-bytecode-webassembly/

  15. "New Bytecode Alliance Brings the Security, Ubiquity, and Interoperability of the Web to the World of Pervasive Computing". Mozilla. 12 November 2019. Retrieved 27 May 2019. https://blog.mozilla.org/press/2019/11/new-bytecode-alliance-brings-the-security-ubiquity-and-interoperability-of-the-web-to-the-world-of-pervasive-computing/

  16. "Launch bug". GitHub / WebAssembly / design. 11 June 2015. https://github.com/WebAssembly/design/issues/150

  17. Wagner, Luke (14 March 2016). "A WebAssembly Milestone: Experimental Support in Multiple Browsers". Mozilla Hacks. https://hacks.mozilla.org/2016/03/a-webassembly-milestone/

  18. Thompson, Seth (15 March 2016). "Experimental support for WebAssembly in V8". V8 Blog. https://v8project.blogspot.com/2016/03/experimental-support-for-webassembly.html

  19. Zhu, Limin (15 March 2016). "Previewing WebAssembly experiments in Microsoft Edge". Microsoft Edge dev blog. https://blogs.windows.com/msedgedev/2016/03/15/previewing-webassembly-experiments/

  20. Lardinois, Frederic (17 June 2015). "Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web". TechCrunch. Retrieved 24 December 2017. https://techcrunch.com/2015/06/17/google-microsoft-mozilla-and-others-team-up-to-launch-webassembly-a-new-binary-format-for-the-web/

  21. Avram, Abel (31 May 2017). "Google Is to Remove Support for PNaCl". InfoQ. Retrieved 22 December 2017. https://www.infoq.com/news/2017/05/pnacl-webassembly-google

  22. "WebAssembly: a binary format for the web". ②ality – JavaScript and more. 18 June 2015. https://www.2ality.com/2015/06/web-assembly.html

  23. The asm.js file already provides near-native code execution speeds: "Even discarding the one score where asm.js did better, it executes at around 70% of the speed (i.e. slower) of native C++ code.[24] and can be considered a viable alternative for browsers that do not support WebAssembly or have it disabled for security reasons.

  24. Krill, Paul (6 March 2017). "WebAssembly is now ready for browsers to use". InfoWorld. Retrieved 23 December 2017. https://www.infoworld.com/article/3176681/

  25. "WebAssembly First Public Working Drafts". W3C. 15 February 2018. Retrieved 20 April 2018. https://www.w3.org/blog/news/archives/6838

  26. "WebAssembly Core Specification". W3C. 15 February 2018. Retrieved 20 April 2018. https://www.w3.org/TR/2018/WD-wasm-core-1-20180215/

  27. "WebAssembly JavaScript Interface". W3C. 15 February 2018. Retrieved 20 April 2018. https://www.w3.org/TR/2018/WD-wasm-js-api-1-20180215/

  28. "WebAssembly Web API". W3C. 15 February 2018. Retrieved 20 April 2018. https://www.w3.org/TR/2018/WD-wasm-web-api-1-20180215/

  29. "WebAssembly Worker Based Threads - Chrome Platform Status". chromestatus.com. Retrieved 19 February 2022. https://chromestatus.com/feature/5724132452859904

  30. "WebAssembly Specification — WebAssembly 2.0 (Draft 2022-09-01)". webassembly.github.io. Retrieved 9 September 2022. https://webassembly.github.io/spec/core/

  31. "WebAssembly 2.0 First Public Working Drafts | W3C News". 19 April 2022. Retrieved 9 September 2022. https://www.w3.org/blog/news/archives/9509

  32. "Non-Web Embeddings". WebAssembly. Retrieved 15 May 2019. https://webassembly.org/docs/non-web/

  33. "Non-Web Embeddings". GitHub / WebAssembly. Retrieved 15 May 2019. https://github.com/WebAssembly/design/blob/master/NonWeb.md

  34. "Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. Retrieved 28 July 2020. https://v8.dev/blog/emscripten-standalone-wasm#running-in-wasm-runtimes

  35. "Wasmer - The Universal WebAssembly Runtime". wasmer.io. Retrieved 19 February 2021. Compile everything to WebAssembly. Run it on any OS or embed it into other languages. https://wasmer.io/

  36. Freese, Danny (October 3, 2023). "Proxy-Wasm: It's WebAssembly for Proxies". Blog. Kong. Retrieved 2024-05-06. https://konghq.com/blog/engineering/proxy-wasm

  37. "proxy-wasm/spec: WebAssembly for Proxies (ABI specification)". GitHub. Retrieved 6 May 2024. https://github.com/proxy-wasm/spec

  38. "WebAssembly support now shipping in all major browsers". The Mozilla Blog. Retrieved 21 November 2017. https://blog.mozilla.org/blog/2017/11/13/webassembly-in-browsers/

  39. "Introducing new JavaScript optimizations, WebAssembly, SharedArrayBuffer, and Atomics in EdgeHTML 16". Microsoft Edge Dev Blog. 31 October 2017. Retrieved 21 November 2017. https://blogs.windows.com/msedgedev/2017/10/31/optimizations-webassembly-sharedarraybuffer-atomics-edgehtml-16/

  40. "WebAssembly | Can I use... Support tables for HTML5, CSS3, etc". canIuse.com. Retrieved 1 March 2024. https://caniuse.com/wasm

  41. "asm.js | Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 29 September 2024. https://caniuse.com/asmjs

  42. "WebAssembly Reference Types | Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 3 March 2024. https://caniuse.com/wasm-reference-types

  43. "Wasmer - The Universal WebAssembly Runtime". wasmer.io. Retrieved 19 February 2021. Compile everything to WebAssembly. Run it on any OS or embed it into other languages. https://wasmer.io/

  44. "Wasmtime — a small and efficient runtime for WebAssembly & WASI". wasmtime.dev. Retrieved 18 December 2020. https://wasmtime.dev/

  45. "New Bytecode Alliance Brings the Security, Ubiquity, and Interoperability of the Web to the World of Pervasive Computing". Mozilla. 12 November 2019. Retrieved 27 May 2019. https://blog.mozilla.org/press/2019/11/new-bytecode-alliance-brings-the-security-ubiquity-and-interoperability-of-the-web-to-the-world-of-pervasive-computing/

  46. "Roadmap". Retrieved 7 December 2021. https://webassembly.org/roadmap/

  47. Ball, Kevin (26 June 2018). "How WebAssembly is Accelerating the Future of Web Development". Archived from the original on 12 February 2019. Retrieved 22 October 2018. https://web.archive.org/web/20190212141715/https://zendev.com/2018/06/26/webassembly-accelerating-future-web-development.html

  48. "Awesome WebAssembly Languages". GitHub. 26 June 2018. Retrieved 15 February 2022. https://github.com/appcypher/awesome-wasm-langs

  49. Krill, Paul (6 March 2017). "WebAssembly is now ready for browsers to use". InfoWorld. Retrieved 23 December 2017. https://www.infoworld.com/article/3176681/

  50. Zakai, Alon [@kripken] (21 October 2019). "Emscripten has switched to the upstream LLVM wasm backend by default! / Details:https://groups.google.com/forum/#!topic/emscripten-discuss/NpxVAOirSl4" (Tweet). Retrieved 22 October 2019 – via Twitter. https://x.com/kripken/status/1186407352880074752

  51. According to official documentation, the Emscripten SDK may be used to create .wasm files which then may be executed in a web browser.[47][48][49] Even though Emscripten can consume various languages when using Clang, some problems may arise.[50]

  52. "LLVM 8.0.0 Release Notes — LLVM 8 documentation". releases.llvm.org. Retrieved 22 October 2019. https://releases.llvm.org/8.0.0/docs/ReleaseNotes.html#changes-to-the-webassembly-target

  53. "WebAssembly High-Level Goals". GitHub / WebAssembly / design. 11 December 2015. https://github.com/WebAssembly/design/blob/main/HighLevelGoals.md

  54. Krill, Paul (29 November 2017). "Direct WebAssembly compilation comes to Rust language". InfoWorld. Retrieved 24 December 2017. https://www.infoworld.com/article/3239129/

  55. "Frequently asked questions (FAQ) about Blazor". blazor.net. Retrieved 18 June 2018. https://blazor.net/docs/introduction/faq.html

  56. "Awesome WebAssembly Languages". GitHub. 26 June 2018. Retrieved 15 February 2022. https://github.com/appcypher/awesome-wasm-langs

  57. "AssemblyScript/assemblyscript". The AssemblyScript Project. 9 September 2020. Retrieved 9 September 2020. https://github.com/AssemblyScript/assemblyscript

  58. "WebAssembly Garbage Collection (WasmGC) now enabled by default in Chrome | Blog". Chrome for Developers. Retrieved 11 December 2023. https://developer.chrome.com/blog/wasmgc

  59. "Bolero: F# in WebAssembly". fsbolero.io. Retrieved 25 July 2019. https://fsbolero.io/

  60. "A new way to bring garbage collected programming languages efficiently to WebAssembly · V8". v8.dev. Retrieved 11 December 2023. https://v8.dev/blog/wasm-gc-porting#demo-and-status

  61. "Using the GHC WebAssembly backend". GHC User's Guide. Retrieved 1 May 2025. https://ghc.gitlab.haskell.org/ghc/doc/users_guide/wasm.html

  62. "Pyodide: Bringing the scientific Python stack to the browser – Mozilla Hacks - the Web developer blog". Mozilla Hacks – the Web developer blog. Retrieved 9 September 2020. https://hacks.mozilla.org/2019/04/pyodide-bringing-the-scientific-python-stack-to-the-browser

  63. "Julia in the Browser". nextjournal.com. Retrieved 9 April 2019. https://nextjournal.com/sdanisch/wasm-julia

  64. "WebAssembly platform by tshort · Pull Request #2 · JuliaPackaging/Yggdrasil". GitHub. Retrieved 9 April 2019. https://github.com/JuliaPackaging/Yggdrasil/pull/2

  65. Fischer, Keno (22 July 2019). "GitHub - Keno/julia-wasm: Running julia on wasm". GitHub. Retrieved 25 July 2019. https://github.com/Keno/julia-wasm

  66. "MRuby in Your Browser". ruby.dj. Retrieved 25 July 2019. https://ruby.dj/

  67. Paul Krill (24 August 2020). "Ring language upgrade focuses on WebAssembly". InfoWorld. https://www.infoworld.com/article/3572395/ring-language-upgrade-focuses-on-webassembly.html

  68. "Ring in web browser". Retrieved 17 August 2024. https://ring-lang.github.io/web/tryringonline/project.html

  69. "Java to WebAssembly Compiler - CheerpJ". Retrieved 27 April 2023. https://leaningtech.com/cheerpj/

  70. "JWebAssembly". 27 April 2023 – via GitHub. https://github.com/i-net-software/JWebAssembly

  71. "TeaVM — Overview". www.teavm.org. Retrieved 27 April 2023. https://www.teavm.org/docs/intro/overview.html

  72. "Bringing Kotlin to the Web". Retrieved 11 December 2023. https://developers.googleblog.com/2023/05/bringing-kotlin-to-web.html

  73. Deleuze, Sébastien (13 February 2023). "The huge potential of Kotlin/Wasm". seb.deleuze.fr. Retrieved 11 December 2023. https://seb.deleuze.fr/the-huge-potential-of-kotlin-wasm/

  74. For Rust/Wasm development, third-party libraries can provide some of the necessary JavaScript I/O.[72][73] /wiki/Rust_(programming_language)

  75. "The State of WebAssembly 2023". Scott Logic. 18 October 2023. Retrieved 14 March 2024. https://blog.scottlogic.com/2023/10/18/the-state-of-webassembly-2023.html

  76. "Wasm needs a better memory management story · Issue #1397 · WebAssembly/design". GitHub. Retrieved 15 February 2021. https://github.com/WebAssembly/design/issues/1397

  77. "WebAssembly/content-security-policy". GitHub. Retrieved 17 February 2021. https://github.com/WebAssembly/content-security-policy

  78. "948834 - chromium - An open-source project to help move the web forward. - Monorail". bugs.chromium.org. Retrieved 17 February 2021. https://bugs.chromium.org/p/chromium/issues/detail?id=948834&can=1&q=wasm-eval

  79. "No way to use WebAssembly on Chrome without 'unsafe-eval' · Issue #7 · WebAssembly/content-security-policy". GitHub. Retrieved 17 February 2021. https://github.com/WebAssembly/content-security-policy/issues/7

  80. "No way to use WebAssembly on Chrome without 'unsafe-eval' · Issue #7 · WebAssembly/content-security-policy". GitHub. Retrieved 17 February 2021. https://github.com/WebAssembly/content-security-policy/issues/7

  81. Neumann, Robert; Toro, Abel (19 April 2018). "In-browser mining: Coinhive and WebAssembly". Forcepoint. Retrieved 8 June 2019. https://www.forcepoint.com/blog/x-labs/browser-mining-coinhive-and-webassembly

  82. Cimpanu, Catalin (24 June 2018). "Changes in WebAssembly Could Render Meltdown and Spectre Browser Patches Useless". Bleeping Computer. Retrieved 8 June 2019. https://www.bleepingcomputer.com/news/security/changes-in-webassembly-could-render-meltdown-and-spectre-browser-patches-useless/

  83. Sanders, James (25 June 2018). "How opaque WebAssembly code could increase the risk of Spectre attacks online". Tech Republic. Retrieved 9 June 2019. https://www.techrepublic.com/article/how-opaque-webassembly-code-could-increase-the-risk-of-spectre-attacks-online/

  84. R, Bhagyashree (30 October 2018). "Google Chrome 70 now supports WebAssembly threads to build multi-threaded web applications". Packt Pub. Retrieved 9 June 2019. https://hub.packtpub.com/google-chrome-70-now-supports-webassembly-threads-to-build-multi-threaded-web-applications/

  85. Lonkar, Aishwarya; Chandrayan, Siddhesh (October 2018). "The dark side of WebAssembly". Virus Bulletin. Retrieved 8 June 2019. https://www.virusbulletin.com/virusbulletin/2018/10/dark-side-webassembly/

  86. Lonkar, Aishwarya; Chandrayan, Siddhesh (October 2018). "The dark side of WebAssembly". Virus Bulletin. Retrieved 8 June 2019. https://www.virusbulletin.com/virusbulletin/2018/10/dark-side-webassembly/

  87. Segura, Jérôme (29 November 2017). "Persistent drive-by cryptomining coming to a browser near you". Malwarebytes. Retrieved 8 June 2019. https://blog.malwarebytes.com/cybercrime/2017/11/persistent-drive-by-cryptomining-coming-to-a-browser-near-you/

  88. Neumann, Robert; Toro, Abel (19 April 2018). "In-browser mining: Coinhive and WebAssembly". Forcepoint. Retrieved 8 June 2019. https://www.forcepoint.com/blog/x-labs/browser-mining-coinhive-and-webassembly

  89. Neumann, Robert; Toro, Abel (19 April 2018). "In-browser mining: Coinhive and WebAssembly". Forcepoint. Retrieved 8 June 2019. https://www.forcepoint.com/blog/x-labs/browser-mining-coinhive-and-webassembly

  90. "Recent Study Estimates That 50% of Websites Using WebAssembly Apply It for Malicious Purposes". InfoQ. Retrieved 3 November 2019. https://www.infoq.com/news/2019/10/WebAssembly-wasm-malicious-usage/

  91. Musch, Marius; Wressnegger, Christian; Johns, Martin; Rieck, Konrad (June 2019). "New Kid on the Web: A Study on the Prevalence of WebAssembly in the Wild". Detection of Intrusions and Malware, and Vulnerability Assessment (PDF). Lecture Notes in Computer Science. Vol. 11543. Detection of Intrusions and Malware, and Vulnerability Assessment. pp. 23–42. doi:10.1007/978-3-030-22038-9_2. ISBN 978-3-030-22037-2. S2CID 184482682. Archived from the original (PDF) on 26 July 2022. Retrieved 15 February 2022. Slides (PDF) Archived 3 November 2019 at the Wayback Machine 978-3-030-22037-2

  92. Aaron Hilbig, Daniel Lehmann, and Michael Pradel (April 2021). "An Empirical Study of Real-World WebAssembly Binaries: Security, Languages, Use Cases." (Archived April 2021) https://software-lab.org/publications/www2021.pdf https://software-lab.org/publications/www2021.pdf

  93. Watt, Conrad (8 January 2018). "Mechanising and verifying the WebAssembly specification". Proceedings of the 7th ACM SIGPLAN International Conference on Certified Programs and Proofs. CPP 2018. Los Angeles CA USA: ACM. pp. 53–65. doi:10.1145/3167082. ISBN 978-1-4503-5586-5. S2CID 9401691. 978-1-4503-5586-5

  94. Jangda, Abhinav; Powers, Bobby; Berger, Emery; Guha, Arjun (31 May 2019). Not So Fast: Analyzing the Performance of WebAssembly vs. Native Code (PDF). 2019 USENIX Annual Technical Conference. Renton, WA. pp. 107–120. arXiv:1901.09056v3. OCLC 1106328738. Retrieved 20 March 2025. https://www.usenix.org/sites/default/files/atc19-full-proceedings.pdf

  95. Denis, Frank. "Performance of WebAssembly runtimes in 2023". 00f.net. Retrieved 6 December 2024. https://00f.net/2023/01/04/webassembly-benchmark-2023/

  96. De Macedo, Joao; Abreu, Rui; Pereira, Rui; Saraiva, Joao (June 2022). "WebAssembly versus JavaScript: Energy and Runtime Performance". 2022 International Conference on ICT for Sustainability (ICT4S). pp. 24–34. doi:10.1109/ICT4S55073.2022.00014. hdl:1822/90291. ISBN 978-1-6654-8286-8. 978-1-6654-8286-8

  97. A personal web page of 2024 reported a benchmark of a simple game application on a mobile phone found between 110% and 190% (i.e. faster) of native rates depending on the browser.[92]

  98. Yan, Yutian; Tu, Tengfei; Zhao, Lijian; Zhou, Yuchen; Wang, Weihang (2 November 2021). "Understanding the performance of webassembly applications". Proceedings of the 21st ACM Internet Measurement Conference. pp. 533–549. doi:10.1145/3487552.3487827. ISBN 978-1-4503-9129-0. 978-1-4503-9129-0

  99. "WebAssembly provides no access to the surrounding environment other than via the JavaScript API described in the JS API specification."[94]

  100. Kambale, Enoch. "WebAssembly in 2024: Promises, Challenges, and the Road Ahead". blog.enkambale.com. Retrieved 6 December 2024. https://blog.enkambale.com/webassembly-2024-state-of-wasm/

  101. "WebAssembly System Interface Repo". GitHub / WebAssembly. 10 February 2020. https://github.com/WebAssembly/WASI

  102. "Additional background on Capabilities". GitHub. bytecodealliance. 4 March 2022. https://github.com/bytecodealliance/wasmtime/blob/master/docs/WASI-capabilities.md

  103. "Standardizing WASI: A system interface to run WebAssembly outside the web – Mozilla Hacks - the Web developer blog". Mozilla Hacks – the Web developer blog. https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/

  104. "reference-sysroot Repo". GitHub / WebAssembly. 12 January 2020. https://github.com/WebAssembly/reference-sysroot

  105. "wasm-c-api Repo". GitHub / WebAssembly. 3 February 2020. https://github.com/WebAssembly/wasm-c-api

  106. NuxiNL/cloudlibc, Nuxi, 6 December 2024, retrieved 1 April 2025 https://github.com/NuxiNL/cloudlibc

  107. Hykes, Solomon (27 March 2019). "Solomon Hykes on X". Twitter. Retrieved 29 September 2024. https://x.com/solomonstre/status/1111004913222324225

  108. "Conventions — WebAssembly 1.0". webassembly.github.io. Retrieved 17 May 2019. WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure. https://webassembly.github.io/spec/core/syntax/conventions.html

  109. "Design Rationale". GitHub / WebAssembly / design. 1 October 2016. https://github.com/WebAssembly/design/blob/main/Rationale.md#why-a-stack-machine

  110. "WebAssembly High-Level Goals". GitHub / WebAssembly / design. 11 December 2015. https://github.com/WebAssembly/design/blob/main/HighLevelGoals.md

  111. "Portability - WebAssembly". webassembly.org. Retrieved 28 July 2020. https://webassembly.org/docs/portability/#assumptions-for-efficient-execution

  112. "Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. Retrieved 28 July 2020. https://v8.dev/blog/emscripten-standalone-wasm#running-in-wasm-runtimes

  113. "Conventions — WebAssembly 1.0". webassembly.github.io. Retrieved 12 November 2019. https://webassembly.github.io/spec/core/syntax/conventions.html

  114. "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 17 May 2019. https://webassembly.github.io/spec/core/intro/introduction.html?highlight=isa#scope

  115. "Instructions — WebAssembly 1.0". webassembly.github.io. Retrieved 12 November 2019. https://webassembly.github.io/spec/core/syntax/instructions.html

  116. Lively, Thomas (19 February 2021) [Pull Request opened on 2021-02-05]. "Final opcodes by tlively · Pull Request #452 · WebAssembly/simd · GitHub". Bytecode Alliance. Retrieved 12 May 2021 – via GitHub. https://github.com/WebAssembly/simd/pull/452

  117. Delendik, Yury (19 February 2021) [SIMD changes committed on 2021-02-19]. "File wasm-tools/expr.rs at b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub". Bytecode Alliance. Retrieved 12 May 2021 – via GitHub. https://github.com/bytecodealliance/wasm-tools/blob/b5c3d98e40590512a3b12470ef358d5c7b983b15/crates/wast/src/ast/expr.rs

  118. "Update interpreter and text with finalized opcodes by ngzhian · Pull Request #486 · WebAssembly/simd". GitHub. Retrieved 14 May 2021. https://github.com/WebAssembly/simd/pull/486

  119. "WebAssembly/simd". GitHub. Retrieved 14 May 2021. https://github.com/WebAssembly/simd

  120. WebAssembly/relaxed-simd, WebAssembly, 3 May 2021, retrieved 14 May 2021 https://github.com/WebAssembly/relaxed-simd

  121. "How we made the JVM 40x faster". astojanov.github.io. Retrieved 17 February 2021. https://astojanov.github.io/blog/2017/12/20/scala-simd.html

  122. "Roadmap". WebAssembly. March 2017. https://webassembly.org/roadmap/

  123. WebAssembly Community Group (January 2020). "WebAssembly Specification Release 1.0". Retrieved 13 January 2020. https://webassembly.github.io/spec/core/binary/values.html#integers

  124. "Folded instructions". GitHub. / WebAssembly / spec https://webassembly.github.io/spec/core/text/instructions.html#folded-instructions

  125. "Modules (Binary)". WebAssembly 1.0. https://webassembly.github.io/spec/core/syntax/modules.html

  126. "WebAssembly Binary Toolkit (wabt) demos". webassembly.github.io. https://webassembly.github.io/wabt/demo/