Packages

Wallet Integrations

Connect any wallet — JoyID, MetaMask, OKX, and more — with a single unified Signer interface.

Edit on GitHub

CCC supports multiple wallet ecosystems through dedicated signer packages. Each package implements the unified Signer interface so application code stays the same regardless of which wallet the user picks.

All wallet packages below are already bundled in @ckb-ccc/ccc and @ckb-ccc/connector-react. You only need to install them individually if you're building a custom integration.

PackageChainWalletsProvider Detection
@ckb-ccc/joy-idCKB / BTC / EVM / NostrJoyIDWebAuthn / iframe
@ckb-ccc/eip6963EVMMetaMask, Rabby, OKX EVM, any EIP-6963 walleteip6963:announceProvider events
@ckb-ccc/nip07Nostrnos2x, Alby, any NIP-07 extensionwindow.nostr
@ckb-ccc/utxo-globalCKB / BTC / DOGEUTXO Globalwindow.utxoGlobal
@ckb-ccc/reiCKBREI Walletwindow.rei.ckb
@ckb-ccc/okxBTC / NostrOKX Walletwindow.okxwallet
@ckb-ccc/uni-satBTCUniSatwindow.unisat
@ckb-ccc/xverseBTCXverse, any SATS Connect walletwindow.btc_providers

Integration contract

Every wallet package follows the same pattern:

  1. Factory function — e.g. getOKXSigners(client) — returns SignerInfo[] or a single Signer.
  2. Provider detection — checks for a browser-injected object before creating signers.
  3. Graceful degradation — returns an empty array (or undefined) when the wallet isn't installed.
  4. onReplaced() listener — notifies the app when the user switches accounts in the wallet UI.

This means SignersController can treat all wallets uniformly with zero special-casing in your application code.

On this page