Skip to main content

Custom Chains

caution

This documentation is for Web3Modal v2. You can find Web3Modal v3 docs here

Custom wagmi chains​

Web3Modal's chain configuration happens entirely via wagmi. Please refer to wagmi chains documentation to see which defaults are available and how to create your own chain.

Below is a simplified example that sets up mainnet, avalanche and arbitrum chains:

import { w3mProvider } from '@web3modal/ethereum'
import { configureChains } from 'wagmi'
import { arbitrum, mainnet, avalanche } from 'viem/chains'

const chains = [mainnet, avalanche, arbitrum]
const { publicClient } = configureChains(chains, [
w3mProvider({
/* ... */
})
])

Custom default chain​

By default Web3Modal will connect to the chain that was set by user's wallet. If you want user to be connected to a specific chain by default, you can set it via defaultChain option:

import { optimism } from 'viem/chains'

function App() {
return <Web3Modal defaultChain={optimism} />
}

Custom chain providers​

Wagmi requires that one or more providers (RPCs) are configured that support all your target chains. Web3Modal provides WalletConnect RPC via w3mProvider helper. WalletConnect RPC https://rpc.walletconnect.com is free to use (rate limit may be applied to specific users if abuse is detected). WalletConnect RPC currently supports following chains:

1, 3, 4, 5, 10, 42, 56, 69, 97, 100, 137, 280, 324, 420, 42161, 42220, 43114, 80001, 421611, 421613, 1313161554, 1313161555

Please refer to wagmi providers documentation to see how to configure alternative providers, combine or prioritize them.

Below is a simplified example of how to combine WalletConnect RPC and Infura one:

import { mainnet } from 'viem/chains'
import { infuraProvider } from 'wagmi/providers/infura'
import { w3mProvider } from '@web3modal/ethereum'

const { chains, publicClient } = configureChains(
[mainnet],
[
w3mProvider({
/* ... */
}),
alchemyProvider({
/* ... */
})
]
)

Custom chain images​

Web3Modal tries to provide default images for most wagmi chain defaults, but if image for your chain is missing or you want to override it, you can use chainImages options:

<Web3Modal
chainImages={[
{
1: 'https://example.com/ethereum.png',
137: 'https://example.com/polygon.webp'
}
]}
/>