WebAssembly 3.0 expands memory limits, adds garbage collection, tail calls, and much more
WebAssembly 3.0 arrives as a major milestone, marking the platform’s first version in several years to introduce extensive new capabilities. Most notably, this release allows memories and tables to use 64-bit addressing (i64), increasing the maximum theoretical address space for applications from 4 gigabytes to 16 exabytes, limited only by available hardware. Building on memory improvements, modules can now declare and access multiple memories, and directly move data between them.
Following these core changes, WebAssembly introduces a new form of storage that is automatically managed by the runtime using garbage collection. This addition is driven by substantial extensions to the Wasm type system, which now handles a wider array of references, improving support for advanced language features. For program execution, two features stand out: support for tail calls, which minimize stack usage in both static and dynamic function calls, and native exception handling through exception tags and payload data.
These updates are complemented by performance-focused relaxed SIMD vector instructions, now with explicit deterministic fallbacks, and enhancements to the text format supporting inline annotations. Finally, as embeddings with JavaScript are upgraded through the JS API, WebAssembly now offers much better support for compiling high-level languages, including Java, OCaml, Scala, Kotlin, Scheme, and Dart.
