Web3Modal (AppKit)
WalletConnect’s official wallet connection UI, now part of Reown AppKit. Provides multi-chain support and mobile wallet connections.
Web3Modal has been rebranded to Reown AppKit. Both package names work, but @reown/appkit is recommended for new projects.
Installation
npm install @reown/appkit @reown/appkit-adapter-wagmi wagmi viem @tanstack/react-queryBasic Setup
App.tsx
import { createAppKit } from '@reown/appkit/react'
import { WagmiProvider } from 'wagmi'
import { mainnet, polygon, arbitrum } from '@reown/appkit/networks'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { WagmiAdapter } from '@reown/appkit-adapter-wagmi'
// 1. Get projectId from https://cloud.reown.com
const projectId = 'YOUR_PROJECT_ID'
// 2. Configure networks
const networks = [mainnet, polygon, arbitrum]
// 3. Create wagmi adapter
const wagmiAdapter = new WagmiAdapter({
projectId,
networks,
})
// 4. Create modal
createAppKit({
adapters: [wagmiAdapter],
networks,
projectId,
metadata: {
name: 'My dApp',
description: 'My dApp description',
url: 'https://mydapp.com',
icons: ['https://mydapp.com/icon.png'],
},
})
const queryClient = new QueryClient()
export default function App() {
return (
<WagmiProvider config={wagmiAdapter.wagmiConfig}>
<QueryClientProvider client={queryClient}>
{/* Use the web component */}
<appkit-button />
</QueryClientProvider>
</WagmiProvider>
)
}Feature OneKey
To prioritize OneKey in the wallet list:
createAppKit({
adapters: [wagmiAdapter],
networks,
projectId,
featuredWalletIds: [
// OneKey Wallet ID from WalletConnect Explorer
'1aedbcfc1f31aade56ca34c38b0a1607b41cccfa3de93c946ef3b4ba2dfab11c',
],
// Optional: Only show specific wallets
includeWalletIds: [
'1aedbcfc1f31aade56ca34c38b0a1607b41cccfa3de93c946ef3b4ba2dfab11c',
// Add other wallet IDs as needed
],
})Customization
Theme
createAppKit({
// ...
themeMode: 'dark', // or 'light'
themeVariables: {
'--w3m-accent': '#00B812', // OneKey green
'--w3m-border-radius-master': '8px',
},
})Custom Button
import { useAppKit } from '@reown/appkit/react'
function CustomButton() {
const { open } = useAppKit()
return (
<button onClick={() => open()}>
Connect Wallet
</button>
)
}Hooks
Use wagmi hooks after connection:
import { useAccount, useDisconnect } from 'wagmi'
import { useAppKit } from '@reown/appkit/react'
function Wallet() {
const { address, isConnected } = useAccount()
const { disconnect } = useDisconnect()
const { open } = useAppKit()
if (!isConnected) {
return <button onClick={() => open()}>Connect</button>
}
return (
<div>
<p>{address}</p>
<button onClick={() => disconnect()}>Disconnect</button>
</div>
)
}Resources
Last updated on