UseConnectModalOptions
Options for configuring Connect Modal for useConnectModal
hook
type UseConnectModalOptions = { appMetadata?: AppMetadata; privacyPolicyUrl?: string; setActive?: boolean; showAllWallets?: boolean; showThirdwebBranding?: boolean; size?: "compact" | "wide"; termsOfServiceUrl?: string; title?: string; titleIcon?: string; walletConnect?: { projectId?: string };};
Enable Account abstraction for all wallets. This will connect to the users's smart account based on the connected personal wallet and the given options.
This allows to sponsor gas fees for your user's transaction using the thirdweb account abstraction infrastructure.
* function Example() { const { connect } = useConnectModal(); async function handleConnect() { await connect({ client, accountAbstraction: { factoryAddress: "0x123...", chain: sepolia, sponsorGas: true } })} return ( <button> onClick={handleConnect}> Connect </button>) }
Metadata of the app that will be passed to connected wallet. Setting this is highly recommended.
Some wallets display this information to the user when they connect to your app.
type appMetadata = AppMetadata;
{ name: "My App", url: "https://my-app.com", description: "some description about your app", logoUrl: "https://path/to/my-app/logo.svg",};
Enable SIWE (Sign in with Ethererum) by passing an object of type SiweAuthOptions
to
enforce the users to sign a message after connecting their wallet to authenticate themselves.
Refer to the SiweAuthOptions
for more details
The Chain
object of the blockchain you want the wallet to connect to
If a chain
is not specified, Wallet will be connected to whatever is the default set in the wallet.
If a chain
is specified, Wallet will be prompted to switch to given chain after connection if it is not already connected to it.
This ensures that the wallet is connected to the correct blockchain before interacting with your app.
You can create a Chain
object using the defineChain
function.
At minimum, you need to pass the id
of the blockchain to defineChain
function to create a Chain
object.
Array of chains that your app supports.
This is only relevant if your app is a multi-chain app and works across multiple blockchains.
If your app only works on a single blockchain, you should only specify the chain
prop.
Given list of chains will be sent to wallet at the time of connection if the wallet supports requesting multiple chains ( example: WalletConnect ) so that users can switch between the chains post connection easily
You can create a Chain
object using the defineChain
function.
At minimum, you need to pass the id
of the blockchain to defineChain
function to create a Chain
object.
import { defineChain } from "thirdweb/react"; const polygon = defineChain({ id: 137,});
A client is the entry point to the thirdweb SDK.
It is required for all other actions.
You can create a client using the createThirdwebClient
function. Refer to the Creating a Client documentation for more information.
You must provide a clientId
or secretKey
in order to initialize a client. Pass clientId
if you want for client-side usage and secretKey
for server-side usage.
import { createThirdwebClient } from "thirdweb"; const client = createThirdwebClient({ clientId: "<your_client_id>",});
URL of the "privacy policy" page
If provided, Modal will show a Privacy Policy message at the bottom with below link
type privacyPolicyUrl = string;
Wallets to show as recommended in the Connect Modal
Whether to set the connected wallet as active wallet or not
By default, It is set to true
You can set it to false
and use the retunred wallet from the connect
method if you want to connect wallet without setting it as active wallet
type setActive = boolean;
function Example() { const { connect } = useConnectModal(); return ( <button> {" "} onClick= {async () => { const wallet = await connect({ setActive: false, client }); }} > Connect </button> );}
By default, Connect modal shows a "All Wallets" button that shows a list of 350+ wallets.
You can disable this button by setting showAllWallets
prop to false
type showAllWallets = boolean;
By default Connect Modal shows "Powered by Thirdweb" branding at the bottom of the Modal.
If you want to hide the branding, set this prop to false
type showThirdwebBranding = boolean;
Set the size of the connect modal on desktop - "compact"
or "wide"
Modal size is always compact
on mobile
By default it is "wide"
for desktop.
type size = "compact" | "wide";
URL of the "terms of service" page
If provided, Modal will show a Terms of Service message at the bottom with below link
type termsOfServiceUrl = string;
Set the theme for the Connect Modal. By default it is set to "dark"
theme can be set to either "dark"
, "light"
or a custom theme object.
You can also import lightTheme
or darkTheme
functions from thirdweb/react
to use the default themes as base and overrides parts of it.
import { lightTheme } from "thirdweb/react"; const customTheme = lightTheme({ colors: { modalBg: "red", },});
Title to show in Connect Modal
The default is "Connect"
type title = string;
Replace the default thirdweb icon next to Modal title with your own icon
Set to empty string (""
) to hide the icon
type titleIcon = string;
Configure options for WalletConnect
By default WalletConnect uses the thirdweb's default project id. Setting your own project id is recommended.
You can create a project id by signing up on walletconnect.com
type walletConnect = { projectId?: string };
Array of supported wallets. If not provided, default wallets will be used.
import { AutoConnect } from "thirdweb/react";import { createWallet, inAppWallet } from "thirdweb/wallets"; const wallets = [ inAppWallet(), createWallet("io.metamask"), createWallet("com.coinbase.wallet"), createWallet("me.rainbow"),]; function Example() { const { connect } = useConnectModal(); return ( <button> {" "} onClick={() => connect({ wallets, client })}> Connect{" "} </button> );}
If no wallets are specified. The component will show All the EIP-6963 compliant installed wallet extensions, as well as below default wallets:
const defaultWallets = [ inAppWallet(), createWallet("io.metamask"), createWallet("com.coinbase.wallet"), createWallet("me.rainbow"), createWallet("io.zerion.wallet"),];
Connect Modal also shows a "All wallets" button at the end of wallet list which allows user to connect to any of the 350+ wallets
Customize the welcome screen. This prop is only applicable when modal size prop is set to "wide". On "wide" Modal size, a welcome screen is shown on the right side of the modal.
This screen can be customized in two ways
const welcomeScreen = { title: "your title", subtitle: "your subtitle", img: { src: "https://your-image-url.png", width: 300, height: 50, },};
const welcomeScreen = () => <YourCustomComponent />;