| id | ccip-tools-overview |
|---|---|
| title | CCIP Tools |
| sidebar_label | CCIP Tools Overview |
| sidebar_position | 0 |
| edit_url | https://github.com/smartcontractkit/ccip-tools-ts/edit/main/docs/index.md |
TypeScript SDK and CLI for Chainlink CCIP (Cross-Chain Interoperability Protocol).
:::important This tool is provided under an MIT license and is for convenience and illustration purposes only. :::
| Task | Tool | Example |
|---|---|---|
| Track message status | CLI | ccip-cli show 0xTxHash |
| Send cross-chain message | SDK/CLI | Programmatic or command-line |
| Manually execute stuck message | CLI | ccip-cli manual-exec 0xTxHashOrMessageId |
| Check supported tokens | CLI | ccip-cli get-supported-tokens -n <network> -a <address> |
| Query lane latency | CLI/SDK | ccip-cli lane-latency <source> <dest> |
| Integrate CCIP in your dApp | SDK | Import and use in your code |
# CLI (global install)
npm install -g @chainlink/ccip-cli
# SDK (project dependency)
npm install @chainlink/ccip-sdkTrack an existing CCIP message to verify everything works:
# Track a message on Sepolia → Arbitrum Sepolia
ccip-cli show 0x0e0e39d96754b8a35a07b233e79e20807af3045e77f183ee6a23e6d628396273 \
--rpc https://ethereum-sepolia-rpc.publicnode.com \
--rpc https://arbitrum-sepolia-rpc.publicnode.comYou should see message details, commit status, and execution state.
import { EVMChain, networkInfo } from '@chainlink/ccip-sdk'
// 1. Connect to source chain
const source = await EVMChain.fromUrl('https://ethereum-sepolia-rpc.publicnode.com')
// 2. Define your message
const router = '0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59' // Sepolia Router
const dest = networkInfo('ethereum-testnet-sepolia-arbitrum-1').chainSelector
const message = {
receiver: '0xYourReceiverAddress',
data: '0x48656c6c6f', // "Hello" in hex
extraArgs: { gasLimit: 200_000n }, // Gas for receiver's ccipReceive callback
}
// 3. Get the fee
const fee = await source.getFee({ router, destChainSelector: dest, message })
console.log('Fee:', fee.toString())
// 4. Send (requires wallet - see SDK docs)
// const request = await source.sendMessage({ router, destChainSelector: dest, message: { ...message, fee }, wallet })┌─────────────────────────────────────────────────────────────────────┐
│ ccip-tools-ts │
│ │
│ ┌──────────────────────────┐ ┌──────────────────────────┐ │
│ │ │ │ │ │
│ │ @chainlink/ccip-sdk │◀───────│ @chainlink/ccip-cli │ │
│ │ │ │ │ │
│ │ • Chain abstraction │ │ • show, send, manual-exec│ │
│ │ • Message tracking │ │ • parse, get-supported-tokens│
│ │ • Fee estimation │ │ • token, lane-latency │ │
│ │ • Transaction building │ │ • RPC & wallet mgmt │ │
│ │ • API client │ │ • Output formatting │ │
│ │ │ │ │ │
│ └──────────────────────────┘ └──────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
SDK - Library for programmatic integration. Supports multiple chain families.
CLI - Command-line tool that uses the SDK. Great for debugging, testing, and scripting.
| Chain Family | Networks | Library | Status |
|---|---|---|---|
| EVM | Ethereum, Arbitrum, Optimism, Polygon, Avalanche, Base, etc. | ethers.js v6 or viem | Supported |
| Solana | Mainnet, Devnet | solana-web3.js | Supported |
| Aptos | Mainnet, Testnet | aptos-ts-sdk | Supported |
| Sui | Mainnet, Testnet | @mysten/sui | Partial (manual exec) |
| TON | Mainnet, Testnet | @ton/ton | Partial (no token pool/registry queries) |
| Canton | LocalNet, DevNet, TestNet, MainNet | Canton Ledger JSON API | Partial (send + manual exec; requires config file) |
- Node.js v20+ (v24+ recommended for development and running tests)
- npm for package management
- RPC endpoints for the networks you want to interact with
| Guide | Description |
|---|---|
| SDK Guide | Integrate CCIP in your TypeScript application |
| CLI Reference | Command-line usage and examples |
| Contributing | Development setup and guidelines |
| Adding New Chain | Implement support for a new blockchain |
- CCIP Official Documentation
- CCIP Directory - Router addresses by network
- GitHub Repository
- npm: @chainlink/ccip-sdk
- npm: @chainlink/ccip-cli