Browser support

Matrix

The Wavelength SDK targets evergreen desktop and mobile browsers with mature WebAssembly, Worker, and storage APIs. Minimum versions below are floors for the WASM runtime; passkeys and OPFS persistence have stricter requirements noted in their columns.

Chrome / Edge
Min version
100
WebAuthn passkeys (PRF)
114+ (platform authenticator + PRF extension)
SharedArrayBuffer
Yes, with COOP/COEP
OPFS persistence
Yes, with COOP/COEP
Firefox
Min version
110
WebAuthn passkeys (PRF)
Limited PRF support; prefer password fallback
SharedArrayBuffer
Yes, with COOP/COEP
OPFS persistence
Yes, with COOP/COEP
Safari (macOS)
Min version
16
WebAuthn passkeys (PRF)
17.4+ for PRF
SharedArrayBuffer
Yes, with COOP/COEP
OPFS persistence
Yes, with COOP/COEP
Safari (iOS / iPadOS)
Min version
16
WebAuthn passkeys (PRF)
17.4+ for PRF
SharedArrayBuffer
Yes, with COOP/COEP
OPFS persistence
Yes, with COOP/COEP

WebAssembly runtime: Chrome 100+, Firefox 110+, and Safari 16+ are the documented development targets. Older engines may fail to instantiate the daemon or lack required APIs. See the error codes reference for the runtime_not_ready and asset_load_failed codes to catch when instantiation fails.

SharedArrayBuffer: Available only when the page is cross-origin isolated. Verify in DevTools: crossOriginIsolated should be true. Without it, worker mode with OPFS SQLite will not initialize.

OPFS: Requires a secure context and cross-origin isolation for the SQLite VFS the daemon uses. runtimeThread: 'main' only changes which thread runs the wasm runtime (main thread instead of a Web Worker); it does not change the storage backend, so it is not a fallback for missing OPFS. Passing createWebClient({ runtimeThread: 'main' }) is useful as a debugging escape hatch in environments without Web Worker support, but do not ship that path for real wallets. If OPFS itself is unavailable, wallet persistence is not currently guaranteed; treat this as an open question and verify behavior for your target environment before relying on it.

WebAuthn passkeys: Wavelength derives wallet keys from the WebAuthn PRF extension. webPasskeyCeremony.supportsPasskeyPrf() checks for a user-verifying platform authenticator, but the authenticator must still return a PRF result at ceremony time. Gate passkey UI on the hook’s supported flag: it is null while the probe is in flight, so hold a loading state until it settles, then offer a password or recovery-phrase path when it is false. See the passkey guide for a full example using useWalletPasskey.

Node.js 20+ is recommended for local development (Vite, Next.js, and similar bundlers). The runtime itself executes entirely in the user’s browser.

Password-based wallets work across the full matrix. Passkeys are optional and depend on the OS authenticator as well as the browser.