Library guides
Connection libraries handle discovery, session state, and mobile support in one place. Any library that speaks EIP-6963 finds Core Extension automatically; add a WalletConnect project id and Core Mobile works too.
Wagmi
Wagmi discovers Core through EIP-6963 with its default
injected setup — the getting-started config is all you need:
import { http, createConfig } from 'wagmi';
import { avalanche, avalancheFuji } from 'wagmi/chains';
import { injected, walletConnect } from 'wagmi/connectors';
export const config = createConfig({
chains: [avalanche, avalancheFuji],
connectors: [
injected(),
// Enables Core Mobile via WalletConnect:
walletConnect({ projectId: 'YOUR_PROJECT_ID' }),
],
transports: {
[avalanche.id]: http(),
[avalancheFuji.id]: http(),
},
});
To offer a dedicated "Connect with Core" button instead of a generic list, target Core's EIP-6963 identifier:
import { useConnect } from 'wagmi';
function ConnectCoreButton() {
const { connectors, connect } = useConnect();
const core = connectors.find((c) => c.id === 'app.core.extension');
return core
? <button onClick={() => connect({ connector: core })}>Connect Core</button>
: <a href="https://join.core.app/">Install Core</a>;
}
RainbowKit
RainbowKit ships a Core wallet entry; putting it in your wallet list pins Core into the modal with its icon and install link:
import { connectorsForWallets } from '@rainbow-me/rainbowkit';
import { coreWallet, walletConnectWallet } from '@rainbow-me/rainbowkit/wallets';
const connectors = connectorsForWallets(
[
{
groupName: 'Recommended',
wallets: [coreWallet, walletConnectWallet],
},
],
{ appName: 'Example dapp', projectId: 'YOUR_PROJECT_ID' },
);
RainbowKit runs on Wagmi underneath, so EIP-6963 discovery also surfaces Core even without the dedicated entry.
viem
viem is the low-level option — hand it any EIP-1193 provider, including the one from EIP-6963 discovery:
import { createWalletClient, custom } from 'viem';
import { avalanche } from 'viem/chains';
const client = createWalletClient({
chain: avalanche,
transport: custom(window.avalanche),
});
const [account] = await client.requestAddresses();
web3-react
web3-react has no EIP-6963 support in its stable line; its generic
InjectedConnector binds to window.ethereum, which works but can select a
different wallet when several are installed. If you stay on web3-react, wrap
window.avalanche in a custom connector to target Core deterministically —
or prefer Wagmi for new projects.