Skip to main content
Some users may still hold an earlier generation of embedded wallet that must be moved onto Dynamic WaaS, and the wallet keeps the same address. This upgrade is required, not optional: the JavaScript SDK does not support legacy wallets, so no chain extension registers a provider for them and those users cannot sign until they upgrade. The React SDK ran this upgrade automatically inside its widget. In the JavaScript SDK there’s no widget, so the two things the widget did for you (detecting who needs the upgrade and running the flow) are now steps you trigger yourself with the @dynamic-labs-sdk/legacy-embedded-wallet-upgrade package. The build itself (detect, then upgrade by redirect / embed / popup, plus hosting and CORS) is identical in any JavaScript SDK app, so it lives in one place: Upgrading legacy embedded wallets to Dynamic WaaS (Building UI). This page only covers what changes when you migrate off the React widget.
If any of your users use passkeys for sign-in or MFA, the upgrade app must run on the domain your passkeys were registered on, because passkeys only work on that domain or its subdomains. See Passkey users require your own domain.

What maps to what

React hooks (useHasWalletsRequiringUpgrade, useUpgradeRedirectResult, useUpgradeIframe) live in the package’s /react entry. See the Building UI guide for the full code, the embed/popup paths, and the required origin allowlist.

See also

Last modified on October 5, 2026