WASM Reference Types works in Chrome 96+, Edge 96+, Firefox 79+, Safari 15+, Opera 82+, and Samsung Internet 17+. Learn browser support, externref, funcref, and known issues.

Prince Dewani
May 6, 2026
WASM Reference Types is a WebAssembly 2.0 extension that adds externref and funcref value types, multiple tables, and new table instructions from the W3C WebAssembly Working Group. It works in Chrome 96+, Edge 96+, Firefox 79+, Safari 15+ on macOS and iOS, Opera 82+, and Samsung Internet 17+, while Internet Explorer never added support.
This guide covers what WASM Reference Types is, the browsers that support it, the extensions it adds, how to use externref, and known issues.
WASM Reference Types is a WebAssembly 2.0 extension that adds two opaque value types, externref and funcref, plus support for multiple tables and new table manipulation instructions. It lets Wasm code hold direct references to host objects and functions without storing them in linear memory.
WASM Reference Types works in every modern desktop and mobile browser. Firefox shipped support first, Chrome and Edge followed in version 96, Safari joined with version 15, and roughly 95% of global browser sessions can now run a Reference Types module by default.
Chrome supports WASM Reference Types by default from Chrome 96 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 4 to 95 did not support externref or funcref as a value type. The V8 engine treats externref as a tagged pointer to any V8 heap object, which lets Wasm code hold DOM nodes and JavaScript objects without an integer side table.
Microsoft Edge supports WASM Reference Types by default from Edge 96 on Windows, macOS, Linux, and Android. Edge 12 to 95 did not support it. Edge is built on Chromium and tracks the same V8 engine as Chrome, so Reference Types support and feature flags match Chrome on every release.
Firefox supports WASM Reference Types by default from Firefox 79 on Windows, macOS, Linux, and Android. Firefox 2 to 78 did not support it. SpiderMonkey was the first production engine to ship Reference Types as the proposal neared finalization, which is why Firefox runs Reference Types modules a full year ahead of Chrome and Safari.
Safari supports WASM Reference Types from Safari 15 on macOS Big Sur, Monterey, and Ventura, and from Safari on iOS and iPadOS 15. Safari 11 to 14 on macOS and iOS 11 to 14 do not support it. The JavaScriptCore engine added Reference Types alongside streaming compilation, bulk memory operations, and non-trapping float-to-int conversions in the same Safari 15 release.
Opera supports WASM Reference Types by default from Opera 82 on desktop and Opera Mobile 68 on Android. Opera 9 to 81 did not support it. Modern Opera is built on Chromium, so Reference Types coverage tracks Chrome on every release.
Samsung Internet supports WASM Reference Types by default from Samsung Internet 17.0 on Galaxy phones and tablets. Samsung Internet 4 to 16.0 did not support it. The browser is built on Chromium and follows Chrome's WebAssembly road map closely.
Chrome for Android supports WASM Reference Types from Chrome 96 on Android 5.0 and later. Firefox for Android supports it from Firefox 79, and the legacy stock Android Browser on Android 2.1 to 4.4.4 never added support. For new WASM Reference Types work on Android, use Chrome, Firefox, or Samsung Internet.
Internet Explorer does not support WASM Reference Types in any version. IE 5.5 through 11 never shipped a WebAssembly engine, and Microsoft has retired Internet Explorer. Sites that still ship to IE 11 users need a JavaScript-only path, since no polyfill can replace the externref or funcref value types.
Note: WASM Reference Types breaks across older Safari, iOS 14 and earlier, and legacy Android Browser builds. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
The proposal extends WebAssembly's type system beyond integers and floats. It adds two opaque reference types, lifts the single-table limit, and gives Wasm code first-class instructions to read and write tables.
WASM Reference Types pays off anywhere a Wasm module needs to talk to the host without copying or serializing. Production teams ship it in language runtimes, framework bindings, and toolchains that bridge Wasm and JavaScript.
Run WebAssembly.validate() against a tiny module that declares a table of externref. The call returns true on every browser that supports WASM Reference Types and false everywhere else, with no need to instantiate or execute the module.
Paste this snippet into the DevTools console of any browser to confirm support, and use the same probe inside your loader to pick the right WebAssembly build:
// Run in the DevTools console of any modern browser to feature-detect WASM Reference Types.
// The byte array below is a minimal Wasm module that declares a single table of externref.
// Browsers without Reference Types support reject the module at validation time.
const refTypesProbe = new Uint8Array([
0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00,
0x04, 0x04, 0x01, 0x6f, 0x00, 0x00
]);
const supportsRefTypes = WebAssembly.validate(refTypesProbe);
console.log("WASM Reference Types:", supportsRefTypes ? "supported" : "not supported");
// Branch your loader so older browsers fall back to a glue-code build.
const wasmUrl = supportsRefTypes ? "/build/app.reftypes.wasm" : "/build/app.glue.wasm";For projects that need many feature checks at once (Reference Types, SIMD, threads, GC), use the wasm-feature-detect package on npm. It wraps the same WebAssembly.validate technique behind a one-line referenceTypes() promise that resolves to true or false.
WASM Reference Types covers about 95% of global browser sessions, but a few real edge cases still bite production teams. The biggest hits are older Safari and iOS, the toolchain split between bindgen-glue and externref builds, and the limited debugger support for opaque values.
In my experience, the most surprising failure happens on iOS 14 and earlier. A wasm-bindgen Rust app that runs on every desktop browser and Safari 15+ fails to instantiate on iOS 14 with a generic CompileError, because JavaScriptCore on iOS 14 rejects externref tables before any code runs. Always wire a glue-code fallback into the loader and validate it against a real iOS 14 device before release.
All WASM Reference Types 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