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?