fromChain and toChain to different values.
Cross-chain Composer works across EVM chains today. Non-EVM chains (Solana, etc.) are not yet supported.
How It Works
Cross-chain Composer combines two LI.FI capabilities:- Bridge routing: LI.FI selects the optimal bridge to move assets from the source chain to the destination chain.
- Composer execution: On the destination chain, Composer deposits into the target protocol atomically.
Cross-Chain vs. Same-Chain
| Same-chain | Cross-chain | |
|---|---|---|
| Transactions | 1 | 2 (source chain + destination chain) |
| Atomicity | Fully atomic | Per-chain atomic; eventually consistent overall |
| Status tracking | Not needed | Poll /status until complete |
| Integration | fromChain === toChain | fromChain !== toChain |
Example: ETH (Ethereum) → Morpho Vault (Base)
Deposit ETH from Ethereum into a Spark-curated Morpho USDC vault on Base. LI.FI bridges ETH, swaps to USDC on Base, and deposits into the vault.Example: USDC (Arbitrum) → Morpho Vault (Base)
Bridge USDC from Arbitrum and deposit into the Spark-curated Morpho vault on Base in a single flow.- Bridge USDC from Arbitrum to Base
- Deposit USDC into Morpho vault on Base
- User receives vault tokens
Swap + Bridge + Deposit
User has a different token on a different chain. Example: ETH on Ethereum → Aave USDC lending on Optimism- Swap ETH → USDC on Ethereum, then bridge USDC to Optimism, or bridge ETH directly and swap on the destination chain
- Deposit USDC into Aave on Optimism
- User receives aUSDC tokens
Bridge + Swap + Stake
User wants to stake on a different chain. Example: USDC on Arbitrum → wstETH (Lido) on Ethereum- Bridge USDC from Arbitrum to Ethereum
- Swap USDC → ETH on Ethereum
- Stake ETH via Lido, wrap to wstETH
- User receives wstETH
The routing engine may choose a different sequence (e.g., swap on Arbitrum first, then bridge ETH) if it finds a better path.
Status Tracking
Cross-chain transfers require status polling. After the source chain transaction confirms, pollGET /v1/status until the transfer reaches DONE or FAILED.
TypeScript
Partial Failure Handling
Cross-chain flows are eventually consistent. In rare cases, the bridge step succeeds but the destination deposit fails. When this happens:- The user receives the bridged tokens on the destination chain rather than vault tokens
- Source chain tokens are not at risk
- Gas fees are consumed
FAILED status and prompt users to check their destination chain balance if a cross-chain transfer does not complete.
Next Steps
API Integration
Full API integration guide with same-chain and cross-chain examples
SDK Integration
Managed cross-chain execution with the LI.FI TypeScript SDK
Deposit Recipes
Copy-paste recipes for common protocols and chains
Supported Protocols
Protocols available for cross-chain deposits

