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

# Setup Embedded Wallets

> [card] Recommended: JavaScript SDK with React Hooks
>
> For new React apps, we recommend the JavaScript SDK with React Hooks (`@dynamic-labs-sdk/react-hooks`) instead of the legacy React SDK documented here. The JS SDK comes with many benefits such as a much smaller bundle size and other optimizations. Use the [React quickstart (JavaScript SDK)](https://docs.dynamic.xyz/docs/javascript/reference/react-quickstart.md) to get started.

> [!NOTE]
>
> If you are a current user of our legacy embedded wallets, you can find the migration guide [here](https://docs.dynamic.xyz/docs/react/wallets/embedded-wallets/mpc/upgrade-guide.md) and any legacy documentation [here](https://docs.dynamic.xyz/docs/react/wallets/embedded-wallets/legacy) (only creating and reveal/unlinking are different).

## General Setup

### Enable in Console

Navigate to the [Dynamic Console > Embedded Wallets](https://console.dynamic.xyz/dashboard/embedded-wallets/dynamic) and enable Embedded Wallets, then click settings and choose the chains you'd like wallets created on.

![Embedded Wallets V3 Settings](https://mintlify.s3.us-west-1.amazonaws.com/dynamic-docs/images/dashboard/console-embedded-wallets-settings.png)

### Private Key Export Settings

By default, users can export their private keys from embedded wallets. You can disable private key exports in the [Embedded Wallets settings](https://console.dynamic.xyz/dashboard/embedded-wallets/dynamic). Navigate to the **Security** section and toggle **Private Key Exports** to control whether users can export their private keys.

![Private Key Export Toggle](https://mintlify.s3.us-west-1.amazonaws.com/dynamic-docs/images/dashboard/console-private-key-export-toggle.png)

> [!WARNING]
>
> Consider disabling private key exports if your use case requires additional security controls. Disabling exports prevents users from exporting keys, which can reduce the risk of key exposure but limits user portability. See [Best Practices — Private Key Export Controls](https://docs.dynamic.xyz/docs/get-started/security/recommendedpaths.md#private-key-export-controls) for guidance.

## Using your UI

> [!WARNING]
>
> Only supported on React SDK v4.20.0 and later versions

> [!TIP]
>
> Reference example: [https://github.com/dynamic-labs/examples/tree/main/examples/nextjs-mpc-demo](https://github.com/dynamic-labs/examples/tree/main/examples/nextjs-mpc-demo)

**1. Install Wallet Connectors**

Note: You only need to install the connectors for the chains you want to support.

```bash theme={"system"}
npm i @dynamic-labs/sdk-react-core
npm i @dynamic-labs/ethereum
npm i @dynamic-labs/solana
npm i @dynamic-labs/stellar
npm i @dynamic-labs/sui
```

**2. Configure CSP**

You must whitelist the dynamic auth URL for the iframe connection to work. Here's how:

> [accordion] In an HTTP header (e.g., Express.js)
>
> ```js theme={"system"}
> res.setHeader("Content-Security-Policy", "frame-src https://app.dynamicauth.com 'self';");
> ```
>
> > ⚠️ If you're already setting CSP, append [https://app.dynamicauth.com](https://app.dynamicauth.com) to the existing frame-src list rather than replacing it.
>
> ***

> [accordion] In an HTML `\<meta\>` tag
>
> ```html theme={"system"}
> <meta http-equiv="Content-Security-Policy" content="frame-src https://app.dynamicauth.com 'self';">
> ```

> [accordion] In NGINX config
>
> ```
> add_header Content-Security-Policy "frame-src https://app.dynamicauth.com 'self';";
> ```

> [accordion] In Vercel or Netlify (via headers file)
>
> ```json vercel.json theme={"system"}
> {
>   "headers": [
>     {
>       "source": "/(.*)",
>       "headers": [
>         {
>           "key": "Content-Security-Policy",
>           "value": "frame-src https://app.dynamicauth.com 'self';"
>         }
>       ]
>     }
>   ]
> }
> ```

> [accordion] In \_headers (Netlify)
>
> ```txt _headers theme={"system"}
>   Content-Security-Policy: frame-src https://app.dynamicauth.com 'self';
> ```

**3. Configure Your Provider**

Include the appropriate connectors inside your provider settings:

```jsx theme={"system"}
import { EthereumWalletConnectors } from '@dynamic-labs/ethereum';
import { SolanaWalletConnectors } from '@dynamic-labs/solana';
import { StellarWalletConnectors } from '@dynamic-labs/stellar';
import { SuiWalletConnectors } from '@dynamic-labs/sui';

const connectors = [
  EthereumWalletConnectors,
  SolanaWalletConnectors,
  StellarWalletConnectors,
  SuiWalletConnectors,
];

return (
  <DynamicContextProvider
    settings={{
      walletConnectors: connectors,
    }}
  >
    {/* Your app components */}
  </DynamicContextProvider>
);
```

Once enabled, you can choose whether wallets are created automatically on signup/sign-in, or created manually in your app logic. See [Creating Embedded Wallets](https://docs.dynamic.xyz/docs/react/wallets/embedded-wallets/mpc/creating-wallets.md).

### Next steps

* Create embedded wallets automatically or manually: [Creating Embedded Wallets](https://docs.dynamic.xyz/docs/react/wallets/embedded-wallets/mpc/creating-wallets.md)
* Configure signing/confirmation experience: [Embedded Wallet Signing Configuration](https://docs.dynamic.xyz/docs/react/wallets/embedded-wallets/mpc/transactions.md)
* Password protection: [Password encryption](https://docs.dynamic.xyz/docs/react/wallets/embedded-wallets/mpc/password-encryption.md)
* Import/export keys: [Importing & Exporting Embedded Wallets](https://docs.dynamic.xyz/docs/react/wallets/embedded-wallets/mpc/import-export.md)
* Advanced signing scenarios: [Raw Signing (EVM)](https://docs.dynamic.xyz/docs/react/wallets/using-wallets/evm/raw-signing.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.