ConnectEmbedProps
type ConnectEmbedProps = { appMetadata?: AppMetadata; autoConnect?: { timeout: number } | boolean; className?: string; header?: { title?: string; titleIcon?: string } | true; modalSize?: "compact" | "wide"; privacyPolicyUrl?: string; requireApproval?: boolean; showAllWallets?: boolean; showThirdwebBranding?: boolean; style?: React.CSSProperties; termsOfServiceUrl?: 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.
<ConnectEmbed accountAbstraction={{ factoryAddress: "0x123...", chain: sepolia, gasless: true; }}/>
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
When the user has connected their wallet to your site, this configuration determines whether or not you want to automatically connect to the last connected wallet when user visits your site again in the future.
By default it is set to { timeout: 15000 }
meaning that autoConnect is enabled and if the autoConnection does not succeed within 15 seconds, it will be cancelled.
If you want to disable autoConnect, set this prop to false
.
If you want to customize the timeout, you can assign an object with a timeout
key to this prop.
<ConnectEmbed client={client} autoConnect={{ timeout: 10000 }} />;
type autoConnect = { timeout: number } | boolean;
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.
import { polygon } from "thirdweb/chains"; function Example() { return ( <div> {" "} <ConnectEmbed chain={polygon} />{" "} </div> );}
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 used in various ways:
They will be displayed in the network selector in the
ConnectEmbed
's details modal post connectionThey 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
<ConnectEmbed chains={[ethereum, polygon, optimism]} />;
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,});
Class name to be added to the root element of ConnectEmbed
type className = string;
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>",});
Set custom title and icon to show for the embed
Set it to true
to show the default title and icon
type header = { title?: string; titleIcon?: string } | true;
ConnectEmbed supports two modal size variants: compact
and wide
.
By default it is set to compact
, you can set it to wide
if you want to show a wider modal.
Note that if the screen width can not fit the wide modal, the compact
version will be shown regardless of this modalSize
options provided
type modalSize = "compact" | "wide";
let wallet: { id: TWalletId; onConnectRequested?: () => Promise<void>; autoConnect: ( connect: ( disconnect: () => Promise<void>; getChain: () => | undefined switchChain: ( ) => Promise<void>;};
If provided, Embed will show a Privacy Policy message at the bottom with below link
type privacyPolicyUrl = string;
Wallets to show as recommended in the ConnectEmbed
UI
If provided, users will be required to accept the Terms of Service before connecting an in-app wallet.
type requireApproval = boolean;
By default, ConnectEmbed
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;
CSS styles to be applied to the root element of ConnectEmbed
type style = React.CSSProperties;
If provided, Embed will show a Terms of Service message at the bottom with below link
type termsOfServiceUrl = string;
Set the theme for the ConnectEmbed
component. 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", },}); function Example() { return <ConnectEmbed theme={customTheme} />;}
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() { return <ConnectEmbed client={client} wallets={wallets} />;}
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"),];
The ConnectEmbed
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 modalSize 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, },} <ConnectEmbed welcomeScreen={welcomeScreen} />
<ConnectEmbed welcomeScreen={() => <YourComponent />} />;