Installation
caution
This documentation is for Web3Modal v2. You can find Web3Modal v3 docs here
With Web3Modal React, we work with the Wagmi library which is a collection of React Hooks to make your dapp development flow easier. You can sign messages, interact with smart contracts, and much more.
Don't have a project ID?
Head over to WalletConnect Cloud and create a new project now!
Add packages
- npm
- Yarn
- Bun
- pnpm
npm install @web3modal/ethereum @web3modal/react wagmi viem
yarn add @web3modal/ethereum @web3modal/react wagmi viem
bun add @web3modal/ethereum @web3modal/react wagmi viem
pnpm add @web3modal/ethereum @web3modal/react wagmi viem
Implementation
Start by importing Web3Modal and wagmi packages, then create wagmi config using your own settings or our default presets as shown below. Finally, pass wagmi config to Web3Modal as ethereumClient
.
import { EthereumClient, w3mConnectors, w3mProvider } from '@web3modal/ethereum'
import { Web3Modal } from '@web3modal/react'
import { configureChains, createConfig, WagmiConfig } from 'wagmi'
import { arbitrum, mainnet, polygon } from 'viem/chains'
const chains = [arbitrum, mainnet, polygon]
const projectId = 'YOUR_PROJECT_ID'
const { publicClient } = configureChains(chains, [w3mProvider({ projectId })])
const wagmiConfig = createConfig({
autoConnect: true,
connectors: w3mConnectors({ projectId, chains }),
publicClient
})
const ethereumClient = new EthereumClient(wagmiConfig, chains)
function App() {
return (
<>
<WagmiConfig config={wagmiConfig}>
<HomePage />
</WagmiConfig>
<Web3Modal projectId={projectId} ethereumClient={ethereumClient} />
</>
)
}
Trigger the modal
Use pre-built Web3Button component.
import { Web3Button } from '@web3modal/react'
function HomePage() {
return <Web3Button />
}
Alternatively, use your own button with useWeb3Modal hook.
import { useWeb3Modal } from '@web3modal/react'
function HomePage() {
const { open, close } = useWeb3Modal()
return <button onClick={() => open()}>Connect</button>
}
Use wagmi hooks
wagmi provides everything you'll need to start working with accounts, contracts, chains and much more.
import { useAccount, useContract } from 'wagmi'
Was this helpful?