Every chain App Kit supports
18 testnets, 21 mainnets. Arc, Base, Arbitrum, Optimism, Linea, Sonic, Sei, HyperEVM, Monad, and on. One widget, one config.
Drop <WhiskSend /> into your app and your users can send or bridge USDC across any chain App Kit supports. Wallet connect, ENS lookup, and CCTP bridging stay inside the widget so you stay out of the plumbing.
Send, bridge, or swap USDC across any chain. Whisk never holds your keys.
Routes USDC across these chains
How does it work?
Install the package, hand it your Circle key, render the surface. Whisk runs every wallet, every chain, and every retry inside the widget.
Add the two packages. Wrap your tree in <WhiskProvider /> with your Circle App Kit key. That's the entire setup.
1import { WhiskProvider } from "@usewhisk/react"2 3export default function RootLayout({ children }) {4 return (5 <WhiskProvider kitKey="…">6 {children}7 </WhiskProvider>8 )9}Drop in <WhiskSend /> for the styled card, <SwapTab /> for the trade surface, or call useWhisk / useWhiskSwap if you want to build your own UI on the engine.
<WhiskSend kitKey={…} />Styled send + bridge + swap card
<SwapTab kitKey={…} />Same-chain trade surface, standalone
const wk = useWhisk()Headless hook. Your UI, our engine
The widget handles wallet connect, ENS lookup, balance checks, gas estimation, and Circle's CCTP bridging. Your users sign once on the source chain; the mint lands on the destination.
Why Whisk
Every detail you'd otherwise build yourself (themed, typed, chain-aware) already sits behind the component.
18 testnets, 21 mainnets. Arc, Base, Arbitrum, Optimism, Linea, Sonic, Sei, HyperEVM, Monad, and on. One widget, one config.
Chain names are a real union type from @usewhisk/core. A typo fails the build, not the user.
1import type { Chain } from "@usewhisk/core"2const chain: Chain = "Arc_Testnet"3const bad: Chain = "Mainnet"4 ✗ Type '"Mainnet"' is not5 assignable to type 'Chain'.Whisk reads CSS variables. Override `--whisk-primary` once and the whole widget follows. Light, dark, your own palette.
Circle's Iris service relays the mint on the destination chain, so the user only signs on the source. No chain-switch dance.
Skip the styled card and call `useWhisk`, `useWhiskSwap`, `useWhiskAccount` directly. Same engine, your UI.
const { state, actions } = useWhisk()Addresses, ENS, and ENSIP-11 ship by default. Plug in Lens, Farcaster, an email lookup or whatever you need with `composeResolvers`.
composeResolvers([ addressResolver, ensResolver, lensResolver])Built for
A widget for both sides of the integration: the engineer touching the code, and the company shipping the product.
If you'd rather wire one component than rebuild wallet, chain, ENS, and CCTP plumbing for the third time, Whisk is the way out.
Mount the card, or call useWhisk / useWhiskSwap and own the UI. Same engine, your design system.
Chain literals, token symbols, and event payloads all narrow in your editor. No any, no surprises at runtime.
Read the engine, fork the widget, copy a pattern. Whisk lives on GitHub, with the docs, the examples, and the changelog.
Recipes
Each tab is a basic integration that shows how Whisk slots into a different kind of product. They aren't finished apps. They're starting points you can clone and adapt. Whisk isn't limited to these use cases. It fits anywhere a USDC send, bridge, or swap belongs.
Recipient + total + both chains are locked from the cart. The widget collapses to a confirm-and-pay surface so the buyer can't fat-finger it.
Foundation
Whisk isn't a new stablecoin stack. It's an opinionated shell over Circle's payments rails and the chain they're built around.
App Kit · CCTP · Iris
The wallet engine, the chain support, and the cross-chain transfer protocol. Whisk talks to Circle's SDK so you don't have to integrate three things separately.
USDC-native chain · sub-second finality
Arc is Circle's purpose-built stablecoin chain, and it's the canonical home for USDC flows. Whisk ships with Arc support on day zero and routes there by default when you don't pin a chain.
On their testnets today, mainnet behind the gate
USDC, EURC, USDT, USDe, DAI, PYUSD
Engine, widget, examples, docs
Install, provider, surface
Install the package, mount the provider, render the widget. The rest of the docs is just helping you go further than the three-line version.
$ pnpm add @usewhisk/react @usewhisk/core