← Protocols
Exodus
Wallet / Auth·EVM · Solana · Bitcoin · Cardano · Algorand

Exodus

01Description

Exodus is a desktop, mobile, and browser-extension self-custody wallet supporting 50+ chains (EVM, Solana, Bitcoin, Cardano, Algorand, etc.) with native swap and on-ramp UX. The browser extension exposes EIP-1193 providers at `window.exodus.ethereum`, `window.exodus.solana`, and `window.exodus.bitcoin`, and is announced via EIP-6963 (`com.exodus`). Exodus also publishes a Passkeys SDK and headless wallet libraries for embedded use cases.

02Best for
  • 01consumer-friendly desktop + mobile wallet support
  • 02Solana + EVM + Bitcoin one-wallet UX
  • 03passkey-based Web3 auth via Exodus Passkeys SDK
  • 04fiat on-ramp + in-wallet swap surfaces
  • 05Cardano / Algorand / less-common chain coverage
03Install
  • pnpm add wagmi viem@2.x @tanstack/react-query
  • pnpm add @solana/wallet-adapter-react @solana/wallet-adapter-base
04Environment variables
VariableScopeDescription
NEXT_PUBLIC_WALLETCONNECT_PROJECT_IDClientWalletConnect / Reown Cloud project ID — useful for fallback flows on mobile where Exodus prefers WalletConnect v2.
05Prompt snippet
Use Exodus for multi-chain self-custody auth. Detect the injected provider via EIP-6963 (`window.addEventListener('eip6963:announceProvider', e => { if (e.detail.info.rdns === 'com.exodus') setProvider(e.detail.provider) })`) — this is the recommended path. As a fallback, read `window.exodus?.ethereum` (EVM EIP-1193 provider), `window.exodus?.solana` (Solana wallet-standard), or `window.exodus?.bitcoin`. For wagmi v2 use `injected({ target: { id: 'com.exodus', name: 'Exodus', provider: () => window.exodus?.ethereum } })`. For Solana use the Wallet Adapter's auto-discovery — Exodus's Solana provider conforms to `@solana/wallet-standard`, so `useWallets()` from `@solana/wallet-adapter-react` will surface it automatically alongside Phantom, Backpack, and Solflare. Mobile flows: Exodus mobile does not inject a global provider in browsers — pair via WalletConnect v2 instead.
06Gotchas
  • Provider collision: Exodus writes `isExodus: true` on `window.ethereum`, but with MetaMask/OKX/Trust co-installed the flag is unreliable. Always use EIP-6963 with rDNS `com.exodus` — Exodus has explicit docs at `docs.exodus.com/passkeys/recipes/mipd` recommending this path.
  • Mobile UX: the Exodus mobile app does NOT expose a window-level provider in mobile browsers — connecting from a phone requires WalletConnect v2 and a deep-link bounce. iOS Safari's PWA mode strips the return URL on bounce-back; provide a fallback connect button that re-initiates after the user manually returns.
  • Browser extension lifecycle: the Exodus extension uses MV3 service workers that suspend after ~30s of inactivity, returning `null` from `eth_accounts` until the user clicks. Trigger `wallet_requestPermissions` on the first stale-state error to wake the worker.
  • Solana versioned tx and signing: Exodus's Solana provider supports v0 transactions but `signMessage` was historically rate-limited per origin — debounce SIWS (Sign-In with Solana) flows or you'll get spurious user-rejected errors after rapid retries.
  • Cardano / Algorand chains aren't EIP-1193 and are exposed via separate non-standard namespaces (`window.exodus.cardano`, `window.exodus.algorand`) — do not try to route them through viem/wagmi; use chain-native libraries (`lucid-cardano`, `algosdk`) instead.
  • Closed-source core wallet: Exodus's main wallet binary is proprietary — only the Passkeys SDK, headless libraries, and asset-list repos are open source, so don't expect to fork the wallet itself or audit signing internals beyond what's documented.
07Alternatives