# 0.37.0 (/docs/changelog/0-37-0)



<Callout type="warn" title="Native change for GoKwik apps only">
  `@gauntlet/gokwik` moves `react-native-kwikpass` from 0.1.72 to 0.1.80,
  which ships native iOS and Android code. Apps using GoKwik need
  `pod install` and a [store release](/docs/ship/app-releases). Every other
  change in this release is JavaScript only.
</Callout>

## Breaking [#breaking]

**Zod schemas are no longer exported as values from `@gauntlet/types`.**
The package root now re-exports its schema files as types only, so an app
no longer builds every schema at launch just to infer types. Schema values
such as `backgroundOptionsSchema` are at `@gauntlet/types/schemas`. Code
that validates at runtime (Studio, a backend, a custom block form) must
import from there; from the root, the value is `undefined`. Types and the
quick-action and bottom-bar helpers are still exported from the root.

**23 blocks are removed.** No published app config placed any of them:
`a1-accordion-image`, `a1-collection-banner`,
`a1-generic-metafield-accordion`, `a1-image-list`, `a1-product-grid`,
`a1-product-list`, `collection-list`, `collection-list-background`,
`color-image`, `empty-search-suggestions`, `follow-us`, `opinew-reviews`,
`payment-succes`, `pdp-description`, `pdp-description-native`,
`plp-content`, `product-card-v2`, `profile-edit`, `search-bar`,
`search-recommendations`, `shopify-customer-payment-webview`, `size_guide`
and `trending-products`. A config that still names one renders nothing in
its place, and brewery reports the screen and block once per launch as a
Sentry warning. Their components are deleted from `@gauntlet/components`,
except `ProductCardBlockV2`, `ProfileEdit` and `ColorImage`, which other
code still uses. Four subpath exports go with them:
`organisms/a1-collection-image-banner/index.web`,
`organisms/a1-generic-metafield-accordion/index.web`,
`organisms/opinew-reviews/utils` and
`organisms/pdp-description-native/index.web`. `@gauntlet/components` no
longer depends on `react-native-table-component`.

**`AppsflyerTrackerV2` moves to `analytics-v2`.** The file was
`analyticsV2`. Importing from `@gauntlet/appsflyer` is unaffected; a deep
import of the old path breaks.

## New [#new]

**AI chat screen for Purands.** `@gauntlet/purands` registers a
`purands-chat` screen through `registerPurandsScreens(screenRegistry)`. It
opens the chat in a webview and passes the page the shopper came from. The
integration config gains `gatewayOrigin`, `clientId` and `tenant`.

**Rectangle hotspots.** `link-hotspot` markers can be `rectangle` as well as
`circle`, sized by `aspectRatio`, and `outlined` to keep the artwork under
them visible. `revealHotspotsOnPress` briefly shows hidden markers when the
shopper taps elsewhere on the image, and `animateHotspots: false` turns off
the pulse. Marker styles now live under `item.marker`; configs that still
use `item.circle` keep working and render in the new style.

**Web SDK `signout()`.** A web page can call `appbrewSDK.signout()` to sign
the app out, the same as the native sign-out button. Before, a page's own
sign-out ended only the web session, and the app signed the customer
straight back in.

**AppsFlyer deep links on `AppsflyerTrackerV2`.** The V2 tracker now
handles OneLink deep links and first-launch deferred deep links the same
way as the V1 tracker. It also reports app opens from other links for
re-engagement attribution and registers `customDomains` for branded
OneLink domains. Debug logs are on in development builds only.

**GoKwik webview debugging.** Set `integrations.gokwik.webviewDebuggingEnabled`
to inspect the KwikPass checkout webview.

## Fixed [#fixed]

**Products and collections that fail to load show a way back.** A handle
Shopify cannot find used to leave the page on skeletons for ever. The page
now says it couldn't open the product or collection and offers Go back. It
retries once and reports to Sentry if the retry fails. Restyle it with
`theme.catalogUnavailable`.

**Meta collection ads with a pinned product open the collection.** A link
like `/collections/x?pinned=https://shop/products/y` used to route to the
product page with a broken handle.

**A product without variants no longer leaves its collection loading.**
Its price lookup threw after a successful fetch, and the entry stayed
loading with no retry.

**The Shopify customer token is refreshed only after the config loads.**
The check used to run while the config was still loading, before the auth
module had the settings it needs.

**Form inputs keep focus on the first invalid keystroke.** An error style
with a `shadowColor` re-mounted the input on Fabric, closing the keyboard.

**Webhook tracker events carry UTM attribution.** Each event now sends the
session's `utm_*` values in an `attribution` field next to `payload`.

**`run-android`, `run-ios`, `clean-android` and `clean-ios` work in apps in
their own repo.** They started with `zx`, which picked up whatever `zx` was
on the `PATH` and read the script path as the app name. They now run with
`node`.

## Performance [#performance]

**Faster JavaScript start-up.** Taking the zod schemas out of the app
bundle (see Breaking) removes about 500 ms of start-up JavaScript measured
on an Android emulator.
