> ## Content Index
> Fetch the complete content index at: https://stablecoininsider.org/llms.txt
> Use this file to discover other available public pages before exploring further.

# How to Transfer USDC with Circle Bridge Kit (2026)
- URL: https://stablecoininsider.org/how-to-transfer-usdc-with-circle-bridge-kit/
- Published: 2026-10-10T06:01:00.000Z
- Updated: 2026-10-10T06:18:03.000Z
- Description: Circle Bridge Kit turns CCTP into kit.bridge(). Here's the npm 1.15.2 API, FAST vs SLOW fees, useForwarder, and when to stay on manual depositForBurn.
- Author: Alexandra
- Tags: Fintech, Stablecoins

Manual CCTP still works, but it makes you own three moving parts: depositForBurn, an Iris attestation poll, and receiveMessage on the destination. Circle's own developer docs now point frontend apps at Bridge Kit instead, a thin SDK that wraps that flow into one call.

This guide is a Stablecoin Insider operator read of **Circle Bridge Kit** @circle-fin/bridge-kit 1.15.2: the real kit.bridge shape, default CCTPv2 provider, estimate / supportsRoute / useForwarder, FAST vs SLOW fees, and where the one-liner still loses to hand-rolled CCTP. You'll leave with a working install path, a comparison table, and the named downsides.

### Key Takeaways

- Bridge Kit 1.15.2 ships a one-call kit.bridge over CCTPv2 with 17,873 weekly npm downloads.
- Default provider is CCTPV2BridgingProvider; transfer speed defaults to FAST.
- FAST burns cost a route fee (Circle lists 0–13 bps); SLOW / Standard is 0 bps on fee tables.
- useForwarder: true lets Circle's Orbit relayer attest and mint without a destination signer.
- Downsides: private-key adapters, default RPC trust, maxFee with forwarder fees, and CCTP-only routes.

🧭

What this guide is: a package and docs audit of @circle-fin/bridge-kit 1.15.2 (npm latest as of 10 October 2026), plus @circle-fin/adapter-viem-v2 1.19.0 and @circle-fin/provider-cctp-v2 1.14.1, checked against the published README, index.d.mts types, jsDelivr QUICKSTART, and Circle CCTP docs. No mainnet funds moved.

## What Circle Bridge Kit is (and what it is not)

Bridge Kit is Circle's official TypeScript SDK for cross-chain USDC bridging. The [published README on jsDelivr](https://cdn.jsdelivr.net/npm/@circle-fin/bridge-kit@1.15.2/README.md) describes it as the recommended integration surface for USDC bridging between EVM and non-EVM chains, with bridging reduced to a single function call.

It sits on top of Cross-Chain Transfer Protocol (CCTP), Circle's burn-and-mint path. Circle's [CCTP overview](https://developers.circle.com/cctp) says to use Bridge Kit to simplify frontend bridging, and to call CCTP directly for backend transfers that need full control.

That split matters. Bridge Kit is not a liquidity bridge like Across or Stargate, and it is not a quote aggregator like LI.FI. It moves native USDC by burning on the source chain and minting on the destination. For how that compares to wrapped-bridge liquidity, see Stablecoin Insider's [best crypto cross-chain bridges in 2026](https://stablecoininsider.org/best-crypto-cross-chain-bridges-in-2026/) and [best cross-chain aggregators for 2026](https://stablecoininsider.org/best-cross-chain-aggregators-for-2026/).

## npm facts Stablecoin Insider checked on 10 October 2026

Stablecoin Insider pulled registry metadata and the downloads API the same morning this post was drafted. Numbers below are point-in-time, not projections.

| Package                                                                                                       | Version | Weekly downloads                                                                       | Role                         |
| ------------------------------------------------------------------------------------------------------------- | ------- | -------------------------------------------------------------------------------------- | ---------------------------- |
| [@circle-fin/bridge-kit](https://cdn.jsdelivr.net/npm/@circle-fin/bridge-kit@1.15.2/README.md)                | 1.15.2  | [17,873](https://api.npmjs.org/downloads/point/last-week/@circle-fin/bridge-kit)       | Orchestrator (BridgeKit)     |
| [@circle-fin/adapter-viem-v2](https://cdn.jsdelivr.net/npm/@circle-fin/adapter-viem-v2@1.19.0/package.json)   | 1.19.0  | [10,723](https://api.npmjs.org/downloads/point/last-week/@circle-fin/adapter-viem-v2)  | EVM adapter (Viem v2)        |
| [@circle-fin/provider-cctp-v2](https://cdn.jsdelivr.net/npm/@circle-fin/provider-cctp-v2@1.14.1/package.json) | 1.14.1  | [18,451](https://api.npmjs.org/downloads/point/last-week/@circle-fin/provider-cctp-v2) | Default USDC CCTPv2 provider |

Source: npm registry metadata and the [npm downloads API](https://api.npmjs.org/downloads/point/last-week/@circle-fin/bridge-kit) for 2–8 October 2026\. Monthly downloads for Bridge Kit in the prior 30 days were [75,511](https://api.npmjs.org/downloads/point/last-month/@circle-fin/bridge-kit).

Direct dependencies on Bridge Kit 1.15.2, from its published package.json, include @circle-fin/provider-cctp-v2 ^1.14.1, @circle-fin/provider-cctpx ^1.0.2, @circle-fin/provider-fee-v1 ^0.3.2, plus zod 3.25.67, pino 10.1.0, bs58 6.0.0, abitype, ethersproject helpers, and @solana/web3.js. The package requires **Node.js >= 20.0.0** and exports . plus ./chains.

The published README claims **52 chains** and **1,300 total bridge routes** through CCTPv2, with 26 mainnet chains listed (Arbitrum, Arc, Avalanche, Base, Codex, Cronos, Edge, Ethereum, HyperEVM, Injective, Ink, Linea, Monad, Morph, OP Mainnet, Pharos, Plasma, Plume, Polygon PoS, Sei, Solana, Sonic, Unichain, World Chain, XDC, X Layer). That list is from the [1.15.2 README on jsDelivr](https://cdn.jsdelivr.net/npm/@circle-fin/bridge-kit@1.15.2/README.md), not an on-chain census Stablecoin Insider re-counted.

## The API shape: kit.bridge, estimate, supportsRoute, useForwarder

Stablecoin Insider unpacked the 1.15.2 tarball and read package/index.d.mts (about [13,440 lines of types on jsDelivr](https://cdn.jsdelivr.net/npm/@circle-fin/bridge-kit@1.15.2/index.d.mts)). The orchestrator is declare class BridgeKit. Default providers are created by getDefaultProviders, which returns a readonly tuple with CCTPV2BridgingProvider first and CCTPXBridgingProvider second. Types comment that provider order is load-bearing because CCTPv2's supportsRoute is a strict token === 'USDC' check.

```
import { BridgeKit } from '@circle-fin/bridge-kit'
import { createViemAdapterFromPrivateKey } from '@circle-fin/adapter-viem-v2'

const kit = new BridgeKit()
const adapter = createViemAdapterFromPrivateKey({
  privateKey: process.env.PRIVATE_KEY as `0x${string}`,
})

const result = await kit.bridge({
  from: { adapter, chain: 'Ethereum' },
  to: { adapter, chain: 'Base' },
  amount: '10.50',
})
```

That one-liner is the same pattern in the [QUICKSTART.md](https://cdn.jsdelivr.net/npm/@circle-fin/bridge-kit@1.15.2/QUICKSTART.md) and README. Core methods on the kit, per types and README API reference:

- kit.bridge(params): run the transfer
- kit.estimate(params): fees and gas before you sign
- kit.retry(result, context): resume actionable failures
- kit.getSupportedChains(options?): filter by chain type, testnet, forwarder support
- Provider-level supportsRoute(source, destination, token, useForwarder?)

BridgeConfig.transferSpeed is an optional TransferSpeed enum with FAST and SLOW. The types mark **@defaultValue TransferSpeed.FAST**. In Circle's product language, FAST maps to Fast Transfer and SLOW maps to Standard Transfer. Circle's [CCTP overview](https://developers.circle.com/cctp) cites Fast Transfer at about 8–20 seconds and Standard Transfer at 15–19 minutes on Ethereum and L2s. For product trade-offs, use Stablecoin Insider's [CCTP Fast vs Standard guide](https://stablecoininsider.org/how-to-choose-cctp-fast-vs-standard-transfer/).

```
// Cost before you burn
const estimate = await kit.estimate({
  from: { adapter, chain: 'Ethereum' },
  to: { adapter, chain: 'Base' },
  amount: '10.50',
})

// Explicit speed (default is already FAST)
await kit.bridge({
  from: { adapter, chain: 'Ethereum' },
  to: { adapter, chain: 'Base' },
  amount: '100.0',
  config: { transferSpeed: 'SLOW' }, // Standard / lower protocol fee
})

// Forwarder: Orbit relayer attests + mints
await kit.bridge({
  from: { adapter, chain: 'Ethereum' },
  to: {
    recipientAddress: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e',
    chain: 'Base',
    useForwarder: true,
  },
  amount: '100.50',
})
```

With useForwarder: true and no destination adapter, mint confirmation comes from the Iris API response rather than an on-chain receipt you submit yourself. The README says the relay fee is folded into maxFee when the kit computes fees, and that if you set config.maxFee yourself you must include forwarder fees. That is one of the sharp edges called out later.

## Bridge Kit one-liner vs manual CCTP

Manual CCTP on EVM is still three explicit steps: approve and depositForBurn (with maxFee and minFinalityThreshold), poll Iris for the attestation, then receiveMessage on the destination MessageTransmitter. Bridge Kit collapses that into provider + adapter orchestration. Circle's fees docs even show the raw depositForBurn signature with a sample maxFee of 500n subunits.

| Attribute           | Circle Bridge Kit (kit.bridge)                      | Manual CCTP V2                                |
| ------------------- | --------------------------------------------------- | --------------------------------------------- |
| Integration surface | One SDK call after adapter setup                    | Approve, burn, attest, mint as separate steps |
| Default protocol    | CCTPV2BridgingProvider first in getDefaultProviders | You wire TokenMessengerV2 yourself            |
| Speed control       | config.transferSpeed FAST (default) or SLOW         | maxFee + minFinalityThreshold on burn         |
| Pre-flight cost     | kit.estimate returns fees / gas / maxFee            | Call Iris fee API + estimate gas yourself     |
| Destination mint    | Adapter mint, or useForwarder: true                 | Your bot submits receiveMessage               |
| Route check         | supportsRoute / getSupportedChains                  | Circle supported-chain docs + your allowlist  |
| Circle's stated fit | Frontend / user-facing apps                         | Backend transfers needing full control        |

Source: [Bridge Kit 1.15.2 README](https://cdn.jsdelivr.net/npm/@circle-fin/bridge-kit@1.15.2/README.md), index.d.mts in the npm tarball, [CCTP overview](https://developers.circle.com/cctp), and [CCTP fees](https://developers.circle.com/cctp/concepts/fees) (includes the depositForBurn example).

## How to transfer USDC with Circle Bridge Kit (step by step)

### Step 1: Install kit + adapter

Install the kit and the adapter that matches your stack. Viem is the path used below; ethers v6 and Solana adapters also exist on npm per the README.

```
npm install @circle-fin/bridge-kit @circle-fin/adapter-viem-v2 viem
# Node.js >= 20 required (package engines field)
```

### Step 2: Build an adapter (dev key vs browser wallet)

For scripts and servers, createViemAdapterFromPrivateKey is the shortest path. For browser apps, createViemAdapterFromProvider({ provider: window.ethereum }) keeps the key in the user's wallet. Production setups should pass custom getPublicClient RPCs with fallbacks; the README's "Production Setup" section shows Alchemy-style URLs mapped by chain ID.

⚠️

Warning: createViemAdapterFromPrivateKey takes a raw private key in process memory. That is fine for throwaway testnet keys. It is a bad fit for a treasury hot wallet. Prefer a browser provider, a policy signer, or a destination-only forwarder flow when you do not control the destination key.

### Step 3: Estimate, then bridge

Always call kit.estimate in a UI before kit.bridge. Show gas on both sides and the protocol fee. Set transferSpeed: 'SLOW' when the recipient can wait \~15–19 minutes and you want the 0 bps Standard fee path described in Circle's fee tables.

```
const params = {
  from: { adapter, chain: 'Ethereum' },
  to: { adapter, chain: 'Base' },
  amount: '250.00',
  config: { transferSpeed: 'FAST' },
} as const

const quote = await kit.estimate(params)
// render quote.fees / quote.gasFees / quote.maxFee to the user
const result = await kit.bridge(params)
if (result.state !== 'success') {
  // inspect result.steps; kit.retry may resume actionable failures
}
```

### Step 4: Choose forwarder when you lack a destination signer

Custodial payouts and "send USDC to this Base address" flows fit forwarder mode. Pass recipientAddress, set useForwarder: true, and omit the destination adapter. Discover forwarder-capable chains with kit.getSupportedChains({ forwarderSupported: true }).

### Step 5: Optional custom developer fee

Bridge Kit can charge an app fee on top of the transfer amount. Per the [Bridge Kit README custom-fees section](https://cdn.jsdelivr.net/npm/@circle-fin/bridge-kit@1.15.2/README.md), the wallet signs amount + customFee; 10% of the custom fee goes to Circle and 90% to your recipientAddress; CCTP then takes its own protocol fee from the transfer amount on FAST routes. Example in that README: 1,000 USDC + 10 USDC custom fee, with a 1 bps FAST protocol fee leaving 999.9 USDC minted after the protocol cut.

If you need the recipient to receive the exact requested amount, the README documents config.feePayment: 'source' with useForwarder: true, which pays fees on the source chain via a short-lived Fee Service quote. Treat that quote as opaque and never log it.

## Fees: FAST vs SLOW, and what maxFee actually does

Circle's [CCTP fees page](https://developers.circle.com/cctp/concepts/fees) states that CCTP charges fees on Fast Transfers only, and that Standard Transfers are free on the published fee tables. Fast fees vary by source chain; the same page lists examples such as Ethereum at 1 bps, Base at 1.3 bps, and Linea at 13 bps, inside a documented 0–13 bps range depending on source. Fees can change; Circle tells integrators to call the Iris fee API at least weekly and never hardcode.

On the burn, maxFee is the ceiling you will pay. If the live fee exceeds maxFee, the source transaction reverts and nothing burns. Bridge Kit's estimate path is meant to set that ceiling for you. If you override config.maxFee while using the forwarder, the README says you must include relay fees yourself or the mint can fail short.

Stablecoin Insider's take on product choice: default FAST is correct for checkout UIs. Treasury rebalances that can wait should prefer SLOW / Standard and keep the basis points. The deeper decision tree is in the [Fast vs Standard post](https://stablecoininsider.org/how-to-choose-cctp-fast-vs-standard-transfer/).

## Named downsides (do not skip these)

- **Private key in the adapter.** The easiest quickstart puts PRIVATE\_KEY in env and into createViemAdapterFromPrivateKey. Any log leak drains the wallet. Browser createViemAdapterFromProvider or a policy signer is the grown-up path.
- **Default RPC trust.** Zero-config RPCs exist so demos work. The README itself pushes paid providers with fallback() transports for production. Bridging touches two chains; a flaky destination RPC looks like a stuck mint.
- **maxFee + forwarder fee footgun.** Auto-inclusion applies when the kit computes fees. Manual maxFee does not. Under-budget maxFee reverts or leaves a forwarder mint unpaid.
- **CCTP route surface only.** README markets 52 chains / 1,300 routes. That is still only Circle-supported CCTP pairs, not "any token to any chain." For arbitrary token routes you want an aggregator such as [LI.FI](https://stablecoininsider.org/lifi-cross-chain-aggregator-2026/), not Bridge Kit alone.
- **Custom fee economics.** Charging users a developer fee silently sends 10% of that fee to Circle. Disclose it in your UI, or users will notice on-chain.
- **Node 20+ and TypeScript surface area.** Engines require Node >= 20\. The type file is huge; pin versions and read changelogs before upgrades (1.15.2 published 30 September 2026 per npm time metadata).

## When Stablecoin Insider would still write manual CCTP

Keep Bridge Kit for wallets, dashboards, and any UI where a user signs once and expects USDC to arrive. Drop to raw CCTP when you need:

- A custom burn wrapper that enforces your own policy before depositForBurn
- Batch burns with your own attestation worker and retry queue
- Chains or tokens Bridge Kit's providers do not advertise yet
- Exact gas accounting inside a larger on-chain workflow

Circle's own agent instructions on the CCTP docs say the same thing in one line: Bridge Kit for frontend bridging, CCTP directly for backend transfers.

💡

Stablecoin Insider's take: Circle Bridge Kit is the right default for product engineers shipping a USDC cross-chain button in 2026\. It does not replace bridge aggregators, and it does not remove custody risk. Treat kit.bridge as a CCTP remote control, not as a trust boundary. Estimate first, prefer SLOW for non-urgent size, use forwarder only when you understand the relay fee inside maxFee, and never put a treasury key in createViemAdapterFromPrivateKey.

---

If your stack already routes through aggregators for mixed assets, keep Bridge Kit for the native-USDC legs and compare total cost against the options in [best crypto cross-chain bridges](https://stablecoininsider.org/best-crypto-cross-chain-bridges-in-2026/) and [best cross-chain aggregators](https://stablecoininsider.org/best-cross-chain-aggregators-for-2026/).

[Open @circle-fin/bridge-kit README (jsDelivr)](https://cdn.jsdelivr.net/npm/@circle-fin/bridge-kit@1.15.2/README.md)

Choosing Fast vs Standard before you set transferSpeed? Start with Stablecoin Insider's CCTP decision guide.

[How to Choose CCTP Fast vs Standard Transfer ](https://stablecoininsider.org/how-to-choose-cctp-fast-vs-standard-transfer/) 

[LI.FI Cross-Chain Aggregator: Full Review and Guide for 2026Full review of LI.FI for cross-chain stablecoin routing when CCTP-only Bridge Kit routes are not enough.![](https://stablecoininsider.org/favicon.ico)Stablecoin Insider](https://stablecoininsider.org/lifi-cross-chain-aggregator-2026/)

## FAQ

#### What is Circle Bridge Kit?

It is Circle's official TypeScript SDK (@circle-fin/bridge-kit) that wraps CCTP so apps can transfer USDC across supported chains with kit.bridge instead of hand-rolling burn, attestation, and mint.

#### What version should I install in October 2026?

npm latest was 1.15.2 when Stablecoin Insider checked on 10 October 2026, with Node.js >= 20.0.0 required. Pin the version in package.json and re-read the changelog before upgrading.

#### Does Bridge Kit use CCTP Fast Transfer by default?

Yes. BridgeConfig.transferSpeed defaults to TransferSpeed.FAST in the published types. Pass SLOW for Standard Transfer behavior and the 0 bps fee path on Circle's Standard fee tables.

#### How is Bridge Kit different from LI.FI or other aggregators?

Bridge Kit moves native USDC via CCTP burn-and-mint on Circle-supported routes. Aggregators quote across many bridges and tokens. Use Bridge Kit for USDC CCTP legs; use an aggregator when the route or asset is outside that set.

#### What does useForwarder do?

It enables Circle's Orbit relayer to fetch the attestation and submit the destination mint. You can omit a destination adapter if you supply recipientAddress and useForwarder: true.

#### Is it safe to pass a private key to the Viem adapter?

Only for disposable test keys. The factory createViemAdapterFromPrivateKey holds the key in process. Prefer a browser wallet provider or a policy-controlled signer for real funds.

#### Where do Fast Transfer fees come from?

Circle's CCTP fees docs: Fast Transfers charge a source-chain fee (examples span roughly 0–13 bps), deducted at mint unless you pay upfront. Standard Transfers are listed at 0 bps on the fee tables. Always fetch live fees from Iris.

#### When should I skip Bridge Kit and call CCTP manually?

When you need a custom burn wrapper, your own attestation worker, unsupported routes, or gas accounting inside a larger contract flow. Circle documents Bridge Kit for frontend bridging and raw CCTP for backend control.

---

This content is provided for informational and educational purposes only and does not constitute financial, investment, legal, or tax advice; no material herein should be interpreted as a recommendation, endorsement, or solicitation to buy or sell.