> ## Documentation Index
> Fetch the complete documentation index at: https://docs.calmtreasury.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Versioned changes to the API and SDK.

## 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.

<Warning>
  Cash App and the exchange onramp are available but not yet recommended
  for production.
</Warning>

### 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.

```tsx theme={null}
<PrivyCalmProvider
  calmKey={...}
  currency="usd"
  rpcUrls={{ 1: "...", 8453: "...", 999: "https://rpc.hyperliquid.xyz/evm" }}
>
```

## 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](https://dynamic.xyz). 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`](/sdk/hooks/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)_…`.
