Skip to content

Feature Overview

WebAssembly launched with a deliberately minimal feature set. New capabilities are added through a standardization process that moves proposals through phases before engines ship them.

This page gives a brief overview of what each feature means. For deeper coverage, see the Extensions section of the guides.

The initial release included everything needed for a working compilation target:

  • Four numeric typesi32, i64, f32, f64
  • Linear memory — a resizable byte array accessed by load/store instructions
  • Tables — indirect function calls via call_indirect
  • Imports and exports — modules declare what they need and what they provide
  • Structured control flowblock, loop, if/else, br, br_table
  • A stack machine model — instructions push and pop values; no registers

This was enough for C/C++ compilers (via Emscripten) to target Wasm effectively.

These proposals have reached phase 5 (standardized) and are shipped in all major engines.

FeatureWhat it does
Sign extension opsi32.extend8_s, etc. — sign-extend narrow values without masking tricks
Non-trapping float-to-inti32.trunc_sat_f64_s, etc. — saturating conversions instead of trapping on overflow
JS BigInt ↔ i64Pass i64 values to/from JavaScript as BigInt without manual splitting
FeatureWhat it does
Multi-valueFunctions and blocks can return multiple values; blocks can take parameters
Tail callreturn_call and return_call_indirect — guaranteed tail-call optimization
Exception handlingtry_table, throw, catch — structured exceptions without unwinding hacks
FeatureWhat it does
Mutable globalsGlobals can be imported/exported as mutable, not just immutable
Bulk memorymemory.copy, memory.fill, table.copy — efficient bulk operations
Extended constUse i32.add, i32.mul, global.get in constant expressions (global initializers, etc.)
Memory64Address memory with 64-bit indices for >4 GB heaps
FeatureWhat it does
Reference typesexternref and funcref — opaque host references that Wasm can store but not forge
Typed function referencesref.func, call_ref — first-class typed function references, enabling direct calls without tables
Garbage collection (GC)struct, array, ref.cast — managed heap types for languages like Java, Kotlin, Dart
FeatureWhat it does
Fixed-width SIMD128-bit v128 type with lane-wise operations (i32x4.add, f64x2.mul, etc.)
ThreadsShared memory, memory.atomic.* instructions, and wait/notify for synchronization

The full list of proposals and their current phase is maintained at webassembly.org/features and in the proposals repository. Notable in-progress work includes:

  • Stack switching — lightweight coroutines and green threads
  • Branch hinting — hint to engines which branch is more likely
  • Relaxed SIMD — faster SIMD by relaxing determinism constraints
  • Shared-everything threads — share more than just memory across threads
  • Component model — high-level module composition and interface types