To customize the external wallet options for your app, pass in a WalletListEntry array to the config.appearance.walletList property. When users login with, connect, or link an external wallet in your app, the possible options (e.g. MetaMask, Rainbow, WalletConnect) will be presented to users in the order you configure them in this array.

<PrivyProvider
  appId="your-privy-app-id"
  config={{
    appearance: {
      // Defaults ['detected_wallets', 'metamask', 'coinbase_wallet', 'rainbow', 'wallet_connect']
      walletList: ['metamask', 'rainbow', 'wallet_connect'],
      ...insertTheRestOfYourAppearanceConfig
    },
    ...insertTheRestOfYourPrivyProviderConfig
  }}
>
  {children}
</PrivyProvider>

You can also configure which wallet options to show at runtime, by passing in walletList to the connectWallet method:

import {usePrivy} from '@privy-io/react-auth';

const {connectWallet} = usePrivy();

<button onClick={() => connectWallet({walletList: ['rainbow', 'coinbase_wallet']})}>
  Login with email and sms only
</button>;

The possible wallets to include in the array are metamask, coinbase_wallet, rainbow, zerion, phantom, wallet_connect, uniswap, rabby_wallet, cryptocom, okx_wallet, safe, and detected_wallets.

The detected_wallets option includes all wallets that Privy detects which are not explicitly included elsewhere in the walletList array. As an example, if your user has the Zerion browser extension installed, it will appear under detected_wallets – unless you include zerion elsewhere in the walletList array, in which case it will appear in the placement of zerion.

Privy detects wallets via EIP6963 injection, window.ethereum injection, or a mobile wallet’s in-app browser.

Configuring the Coinbase Smart Wallet

The Coinbase Smart Wallet is available to all Privy developers. To get set up, you will simply need to add Coinbase Wallet to your login flow and configure your smart wallet preference in the config.externalWallets.coinbaseWallet.connectionOptions property.

<PrivyProvider
  appId="your-privy-app-id"
  config={{
    appearance: {
      walletList: ['coinbase_wallet'],
      ...insertTheRestOfYourAppearanceConfig
    },
    externalWallets: {
      coinbaseWallet: {
        // Valid connection options include 'all' (default), 'eoaOnly', or 'smartWalletOnly'
        connectionOptions: 'smartWalletOnly'
      }
    },
    ...insertTheRestOfYourPrivyProviderConfig
  }}
>
  {children}
</PrivyProvider>

By default, Privy will set config.externalWallets.coinbaseWallet.connectionOptions to all such that the SDK will detect whether the user has the wallet extension installed. It will popup the Coinbase wallet if they do and the Smart Wallet otherwise.

The following are valid connectionOptions property values:

  • eoaOnly: The Privy SDK will only surface the Coinbase Wallet extension or Coinbase Wallet mobile app QR code. Users who do not have it installed will be prompted to install it.
  • smartWalletOnly: The Privy SDK will surface the Coinbase Smart Wallet for all users.
  • all: (default) The Privy SDK will detect whether the user has the Coinbase wallet extension installed. It will popup the Coinbase wallet if they do and the Smart Wallet otherwise.

Smart Wallet supports a limited number of chains. If using all or smartWalletOnly connection options, be sure that your PrivyProvider default chain and supported chains list is a subset of Coinbase’s supported list.