Skip to main content

Detect Core

Core Extension announces itself in three ways. Prefer them in this order.

EIP-6963 ends the wallet-collision problem: every installed wallet announces itself with identifying metadata, and your dapp picks by identity rather than fighting over window.ethereum. Core's identifier is rdns: 'app.core.extension':

const providers = new Map();

window.addEventListener('eip6963:announceProvider', ({ detail }) => {
providers.set(detail.info.rdns, detail);
});

// Wallets already on the page re-announce in response to this:
window.dispatchEvent(new Event('eip6963:requestProvider'));

const core = providers.get('app.core.extension');
if (core) {
const accounts = await core.provider.request({
method: 'eth_requestAccounts',
});
}

detail.info also carries name, icon (a data URI you can render in your wallet picker), and uuid (unique per page load).

window.avalanche

Core also exposes its provider at window.avalanche — a handle no other wallet writes to, useful when you want Core specifically and don't need a picker:

if (window.avalanche) {
const accounts = await window.avalanche.request({
method: 'eth_requestAccounts',
});
}

window.ethereum and EIP-5749

Core participates in the shared window.ethereum slot for compatibility with older dapps, and implements EIP-5749 (window.evmproviders) for pickers that predate EIP-6963. Both suffer the same problem — multiple wallets competing for one global — which is exactly what EIP-6963 fixes. Don't build new detection on them.

Core Mobile is not detectable

Core Mobile is not an injected wallet: nothing appears in the page. Mobile users connect through WalletConnect. A complete dapp offers both paths — which is what the connection libraries give you for free.