# 0.32.0 (/docs/changelog/0-32-0)



<Callout type="warn" title="Native changes, for two integrations only">
  Everything platform-wide in this release is JavaScript. Two integrations
  moved native code, and only apps that carry them need a
  [store release](/docs/ship/app-releases) for the platform change:

  * `@gauntlet/clarity` bumps `@microsoft/react-native-clarity` from 4.3.3 to
    4.7.0 for iOS 26.
  * `@gauntlet/app-update` now reads the in-app update state through
    `@app-brew/app-update`, the native module, instead of a raw `NativeModules`
    lookup. Apps using in-app updates need `@app-brew/app-update` installed;
    `sync-deps` adds it in the monorepo, standalone apps add it by hand.
</Callout>

## Breaking [#breaking]

None. No exported signature changed shape in this release.

## New [#new]

**`@gauntlet/bogos` — BOGOS bundles, published for the first time.** Volume
offers, fixed bundles and mix-and-match offers from the BOGOS app, rendered on
the product page and applied to the cart the way the web widget does:
per-item and fixed-price tiers, exclusion groups, market amounts converted to
the cart currency, and out-of-stock rows marked rather than hidden. Product
fetches retry on failure and a code sync never writes a stale cart. Register
with `registerBogosBlocks` and configure under the `bogos` key.

**`@gauntlet/videowise` — Videowise live shopping, published for the first
time.** A live-shopping channel block plus the analytics events Videowise
expects, so a live stream on the store site can be watched and shopped from
the app. Register with `registerVideowiseBlocks` and configure under the
`videowise` key.

**Loyalty Lion rewards earned in the app.** `@gauntlet/loyalty-lion` can now
award points for enabling push, following social accounts and referrals, not
only for purchases.

**Floating blocks: image banner, video banner and a goto button.** Three new
floating blocks join the registry, and floating blocks can now be restricted
to a platform, so a banner can show on Android only or iOS only.

**Cart list v2: discount chips.** Discount codes on the cart render as chips
with configurable options, and every part of the row is overridable through
the block's `style` map.

**Star ratings: configurable reviews redirect.** Tapping the rating can open a
configured reviews destination, and the review-count text takes its own
styling.

**Goto button v2: dynamic product parameters.** A goto link's `params` are
filled from the product the button sits on, so one configured button works
across products.

**Flits: grey out redeem when another discount is applied.** An option keeps
the points redeem checkbox disabled while a different discount is on the cart.

**Subscriptions: custom web view for managing payment methods.** The manage
payment action can open a configured web view instead of the default page.

**AppsFlyer custom domains.** `customDomains` on the AppsFlyer config lets
OneLink domains other than the default resolve, with clearer debug logging
during setup.

**Cart attribution.** Every cart created by the app now carries two note
attributes, `appbrew-platform` and `appbrew-firebase-instance-id`, so a
server-side order can be attributed back to the app session. Brewmeter events
carry the customer on every event as well.

**SearchTap variants expose inventory.** Transformed variants now include the
inventory fields, so blocks can show availability from search results.

**Unit price on variants.** `IProductVariant` gains `unitPrice` and
`unitPriceMeasurement`, filled from Shopify, so a product card can show a
price per unit next to the price.

## Fixed [#fixed]

* **Addresses.** `changeAddress` falls back to the given address when the id
  is not in the list, a default address is preselected only when the customer
  has one, and deleting the selected address clears the stale selection.
* **Load more keeps the page size.** Paging through a collection no longer
  grows the page.
* **Analytics.** A rejecting tracker no longer takes the others down, the app
  user sync fetch is caught, and purchase events are sent even when the main
  cart is empty at the time of purchase.
* **Firebase push.** A token debug log that could raise an unhandled rejection
  is gone.
* **Attentive.** No crash on a purchase without an order id, and line items
  are sent with the purchase.
* **Payment web view.** Razorpay UPI intents open correctly on Android.
* **Carousel.** Android paging stays off rendered children.
* **Splash.** The splash screen hides at the right moment.
* **Netcore.** Tracker identity is set correctly on login.
* **GoKwik.** UTM parameters are awaited before `merchantParams` reach the
  checkout.
* **Unbxd search.** Provider requests go through enhanced fetch.
* **Search blocks.** Blocks hide instead of unmounting while a search is
  active, keeping their state.
* **CleverTap with Fastrr.** An email change no longer duplicates the
  CleverTap profile, and login events land on the right one.

## Tooling [#tooling]

**`@app-brew/build-tools` resolves a linked library's peers from the app.**
Source that lives outside the app's `node_modules`, which is the case when a
library is linked in from another checkout, now resolves React, react-native
and every other peer from the app first, and the Module Federation shares for
`react` and `react-native` are pinned to the app's copies. Before this, a
linked library brought its own React along and the app failed on the first
hook call. This is what the `gh brew link` workflow relies on; the monorepo
build is unchanged.

Upgrading? The workflow is at [Upgrading @gauntlet packages](/docs/ship/upgrading).
