AppbrewDevelopers
Changelog

0.37.0

Faster start-up with zod schemas out of the app bundle, 23 unused blocks removed, products and collections that fail to load get a way back, AppsFlyer deep links on the V2 tracker, rectangle hotspots, and a Web SDK signout.

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. Every other change in this release is JavaScript only.

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

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

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

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.

On this page