← Protocols
Bitget Wallet
Wallet / Auth·EVM · Solana · Bitcoin · TON · Aptos · Sui · Cosmos

Bitget Wallet

01Description

Multi-chain self-custody wallet (mobile + browser extension), formerly known as BitKeep — rebranded after Bitget's 2023 acquisition. Supports 100+ chains across EVM, Solana, Bitcoin, TON, Aptos, Sui, and Cosmos. Provider is injected at `window.bitkeep.ethereum` (legacy namespace retained for backward compatibility) and announced via EIP-6963.

02Best for
  • 01EVM + Solana + TON multi-chain dApps
  • 02Asia-region consumer onboarding
  • 03BNB Chain / opBNB / Arbitrum power-user flows
  • 04in-wallet dApp browser distribution
  • 05WalletConnect mobile fallback
03Install
  • pnpm add @bitget-wallet/web3-sdk
  • pnpm add wagmi viem@2.x @tanstack/react-query
04Environment variables
VariableScopeDescription
NEXT_PUBLIC_WALLETCONNECT_PROJECT_IDClientWalletConnect / Reown Cloud project ID — used for Bitget Wallet mobile deep-links via WalletConnect v2.
05Prompt snippet
Use Bitget Wallet (formerly BitKeep) for multi-chain auth. Prefer EIP-6963: subscribe to `eip6963:announceProvider` and match `info.rdns === 'com.bitget.web3'`. As a fallback, read `window.bitkeep.ethereum` (EVM, the legacy namespace is still authoritative), `window.bitkeep.solana` (Solana), or `window.bitkeep.suiWallet` / `window.bitkeep.aptos`. Do not read `window.bitget` — that namespace is reserved for the centralized exchange app and is not the wallet provider. For wagmi v2 use `injected({ target: { id: 'bitget', name: 'Bitget Wallet', provider: () => window.bitkeep?.ethereum } })`. Mobile deep-link uses `bitkeep://bkconnect?action=dapp&url=...` (legacy scheme retained) — but the recommended cross-platform path is WalletConnect v2 since the `bitkeep://` scheme is blocked by `<a href>` and `window.open` on iOS Safari and must be triggered from a same-origin user gesture.
06Gotchas
  • Rebrand confusion: the wallet's product name is Bitget Wallet but the injected namespace is still `window.bitkeep` — do not look for `window.bitget` (that's the CEX, if present at all). Aliases (`bitkeep`, `bitkeep-wallet`) must be supported in any wallet detection list.
  • Provider collision: Bitget Wallet writes `isBitKeep` and `isBitKeepChrome` flags on `window.ethereum`, but with MetaMask/OKX/Trust co-installed the global is non-deterministic. Always use EIP-6963 with rDNS `com.bitget.web3` to disambiguate.
  • Mobile deep-link UX: the `bitkeep://` scheme cannot be opened via `href` or `window.open` on iOS Safari — wallets reject the call silently. Use WalletConnect v2 universal links instead, and test the bounce-back from in-app browsers (Telegram, Twitter, Line) which strip return URLs.
  • Multi-chain provider conflicts: enabling both Solana and EVM connections in the same session may leave stale `accountsChanged` listeners — explicitly call `provider.removeAllListeners('accountsChanged')` before switching chains, or React state desyncs from the wallet.
  • Browser extension lifecycle: the Bitget Wallet extension uses MV3 service workers that are aggressively suspended; long-idle sessions return `null` from `eth_accounts` until the user re-clicks. Wrap the first call in a retry that triggers `wallet_requestPermissions` on MethodNotFoundError.
  • Backward compat npm packages: older `@bitkeep/*` packages still publish but are unmaintained — pin to `@bitget-wallet/*` and audit your tree (`pnpm why @bitkeep/web3-utils`) to avoid pulling in deprecated polyfills.
07Alternatives