> ## Documentation Index
> Fetch the complete documentation index at: https://www.dynamic.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrating from React to the JavaScript SDK

> What changes when you move from the React SDK (@dynamic-labs/sdk-react-core) to the headless JavaScript SDK, and where to find the implementation for each flow.

## Who this is for

You're moving an app from the React SDK (`@dynamic-labs/sdk-react-core`) to the JavaScript SDK (`@dynamic-labs-sdk/client`). This section explains what's different, what your app now owns, and links each flow to a concrete implementation guide.

The JavaScript SDK is **headless**: it gives you the logic for auth, wallets, and money movement, and you build every screen. The React SDK shipped a widget and orchestrated flows for you; the JavaScript SDK hands you the same capabilities as functions (and React hooks) that you call when you decide.

## The big shifts

Almost every change traces back to one idea — the SDK no longer does anything on its own. Keep these in mind as you read the per-flow pages:

* **No built-in UI.** There's no modal, wallet picker, or prompt. You render everything. Each flow's UI is covered in the [Building UI](/docs/javascript/building-ui/overview) section.
* **Nothing is automatic.** Onboarding, MFA, device registration, and wallet creation used to run automatically after login. Now you run each step explicitly — see [Post-login user setup](/docs/javascript/migrating-from-react/post-login-user-setup).
* **No provider monolith.** `DynamicContextProvider` becomes `createDynamicClient()` plus (in React) a thin `DynamicProvider`. `useDynamicContext()` splits into focused hooks like `useUser()`. See [Basic setup](/docs/javascript/migrating-from-react/basic-setup).
* **Call functions, don't wait for events.** The React SDK was event-driven; the JavaScript SDK is imperative — you `await` a function or use a hook's `onSuccess`/`onError`. Events still exist for convenience but aren't the primary pattern.
* **You choose the wallet.** The SDK doesn't track a current or active wallet for you — you work with the array of wallet accounts from `getWalletAccounts()` and pass the specific `walletAccount` you mean into each call.
* **No `isSignedIn` / `isLoggedIn` flag.** Derive state directly from the user, their wallets, and onboarding completeness. See [Users](/docs/javascript/migrating-from-react/users).

## Type renames

The concepts carry over, but several types were renamed for the JavaScript SDK:

| React SDK                       | JavaScript SDK   |
| ------------------------------- | ---------------- |
| `WalletConnector`               | `WalletProvider` |
| `Wallet`                        | `WalletAccount`  |
| `EvmNetwork` / `GenericNetwork` | `NetworkData`    |

## The pages

Work through these roughly in order — setup and auth first, then the flows your app uses.

### Foundations

* [Basic setup](/docs/javascript/migrating-from-react/basic-setup) — provider, client, and the events → promises shift
* [Non-wallet authentication](/docs/javascript/migrating-from-react/non-wallet-authentication) — email, SMS, social, passkey, external JWT
* [Wallet authentication](/docs/javascript/migrating-from-react/wallet-authentication) — connecting and verifying external wallets
* [Post-login user setup](/docs/javascript/migrating-from-react/post-login-user-setup) — the orchestration chain you now own

### Accounts, wallets & networks

* [Account conflict resolution](/docs/javascript/migrating-from-react/account-conflict-resolution)
* [Using connected wallets](/docs/javascript/migrating-from-react/using-connected-wallets)
* [Network management](/docs/javascript/migrating-from-react/network-management)
* [Transactions and balance](/docs/javascript/migrating-from-react/transactions-and-balance)

### Embedded wallets

* [Setup & creation](/docs/javascript/migrating-from-react/embedded-wallets-setup)
* [Password & security](/docs/javascript/migrating-from-react/embedded-wallets-password-security)
* [Backup & recovery](/docs/javascript/migrating-from-react/embedded-wallets-backup-recovery)
* [Delegated access](/docs/javascript/migrating-from-react/embedded-wallets-delegated-access)
* [Transactions & session keys](/docs/javascript/migrating-from-react/embedded-wallets-transactions)
* [Upgrading embedded wallets](/docs/javascript/migrating-from-react/upgrading-embedded-wallets)

### Identity & advanced auth

* [MFA](/docs/javascript/migrating-from-react/mfa)
* [Step-up authentication](/docs/javascript/migrating-from-react/step-up-auth)
* [Users](/docs/javascript/migrating-from-react/users)

### Money, chains & configuration

* [Funding](/docs/javascript/migrating-from-react/funding)
* [Gas sponsorship & smart wallets](/docs/javascript/migrating-from-react/gas-sponsorship-smart-wallets)
* [Global wallets](/docs/javascript/migrating-from-react/global-wallets)
* [Integrating chains](/docs/javascript/migrating-from-react/integrating-chains)
* [Cookies](/docs/javascript/migrating-from-react/cookies)
* [Wagmi integration](/docs/javascript/migrating-from-react/wagmi)

## Where implementation lives

Each migration page explains *what changed*; the [Building UI](/docs/javascript/building-ui/overview) section shows *how to build* the replacement flow, with copy-and-adapt TypeScript and React examples. Migration pages link to the matching Building UI guide wherever one exists.

For SDK setup itself, see [Creating a Dynamic client](/docs/javascript/reference/client/create-dynamic-client) and [Initializing the client](/docs/javascript/reference/client/initialize-dynamic-client).
