Skip to main content

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 itself999 (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 devcalm_public_(live|sandbox)_….