> ## Documentation Index
> Fetch the complete documentation index at: https://docs.layerswap.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Wallets

> How wallet support works in the widget — filtering chains and supplying credentials.

The Widget supports wallets for its available networks by default. Configure wallet props only when you need to:

1. **Limit which chain wallets are available** — via `walletProvidersConfig`
2. **Provide credentials for WalletConnect, TON, or Immutable Passport** — via `walletDefaults`

If your app already runs wagmi, you can additionally [share your wagmi config](/widget/wagmi-config) so the widget reuses your users' EVM wallet connection.

<Note>
  Coming from the self-bundled Widget? The `walletProviders` prop and `createEVMProvider()`-style factories do not exist in `@layerswap/widget-react`. See [Self-bundled Widget](/widget/advanced/self-bundled) or the [migration guide](/widget/advanced/migrate-to-widget-react).
</Note>

## Filtering chains

Use `walletProvidersConfig` to limit which chain wallets users can connect:

```tsx theme={null}
// Only EVM and Solana wallets
<LayerswapWidget
  config={widgetConfig}
  walletProvidersConfig={{ include: ['evm', 'solana'] }}
/>

// Everything except Tron and Fuel
<LayerswapWidget
  config={widgetConfig}
  walletProvidersConfig={{ exclude: ['tron', 'fuel'] }}
/>
```

* `include` keeps only the listed wallet types; `exclude` removes the listed wallet types.

The available provider ids (`WalletProviderId`):

| Id              | Chain family                             |
| --------------- | ---------------------------------------- |
| `evm`           | EVM chains (Ethereum, Base, Arbitrum, …) |
| `starknet`      | Starknet                                 |
| `solana`        | Solana                                   |
| `bitcoin`       | Bitcoin                                  |
| `ton`           | TON                                      |
| `tron`          | Tron                                     |
| `fuel`          | Fuel                                     |
| `paradex`       | Paradex                                  |
| `imtblPassport` | Immutable Passport                       |

## Supplying credentials

Some wallet services need your own credentials or metadata. Pass them via `walletDefaults`:

```tsx theme={null}
// Module scope, so the object stays referentially stable
const walletDefaults = {
  walletConnect: {
    projectId: 'YOUR_WALLETCONNECT_PROJECT_ID', // required for WalletConnect
    name: 'Your App',
    description: 'Your app description',
    url: 'https://yourapp.com',
    icons: ['https://yourapp.com/icon.png'],
  },
  ton: {
    tonApiKey: 'YOUR_TON_API_KEY',
    manifestUrl: 'https://yourapp.com/tonconnect-manifest.json',
  },
  immutablePassport: {
    publishableKey: 'YOUR_PUBLISHABLE_KEY',
    clientId: 'YOUR_CLIENT_ID',
    redirectUri: 'https://yourapp.com/passport/callback',
    logoutRedirectUri: 'https://yourapp.com/',
  },
};

<LayerswapWidget config={widgetConfig} walletDefaults={walletDefaults} />
```

<ResponseField name="walletConnect" type="object">
  Your [WalletConnect Cloud](https://cloud.walletconnect.com/) `projectId` (required for WalletConnect connections) plus optional app metadata (`name`, `description`, `url`, `icons`) shown in the wallet's connection prompt.
</ResponseField>

<ResponseField name="ton" type="object">
  TON wallet support configuration. Both `tonApiKey` and the `manifestUrl` of your [TON Connect manifest](https://docs.ton.org/develop/dapps/ton-connect/manifest) are required. TON wallets appear only when this object is supplied.
</ResponseField>

<ResponseField name="immutablePassport" type="object">
  Immutable Passport client configuration. `publishableKey`, `clientId`, `redirectUri`, and `logoutRedirectUri` are all required. Immutable Passport appears only when this object is supplied.
</ResponseField>

## Sharing your wagmi config

If your app already uses wagmi for EVM wallets, pass your `Config` as the `wagmiConfig` prop and the widget adopts it — same connected account, same chain, no second connect flow. This replaces the old "Partial Integration (EVM)" setup and has its own page:

<Card title="Sharing your wagmi config" icon="plug" href="/widget/wagmi-config">
  Reuse your app's EVM wallet connection inside the widget
</Card>
