Skip to main content

WidgetProvider

The provider component that sets up the widget context and configuration.

Props

SDK Configuration

The defaultOptions configuration is optional. When not specified, the widget will display all supported chains and use default quote preference.

Default Source and Destination

Chain Loading Callback

onSupportedChainsLoad receives Metalayer Chain values from the SDK. Convert them with chainsToViemChains or chainToViemChain before passing them to wagmi, viem, or the RPC transport helpers below.
Use createWidgetClient so each chain’s public client uses Metalayer’s RPC ordering and fallbacks. Build a non-empty viem chain tuple from chainsToViemChains(metalayerChains) (or a filtered list). Below, ViemChain is viem’s Chain type under an alias so it is not confused with the Metalayer Chain from the SDK.
📋 Note: The widget requires an external WagmiProvider — it does not create its own. Use onSupportedChainsLoad to update your wagmi config with the widget’s supported chains.

RPC transport helpers

These helpers take viem Chain objects—the same shape returned by chainToViemChain / chainsToViemChains in @metalayer/sdk. Internally, createWidgetTransport calls collectChainHttpRpcUrls (see SDK utilities) and builds a viem fallback transport over those HTTP URLs: Metalayer default RPC first, then rpc-0, rpc-1, … slots that chainToViemChain fills from alternativeRpcs. If no URLs are present, it falls back to viem’s default http() behavior.

createWidgetTransport(chain)

Returns a viem Transport for a single chain. It reads every HTTP RPC URL from the chain via collectChainHttpRpcUrls and wraps them in a viem fallback() transport, so requests automatically retry on the next endpoint when one is rate-limited or unavailable. If no URLs are present it returns a plain http() transport. Most integrations should use createWidgetClient (wagmi client callback) or createWidgetTransportsRecord (wagmi transports map) instead of calling this directly. Use createWidgetTransport when you need the raw transport for a custom viem client or want to compose it with other transports:

createWidgetClient(chain)

Convenience wrapper: creates a viem Client with createWidgetTransport already wired in. This is the recommended way to configure wagmi via the client callback (see Wagmi client callback above).

createWidgetTransportsRecord(chains)

Builds Record<number, Transport> keyed by chain id. Useful with RainbowKit’s getDefaultConfig or any wagmi setup that takes a transports map instead of a client callback:
For custom transport stacks (for example viem fallback()), you can read ordered HTTP URLs from a viem chain with collectChainHttpRpcUrls in @metalayer/sdk.

Theme Configuration

The widget supports extensive theming options including predefined themes, custom colors, fonts, and advanced overrides. See the Theming page for complete customization options and visual examples.

Widget

The main UI component that renders the bridge interface.

Props

See WidgetProps for the complete props reference.

Type Definitions

MetalayerConfig

SDK configuration object. See MetalayerConfig in the SDK documentation for full details.

WidgetProps

When onDisconnectClick is provided, the widget manages wallet connection state internally and displays wallet info in the settings tab. If your page already handles wallet connect/disconnect logic, you don’t need to set this prop; the widget will work with your existing wallet connection management.

WidgetSolanaSigner

Solana support is currently in beta and requires additional dependencies. See the EVM + Solana installation for setup instructions.

DefaultChainToken

Utility Functions

CSS Styling

The widget requires a CSS import for proper styling:

Error Handling

Error Callback

Handle errors in the widget through the onError callback: