Live on testnets·Mainnet soon

One widget. Every USDC payment shape.

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.

Arc
Connect to continue

Send, bridge, or swap USDC across any chain. Whisk never holds your keys.

Routes USDC across these chains

ArcArbitrumAvalancheBaseCodexEthereumHyperEVMInjectiveInkLineaMonadOptimismPlumePolygonSeiSolanaSonicUnichainWorld ChainXDCArcArbitrumAvalancheBaseCodexEthereumHyperEVMInjectiveInkLineaMonadOptimismPlumePolygonSeiSolanaSonicUnichainWorld ChainXDC

How does it work?

Three steps, no plumbing.

Install the package, hand it your Circle key, render the surface. Whisk runs every wallet, every chain, and every retry inside the widget.

Step 01

Install and wrap your app

Add the two packages. Wrap your tree in <WhiskProvider /> with your Circle App Kit key. That's the entire setup.

app/layout.tsx
1import { WhiskProvider } from "@usewhisk/react"2 3export default function RootLayout({ children }) {4  return (5    <WhiskProvider kitKey="…">6      {children}7    </WhiskProvider>8  )9}
Step 02

Pick the surfaces you need

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<WhiskSend kitKey={…} />

Styled send + bridge + swap card

SwapTab<SwapTab kitKey={…} />

Same-chain trade surface, standalone

useWhiskconst wk = useWhisk()

Headless hook. Your UI, our engine

Step 03

Ship. Every chain just works

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.

User signson source chain
Iris relaysattestation
Mint landson destination
Powered by Circle CCTP + Iris

Why Whisk

Built for the integration, not the demo.

Every detail you'd otherwise build yourself (themed, typed, chain-aware) already sits behind the component.

Every chain App Kit supports

18 testnets, 21 mainnets. Arc, Base, Arbitrum, Optimism, Linea, Sonic, Sei, HyperEVM, Monad, and on. One widget, one config.

Type-safe end to end

Chain names are a real union type from @usewhisk/core. A typo fails the build, not the user.

chains.ts
1import type { Chain } from "@usewhisk/core"2const chain: Chain = "Arc_Testnet"3const bad: Chain = "Mainnet"4  ✗ Type '"Mainnet"' is not5    assignable to type 'Chain'.

Themed to your brand

Whisk reads CSS variables. Override `--whisk-primary` once and the whole widget follows. Light, dark, your own palette.

Bridges in one signature

Circle's Iris service relays the mint on the destination chain, so the user only signs on the source. No chain-switch dance.

SSource
FForwarder
DDestination
one signature

Hooks if you want them

Skip the styled card and call `useWhisk`, `useWhiskSwap`, `useWhiskAccount` directly. Same engine, your UI.

<WhiskSend />component
const { state, actions } = useWhisk()

Resolvers you can stack

Addresses, ENS, and ENSIP-11 ship by default. Plug in Lens, Farcaster, an email lookup or whatever you need with `composeResolvers`.

inputaddressENScustommatch
composeResolvers([ addressResolver, ensResolver, lensResolver])

Built for

Whoever's shipping the payment.

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.

Headless or styled, your call

Mount the card, or call useWhisk / useWhiskSwap and own the UI. Same engine, your design system.

Type-safe across every chain

Chain literals, token symbols, and event payloads all narrow in your editor. No any, no surprises at runtime.

Open source, MIT-licensed

Read the engine, fork the widget, copy a pattern. Whisk lives on GitHub, with the docs, the examples, and the changelog.

One package, both audiences. No fork, no enterprise tier.

Recipes

A few places Whisk fits in.

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.

atelier-hibiscus.com/checkout
atelier hibiscus
3 items
CartShippingPayment
Order #AT-23184

Your order

Linen camp shirt
Ecru · M · Qty 1
$48.00
Tortoise reading glasses
Amber · Qty 1
$29.00
Ceramic candle
Fig · 8oz · Qty 1
$10.00
Subtotal$87.00
Shipping (DHL Express)Free over $50
Tax$0.00
Total$87.00 USDC

Payment

CardUSDC
Base0x42a8…7c91
You have 312.40 USDC

E-commerce checkout

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.

See live demo

Foundation

Built on tools that already settle real money.

Whisk isn't a new stablecoin stack. It's an opinionated shell over Circle's payments rails and the chain they're built around.

Circle

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.

Arc Network

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.

0
Chains supported

On their testnets today, mainnet behind the gate

0
Stablecoins

USDC, EURC, USDT, USDe, DAI, PYUSD

0%
MIT-licensed

Engine, widget, examples, docs

0 lines
To ship

Install, provider, surface

Three lines and you're shipping.

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