Detect Core
Core Extension announces itself in three ways. Prefer them in this order.
EIP-6963 (recommended)
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.