Skip to main content

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.