RainbowKit
React library for easily integrating Web3 wallets with a modern, customizable user interface into decentralized applications.
Updated on January 17, 2026
RainbowKit is an open-source library developed by Rainbow that simplifies the integration of blockchain wallets into React applications. It provides a smooth user experience for connecting Ethereum wallets like MetaMask, WalletConnect, Coinbase Wallet, and many others, while offering pre-built, customizable UI components. RainbowKit integrates seamlessly with Wagmi and facilitates Web3 adoption by significantly reducing development time.
Fundamentals
- Modular and accessible React components for multi-chain wallet connection
- Native support for 100+ wallets with automatic detection of installed extensions
- Architecture based on Wagmi for blockchain interactions and RainbowKit for UI
- Complete theming with light/dark modes and advanced CSS customization
Benefits
- Installation and configuration in under 5 minutes with an intuitive API
- Responsive and modern user interface that enhances dApp UX
- Automatic handling of connection states, errors, and network changes
- Compatible with latest React and Next.js versions (App Router and Pages Router)
- Comprehensive documentation and active community with regular updates
- Optimized performance with automatic tree-shaking and bundle splitting
Practical Example
import '@rainbow-me/rainbowkit/styles.css';
import { RainbowKitProvider, getDefaultWallets, connectorsForWallets } from '@rainbow-me/rainbowkit';
import { configureChains, createConfig, WagmiConfig } from 'wagmi';
import { mainnet, polygon, arbitrum } from 'wagmi/chains';
import { publicProvider } from 'wagmi/providers/public';
const { chains, publicClient } = configureChains(
[mainnet, polygon, arbitrum],
[publicProvider()]
);
const { connectors } = getDefaultWallets({
appName: 'My Web3 Application',
projectId: 'YOUR_WALLETCONNECT_PROJECT_ID',
chains
});
const wagmiConfig = createConfig({
autoConnect: true,
connectors,
publicClient
});
export function Providers({ children }: { children: React.ReactNode }) {
return (
<WagmiConfig config={wagmiConfig}>
<RainbowKitProvider chains={chains} modalSize="compact">
{children}
</RainbowKitProvider>
</WagmiConfig>
);
}import { ConnectButton } from '@rainbow-me/rainbowkit';
export default function CustomConnectButton() {
return (
<ConnectButton.Custom>
{({
account,
chain,
openAccountModal,
openChainModal,
openConnectModal,
mounted,
}) => {
const ready = mounted;
const connected = ready && account && chain;
return (
<div {...(!ready && { 'aria-hidden': true })}>
{(() => {
if (!connected) {
return (
<button onClick={openConnectModal} className="btn-primary">
Connect Wallet
</button>
);
}
if (chain.unsupported) {
return (
<button onClick={openChainModal} className="btn-warning">
Unsupported Network
</button>
);
}
return (
<div className="flex gap-2">
<button onClick={openChainModal} className="btn-secondary">
{chain.hasIcon && chain.iconUrl && (
<img src={chain.iconUrl} alt={chain.name} width={24} />
)}
{chain.name}
</button>
<button onClick={openAccountModal} className="btn-secondary">
{account.displayName}
{account.displayBalance && ` (${account.displayBalance})`}
</button>
</div>
);
})()}
</div>
);
}}
</ConnectButton.Custom>
);
}Implementation
- Install dependencies: npm install @rainbow-me/rainbowkit wagmi viem@2.x
- Get a free Project ID from WalletConnect Cloud (walletconnect.com)
- Configure blockchain chains and providers in your application
- Wrap your application with WagmiConfig and RainbowKitProvider
- Import RainbowKit CSS and add ConnectButton to your UI
- Customize theme, displayed wallets, and connection options according to your needs
- Test connection with different wallets and networks in development
- Implement business logic with Wagmi hooks (useAccount, useContract, etc.)
Pro tip
Use the ConnectButton Custom mode to create a fully branded experience matching your visual identity. Combine RainbowKit with solutions like Dynamic or Privy to add Web2 authentication (email, socials) and create a hybrid onboarding experience that reduces friction for non-crypto users.
Related Tools
- Wagmi - React hooks for Ethereum interactions
- Viem - TypeScript alternative to ethers.js and web3.js
- WalletConnect - Cross-platform wallet connection protocol
- Ethers.js - JavaScript library for Ethereum
- Hardhat / Foundry - Smart contract development frameworks
- The Graph - Blockchain data indexing and querying
- IPFS - Decentralized storage for dApps
RainbowKit dramatically reduces the technical complexity of Web3 integration, allowing teams to focus on business value rather than blockchain plumbing. By providing a user experience comparable to Web2 applications, it contributes to the mass adoption of decentralized applications. Its modular architecture and active maintenance by Rainbow make it a strategic choice for any serious Web3 project requiring professional and scalable wallet connection.
