WASM threads work in Chrome 74+, Edge 79+, Firefox 79+, Safari 14.1+ on macOS, and Safari 14.5+ on iOS. Learn the atomics, COOP/COEP, and known issues.

Prince Dewani
May 1, 2026
WASM threads are a W3C WebAssembly proposal that adds shared linear memory and atomic instructions so Wasm modules run on multiple CPU cores through Web Workers. They work in Chrome 74+, Edge 79+, Firefox 79+, Opera 62+, Safari 14.1+ on macOS, and Safari 14.5+ on iOS, while Internet Explorer and Opera Mini do not support them.
This guide covers what WASM threads are, browsers that support them, how they work, how to enable them, use cases, and known issues.
WASM threads is a WebAssembly extension from the W3C WebAssembly Working Group that adds shared linear memory and atomic memory instructions. The browser runs each Wasm thread inside a Web Worker and shares one SharedArrayBuffer-backed memory between them so a Wasm module can use real parallelism.
Every major engine ships WASM threads on desktop and mobile, with global usage near 95%, but every browser still requires the page to be cross-origin isolated through COOP and COEP before SharedArrayBuffer is exposed.
Chrome supports WASM threads from Chrome 74+ on Windows, macOS, Linux, ChromeOS, and Android. Chrome 70 to 73 had threads disabled by default behind the chrome://flags/#enable-webassembly-threads flag. Chrome 4 to 69 did not support WASM threads at all. Cross-origin isolation through COOP and COEP became mandatory for SharedArrayBuffer in Chrome 92+ on desktop.
Microsoft Edge supports WASM threads from Edge 79+ on Windows, macOS, and Linux, the first Chromium-based Edge build. Pre-Chromium EdgeHTML 12 to 18 and Internet Explorer never added WASM threads. Edge enforces the same COOP and COEP cross-origin isolation rule that Chrome does before SharedArrayBuffer is exposed.
Firefox supports WASM threads from Firefox 79+ on Windows, macOS, Linux, and Android. Firefox 57 to 78 had SharedArrayBuffer disabled after the Spectre disclosure, so threads only worked behind a flag. Firefox now requires Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp before any page can use SharedArrayBuffer or WASM threads.
Safari supports WASM threads from Safari 14.1+ on macOS Big Sur and later, and from Safari 14.5+ on iOS and iPadOS. Safari 11 to 14.0 did not support WASM threads. Safari 15.2+ enforces COOP and COEP cross-origin isolation before exposing SharedArrayBuffer, matching the Chromium and Gecko gate.
Opera supports WASM threads from Opera 62+ on Windows, macOS, and Linux, and from Opera Mobile 80+ on Android. Opera 9 to 61 did not support WASM threads. Opera Mini does not support WASM threads in any version because it renders pages on a server proxy and never exposes a real Wasm engine to the device.
Samsung Internet supports WASM threads from Samsung Internet 11.1+ on Galaxy phones and tablets running Android. Samsung Internet 4.0 to 11.0 did not support WASM threads. The browser shares the Chromium SharedArrayBuffer gate, so the page must serve COOP and COEP before WASM threads can spawn.
Chrome for Android supports WASM threads from Chrome 74+, and Firefox for Android supports them from Firefox 79+. The legacy stock Android Browser and UC Browser for Android also support WASM threads on recent Chromium-based builds. The cross-origin isolation rule applies on Android the same way it does on desktop, and the device must have at least two CPU cores to see real parallel speedups.
Internet Explorer does not support WASM threads in any version. Internet Explorer never shipped a WebAssembly engine, so neither shared memory nor atomics are reachable. Microsoft has retired Internet Explorer 11, so move any threaded Wasm workload to Chromium-based Edge or Chrome.
Note: WASM threads break across Safari, Firefox, and mobile browsers when the COOP and COEP headers are missing. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
WASM threads stack three browser primitives - Web Workers, SharedArrayBuffer, and Wasm atomics - to give a Wasm module real parallelism. The Wasm module imports a shared linear memory; the main thread spawns one Web Worker per logical CPU core; every worker instantiates the same module against the same SharedArrayBuffer-backed memory. Atomic instructions (atomic.load, atomic.store, atomic.rmw, atomic.wait, atomic.notify) let one thread sleep on a memory address until another thread wakes it.
Higher-level synchronization primitives like mutexes, channels, and read-write locks build on those wait and notify atomics. Toolchains such as Emscripten for C and C++, and wasm-bindgen-rayon for Rust, hide this plumbing and expose familiar pthread or Rayon iterator APIs instead.
// Paste this into the DevTools console of a cross-origin isolated page
// to confirm WASM threads support.
async function hasWasmThreads() {
if (typeof SharedArrayBuffer === "undefined") {
return false;
}
try {
new WebAssembly.Memory({ initial: 1, maximum: 1, shared: true });
return true;
} catch (err) {
return false;
}
}
hasWasmThreads().then((supported) => {
if (supported) {
console.log("WASM threads are available on this page.");
} else {
console.log("WASM threads are not available. Check COOP and COEP headers.");
}
});WASM threads ship on by default in every supported browser, but the page itself has to opt in to cross-origin isolation. Without the right headers, SharedArrayBuffer is undefined and the Wasm module fails to spawn workers.
If crossOriginIsolated stays false, open the Network panel, look for a blocked subresource, and add the missing CORP or CORS header on its origin.
WASM threads pay off whenever a workload is CPU-bound and embarrassingly parallel, since the cost of moving bytes through postMessage already dominated the previous Web Worker pattern.
WASM threads are stable across every major engine, but the cross-origin isolation requirement and the worker startup cost still trip teams up in production.
In my experience, the COOP and COEP rollout is the single most expensive part of shipping WASM threads - the headers force every embedded asset to be audited, and the page silently falls back to single-threaded mode when one CDN forgets to send Cross-Origin-Resource-Policy.
All WASM threads version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance