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.
- Min version
100- WebAuthn passkeys (PRF)
114+ (platform authenticator + PRF extension)- SharedArrayBuffer
Yes, with COOP/COEP- OPFS persistence
Yes, with COOP/COEP
- Min version
110- WebAuthn passkeys (PRF)
Limited PRF support; prefer password fallback- SharedArrayBuffer
Yes, with COOP/COEP- OPFS persistence
Yes, with COOP/COEP
- Min version
16- WebAuthn passkeys (PRF)
17.4+ for PRF- SharedArrayBuffer
Yes, with COOP/COEP- OPFS persistence
Yes, with COOP/COEP
- 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.