Wagmi React Hooks

The standard React hooks library for Ethereum

What is Wagmi?

Wagmi is a collection of React hooks for interacting with Ethereum. It simplifies wallet connection, contract reading/writing, and transaction handling.

Core Features

  • Wallet Connection: Built-in support for MetaMask, WalletConnect, Coinbase Wallet
  • Contract Reading: useReadContract hook for reading smart contracts
  • Contract Writing: useWriteContract for transactions
  • Transaction Management: useWaitForTransactionReceipt
  • Multichain Support: Works with any EVM chain

Installation

npm install wagmi viem @tanstack/react-query
        

Basic Setup

import { WagmiProvider, createConfig, http } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'

const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})

const queryClient = new QueryClient()

function App() {
  return (
    <WagmiProvider config={config}>
      <QueryClientProvider client={queryClient}>
        <YourApp />
      </QueryClientProvider>
    </WagmiProvider>
  )
}
        

Using Hooks

import { useConnect, useAccount, useReadContract, useWriteContract } from 'wagmi'
import { useMemo } from 'react'
import { erc20Abi } from 'viem'

function WalletConnect() {
  const { connectors, connect } = useConnect()
  const { address, isConnected } = useAccount()

  if (isConnected) {
    return <div>Connected: {address}</div>
  }

  return (
    <div>
      {connectors.map(connector => (
        <button key={connector.uid} onClick={() => connect({ connector })}>
          Connect {connector.name}
        </button>
      ))}
    </div>
  )
}

function ReadToken() {
  const { data } = useReadContract({
    address: '0x...',
    abi: erc20Abi,
    functionName: 'balanceOf',
    args: ['0x...'],
  })
  return <div>Balance: {data?.toString()}</div>
}
        

Best For

  • React/Next.js dApps
  • Quick prototyping
  • Production-grade applications
  • Projects needing wallet connection
View Documentation →