Independent review. This site is not the official website and is not affiliated with, endorsed by, or operated by the wallet vendor reviewed here. Never enter your seed phrase or private keys on any third-party site.

dApp Connections & WalletConnect

Try Tangem secure wallet →

dApp Connections & WalletConnect

This guide explains how MetaMask connects to dApps, why connections sometimes work in one case (for example, "metamask connects to remix but not my website"), and how WalletConnect and the injected provider differ. I’ll show exactly how I tested connection flows so you can reproduce the checks yourself. I use MetaMask daily for swaps, DeFi, and testing contracts — and I’ve broken connections more than once (yes, I clicked approve too quickly). Learn practical fixes and safer habits.

How I tested (so you can repeat it)

I ran tests across three environments: desktop extension (Chrome), MetaMask Mobile (iOS and Android), and a simple local dev dApp served over HTTPS. Test checklist (replicable):

  • Installed latest MetaMask extension and MetaMask Mobile from official app stores.
  • Deployed a minimal dApp that calls ethereum.request({ method: 'eth_requestAccounts' }) and prints window.ethereum to console. (You can use a static HTTPS host or a local tunnel.)
  • Tried connecting to Remix, Uniswap-style demo page, and a simple custom site to compare behavior.
  • Tested WalletConnect pairing via QR (desktop) and deeplink (mobile).
  • Captured console errors and noted exact prompt wording.

Record the browser console and MetaMask prompt behavior. That’s how I found mismatches between Remix and custom sites. You can reproduce each step with a local HTTPS server and the same request pattern.

Injected provider: browser extension connections

On desktop, MetaMask injects an injected provider into page context at window.ethereum. That provider handles JSON-RPC requests like account access and signing. Connecting is typically a three-step flow: detect provider, request accounts, and accept the prompt.

Try Tangem secure wallet →

But why does metamask connects to remix but not my website? Common causes:

  • Your site doesn’t call ethereum.request({ method: 'eth_requestAccounts' }). (Remix does this automatically.)
  • You’re testing on http:// (not HTTPS) — many browsers block extensions on insecure pages.
  • The dApp runs inside an iframe or is on a different origin that prevents the provider from being injected.
  • Your site assumes an older shim (window.web3) instead of checking window.ethereum.

If your site shows no MetaMask prompt, open DevTools and check for window.ethereum. If it’s undefined, the provider isn’t injected (or the extension is locked). Unlock the wallet and try again.

Common injected-provider errors and fixes

  • metamask connection failed / metamask connection error: popup blocked or extension locked. Fix: allow popups or unlock wallet.
  • metamask connection declined: user rejected the request (error code 4001). Ask the user to confirm and show clear UX explaining why permission is needed.
  • metamask connected sites error: stale RPC endpoints or wrong chainId. Ensure your dApp requests the desired chain and handle wallet_switchEthereumChain errors gracefully.

If you want a step-by-step on setup and connecting to dApps, see connect-metamask-to-dapps and troubleshooting.

WalletConnect & mobile flows (QR, deeplinks, and fallbacks)

WalletConnect creates a session between your dApp and MetaMask Mobile using a bridge server. Desktop dApps usually emit a QR code that the mobile app scans. Mobile dApps often trigger a deeplink that opens MetaMask Mobile directly.

WalletConnect is helpful when the injected provider isn’t available (for example, when using Safari on iOS browser that doesn’t support the extension). But deeplinks can fail.

When you see “metamask deeplink not supported” (iOS / OpenSea cases)

Search queries like metamask deeplink not supported, metamask deeplink not supported ios, or metamask deeplink not supported opensea often mean the dApp is attempting an app link that your phone or browser won’t route to MetaMask. Typical fixes:

  • Update MetaMask Mobile to the latest version.
  • Open the dApp inside the MetaMask in-app browser (if available) instead of an external browser.
  • Use the QR pairing flow by opening the dApp on desktop.
  • If the dApp uses WalletConnect v2 and your app only supports v1, the session will fail — use a dApp that supports the same protocol version or add WalletConnect fallback logic.

For mobile-specific tips, check walletconnect-and-mobile-dapps and connected-sites-mobile.

Managing connected sites and security best practices

Always review connected sites after using a dApp. A connection gives a dApp the ability to see public addresses and request transactions. It does not give private keys — but a malicious dApp can ask you to sign dangerous transactions.

Practical steps I use every week:

  1. Open MetaMask and view Connected Sites (extension or mobile menu). Disconnect sites you no longer use.
  2. Revoke token allowances for dApps that had unlimited approvals (see token-approvals-and-revoke).
  3. If you approved something by mistake, move remaining funds to a new account/wallet — approvals don’t protect funds if a contract drains balances.

I once approved an unlimited allowance to a scam contract. Lesson learned: always double-check the contract address and use a small approval amount when possible. And yes, I revoked that approval immediately.

Quick comparison: injected provider vs WalletConnect

Feature Injected provider (Extension) WalletConnect (Mobile pairing)
Where it runs Desktop browser tab (window.ethereum) Mobile app pairing (QR / deeplink)
DApp detection Direct injection into page External bridge session
Deep link support N/A (extension) Depends on OS and app links
Useful when You use desktop extension You’re on mobile or no injection available
Security trade-offs Faster UX; popups only Safer on public browsers; more reliable mobile pairing

screenshot: connection prompt placeholder

Developer checklist: support both providers gracefully

Want fewer support tickets? Implement these patterns:

  • Detect provider: check for window.ethereum and provide a clear fallback button labeled "Connect with WalletConnect." (Users get confused otherwise.)
  • Handle rejection: catch error code 4001 and show a retry or an explanation.
  • Support chain switching: call wallet_switchEthereumChain and offer manual instructions if it fails.
  • Timeouts: don’t hang the UI while waiting for a popup; show a cancel option.

See developer-workflow for sample patterns and deeper technical notes.

Step-by-step: recover from a connection failure

  1. Close the dApp tab and re-open (clears race conditions).
  2. Unlock MetaMask and ensure the correct account is selected.
  3. If using mobile, open the dApp inside MetaMask Mobile or scan the QR.
  4. If the prompt never appears, open DevTools and check window.ethereum presence.
  5. Disconnect stale sessions from Connected Sites and try again.

If you still see metamask connection failed or metamask connected sites error, try the full reinstall (last resort) and restore via seed phrase only if you have a verified backup.

FAQ (real search queries answered)

Q: Why does metamask connects to remix but not my website?
A: Remix auto-injects or requests accounts. Your site likely doesn’t call the correct provider methods or is served insecurely. Check for window.ethereum and request accounts explicitly.

Q: What does metamask connection declined mean?
A: The user rejected the connection request. Show clearer UX and a retry option (and explain why you need the account).

Q: How do I fix metamask deeplink not supported ios?
A: Update MetaMask Mobile, open the dApp inside the MetaMask in-app browser, or use the QR pairing flow from desktop.

Q: Is it safe to keep crypto in a hot wallet?
A: Hot wallets are convenient for daily DeFi, but they carry more risk than offline storage. Use small balances for active use and move big holdings to cold storage.

Q: How do I revoke token approvals?
A: Use the wallet’s token approval screen or a reputable revoke tool (link: token-approvals-and-revoke).

Who should use MetaMask dApp connections — and who should look elsewhere

Best fit: people who interact with DeFi, swap tokens, and test contracts regularly from both desktop and mobile. The UX is fast for daily activity and supports many EVM-compatible chains. I’ve depended on it for quick tests and small trades.

Look elsewhere if: you require enterprise-grade custody, hardware-only signing for every transaction, or a non-EVM-focused workflow (see hardware-ledger and security-best-practices).

Conclusion & next steps

Connection issues are usually either a provider-detection problem (injected provider) or a deeplink/protocol mismatch (WalletConnect). I’ve outlined repeatable tests and step-by-step recoveries so you can confirm where the break happens. Want more targeted help? Read the step-by-step setup guides: install-metamask-mobile, install-metamask-chrome, or the deep troubleshooting guide at troubleshooting-common-errors.

If you run into a specific error message, copy it into the site search or the FAQ above. And if you want to reduce risk today, disconnect unused dApps and revoke unlimited approvals.

Ready to keep testing? Try the quick walkthroughs: connect-metamask-to-dappswalletconnect-and-mobile-dappsdisconnect-and-remove-connected-sites

Try Tangem secure wallet →