getWalletOptionsCatalogue returns the catalogue of external wallet options a user can sign in with through this client. It collapses what used to be multiple per-source calls (installed providers, URI-based connection options, in-app browser entries, install links) into one ordered list, where each entry already carries every connection path the user can take for that wallet.
Use it to render a single, canonical wallet picker without writing per-source merging or deduplication logic.
Usage
getWalletOptionsCatalogue always includes installed wallet providers. Set includeMobileOptions: true to additionally surface URI-based connection options (deeplinking and QR code), in-app browser entries, and install links — this adds one network round-trip so prefer skipping it if you only ever show installed wallets.
Parameters
The client instance is the second positional argument — only required when using multiple Dynamic clients.
Return value
An array ofWalletOption. Each WalletOption has:
Connection options
EachWalletConnectionOption is a discriminated union by type, ordered within connectionOptions from best to worst:
withWalletProvider— connect through a wallet provider already registered with the SDK (browser extension, vendor SDK, etc.).- Fields:
chain,source('selfAnnounced' | 'windowInjected' | 'sdk'),walletProviderKey. - Resolve via
getWalletProviderByKey({ key: walletProviderKey })and call.connect().
- Fields:
- URI deeplink (
type: 'walletConnect' | 'metamaskSdkUri') — drive the connection yourself via a URI that you either render as a QR (desktop) or append onto a deeplink (mobile).- Fields:
chain,deeplinks: { native?, universal? },type. - For
'walletConnect': mint the URI withconnectWithWalletConnect<Chain>. For'metamaskSdkUri': mint the URI withconnectWithMetaMaskUri<Chain>. Either way, append it to the deeplink withappendConnectionUriToDeeplinkfor the mobile case.
- Fields:
inAppBrowser— a mobile wallet that exposes an in-app browser entry URL.- Fields:
chain,url(template containing{{encodedDappURI}}). - Substitute
{{encodedDappURI}}withencodeURIComponent(window.location.href)before opening.
- Fields:
connectionOptions is empty but installationUrls is populated, the wallet is install-only — render an install affordance using the appropriate platform link rather than a connect button.
Picking an install link for the current platform
For install-only wallets (and the “install” fallback path on any other wallet), the SDK ships a small helper that picks the most relevant install URL frominstallationUrls for the platform the user is on right now:
undefined so you don’t end up handing a Firefox user a Chrome Web Store URL.
That said, installationUrls exposes every link the wallet’s manifest publishes — android, chrome, edge, firefox, ios, native, opera, safari — and you’re free to surface several of them at once so the user picks where to install. The helper is a convenience for the common single-button case, not a constraint.
Ordering
WithwalletOptionOrdering: 'relevance' (default), wallets are bucketed into three tiers, in this order:
- Installed — has at least one
withWalletProviderconnection option. - Connectable — has at least one URI deeplink or in-app browser option, but no installed provider.
- Install-only — only
installationUrlsis populated.
connectionOptions array is always ordered by option-type priority (withWalletProvider > URI deeplink > inAppBrowser).
With walletOptionOrdering: 'alphabetical', the outer list is sorted by name only — no tiering. The inner ordering is unchanged.
React
useGetWalletOptionsCatalogue fetches on mount and re-renders when the catalogue changes:
See also
- Build a wallet picker — end-to-end pattern that uses this function.
- Authenticate with WalletConnect — lower-level WalletConnect flow.
- Get Available Wallets to Connect — installed-providers-only alternative.