What do I lose if I bypass the SDK and use `window.ethereum` directly when the extension is installed?

You lose several capabilities that exist because the connection goes through the MM Connect EVM SDK:

  • Reliable EIP-6963 discoverywindow.ethereum can be clobbered when multiple wallets are installed (Rabby, Phantom EVM, Coinbase, OKX, etc.).

  • Unified provider surface — the same EIP1193Provider across extension, mobile, and QR transports. No divergent code paths.

  • Normalized lifecycle eventswallet_sessionChanged, accountsChanged, chainChanged with consistent shapes.

  • Graceful fallback — if the user disables/uninstalls the extension mid-session, the SDK can transparently fall through to MWP.

  • Shortcut flowsconnectAndSign and connectWith (one-tap connect + sign / connect + transaction) require the SDK.

  • Read-only RPC access pre-connectclient.getProvider() works before connect(), backed by api.supportedNetworks (Infura + custom RPCs).

  • Consistent install UXui.showInstallModal handles the “MetaMask not detected” path.

  • Forward compatibility with multichain — Solana support via @metamask/connect-multichain reuses the same client model.

The most common class of integration bugs we see comes from dapps maintaining

two paths — raw injected for extension users, SDK for everyone else. Behaviors

diverge subtly (error codes, permission semantics, batching, chain-switch

shapes), and parity drifts over time.