v0.8.0 — 2026-07-14
Polishes the Cash App onramp: a branded pay button, a visible quote and
back navigation on the pay step, and a $3 minimum.
Pay step
- The QR step’s button is now labeled Pay with Cash App and uses
Cash App’s own brand color, distinguishing it from the SDK’s other
onramp actions.
- A You Receive row now appears under the QR code, showing the
amount from the order that was just created.
- The back chevron is now visible on the pay step, returning to the
amount step instead of being hidden.
- Once payment is opened, the button itself shows the order’s status
(e.g. “Confirming payment”, “Bridging”) and disables — replacing the
separate status badge.
$3 minimum
Cash App deposits now require at least $3. Amounts below that show an
inline error before submitting instead of failing after a round trip.
v0.7.0 — 2026-07-06
Requires a connected wallet, and fails fast with clear errors when the
provider is set up wrong.
Requires a connected wallet
Breaking: the Calm provider now requires a connected wallet. Mounted
without one it throws instead of rendering in a broken half-state — mount
it only once a wallet is connected, or gate it on your app’s connection
state. Previously it mounted and only failed later, on the first onramp
action.
Clearer setup errors
A missing required provider now throws an actionable error at mount
instead of a late or cryptic failure:
- No
<QueryClientProvider> above the Calm provider → a message telling
you to add one.
<WagmiCalmProvider> outside a wagmi provider → a message telling you
to wrap it in <WagmiProvider> (or Reown AppKit / RainbowKit).
v0.6.0 — 2026-06-25
Adds a Connect exchange onramp, a flows prop for curating the
deposit picker, and a required rpcUrls prop on the Privy and
Dynamic providers.
Connect exchange
The user connects a Coinbase account, picks an origin chain (Ethereum,
Base, or Arbitrum) and an amount, and withdraws USDC into their Calm
wallet.
Choosing flows
<CalmOnramp flows={[...]}> takes an ordered list of the methods to
show — swap, deposit_crypto, bank, cashapp, exchange, and
card. Omit it for the default set: Swap, Crypto deposit, and Bank
transfer. The Cash App, exchange, and card rows are opt-in.
Cash App and the exchange onramp are available but not yet recommended
for production.
Per-chain RPC URLs
<PrivyCalmProvider> and <DynamicCalmProvider> now take a required
rpcUrls prop — a map of chain id to RPC URL — used to read swap
transaction receipts from a reliable per-chain endpoint (reading through
the wallet’s own endpoint could stall the confirm step). Breaking:
add rpcUrls when you upgrade.
v0.5.2 — 2026-06-25
Re-enables the Swap to USDC onramp. Fixes a transaction-encoding
issue that caused swaps to fail in some wallets before the first
confirmation.
v0.5.1 — 2026-06-25
Temporarily removes the Swap to USDC row from the deposit picker
while an issue with the swap flow is addressed. The other onramps —
Crypto deposit, Cash App, and Bank transfer — are unchanged.
v0.5.0 — 2026-06-24
Adds a Cash App onramp and a third auth modality (Dynamic), and drops
the separate Hyperliquid mode concept — the execution layer is now
just the destination chain id.
Cash App onramp
A new fiat onramp: the user enters an amount, pays in Cash App, and
USDC lands in their Calm wallet. USD only. It appears as its own
row in the deposit picker (shown when currency === "usd"), alongside
Swap, Crypto deposit, and Bank transfer.
Dynamic provider
<DynamicCalmProvider> (@calm-xyz/react/dynamic) — for apps
authenticated with Dynamic. Joins the existing
<PrivyCalmProvider> and <WagmiCalmProvider>. Bind the key to your
public Dynamic environment id when you generate it in the dashboard.
Hyperliquid: mode is gone
The Hyperliquid execution layer is now the chain id itself — 999
(HyperEVM) vs 1337 (HyperCore) — so the separate mode concept is
removed across the API and SDK:
- Removed: the
Mode type, useCalm().mode / setMode, the
providers’ initialMode prop, and the mode field on the wallet
record and swap quote.
- To deliver to HyperCore, set the destination chain to
1337; for
HyperEVM, 999.
Providers + useCalm()
- The destination-chain prop is now
chain (was initialChain),
defaulting to 1337 (HyperCore). useCalm() exposes chain +
setChain.
useCalm() is configuration only now — address, apiUrl,
chain, setChain, currency. The session/transaction callbacks
and logout it used to surface are gone; drive sessions through
useSession and clear them with
useSession({ address }).clear().
useReady() is removed. Gate UI on the session being live
instead — const ready = !!session.data && !session.isError, where
session = useSession({ address }).
Publishable key
The sandbox environment prefix is sandbox, not dev —
calm_public_(live|sandbox)_….