Getting Started

Choose an Integration

Compare the browser extension SDK and the mobile WalletConnect integration, and decide which to support.

Joey runs as a browser extension on desktop and as a mobile app on iOS and Android. They connect to your app in different ways, and most dApps should support both.

Browser extension Mobile app
Package @joeywallet/wallet-sdk @joey-wallet/wc-client, or any WalletConnect setup
Transport Provider injected into the page (window.xrpl.joey), plus Wallet Standard and CAIP-294 discovery WalletConnect v2 relay, via QR code or deep link
Setup Install the package. No keys or backend config. A Reown project ID
Runtime dependencies None The WalletConnect stack
Where users are Desktop Chrome and other Chromium browsers Phones, or desktop users who pair by QR code
Signing calls signTransaction, signAndSubmitTransaction, signTransactionFor, signTransactionBulk, signIn xrpl_signTransaction, xrpl_signTransactionFor, xrpl_signTransactionBulk
Submitting Separate sign-only and sign-and-submit methods submit defaults to true
Sign-in signIn(): a CAIP-122 message, or a challenge transaction for Ledger accounts Sign-in challenge v1 in the WalletConnect session
Errors JoeyRpcError with EIP-1193 codes WalletConnect and JSON-RPC errors

Note

The two npm packages have different scopes: @joeywallet/wallet-sdk for the extension and @joey-wallet/wc-client for WalletConnect.

Which should I use?

  • Desktop web app: support the extension with the SDK. There's no QR step and nothing to configure.
  • Mobile web, or desktop users without the extension: offer WalletConnect.
  • Both (recommended): detect the extension first and fall back to WalletConnect.
import { isJoeyAvailable, getJoey } from '@joeywallet/wallet-sdk'

if (isJoeyAvailable()) {
  const joey = getJoey()!
  await joey.connect()
} else {
  // Offer WalletConnect (wc-client's actions.connect()) or an install link
}

Things that differ

  • Keys and settings are separate. The extension and the mobile app don't sync. A user who imports the same recovery phrase into both gets the same addresses, but connected sites and settings are separate.
  • The extension doesn't speak WalletConnect. Pairing the extension over WalletConnect isn't supported yet.
  • Bulk failure details. If a bulk submit partly fails, the extension returns an object with per-entry results, while mobile returns a JSON string with failedIndex and the signed transactions. Only failedIndex means the same thing in both.