0.34.0
Keyboard handling measured on every screen, Shopify APIs pinned to 2026-07, a launch crash on encoded deep links fixed, free-gift lines that no longer duplicate, Fare Freight shipping rates, LiveMeUp live shopping, and dependency sync for apps in their own repo.
Native changes: every app needs a store release
@gauntlet/brewerynow declaresreact-native-keyboard-controller, a native module, as a peer dependency at 1.22.5. Add it to the app'spackage.json(pnpm exec appbrew-sync-depsdoes this), runpod install, and ship a store release. A JS-only update onto an older binary will not find the module. Pin 1.22.5 exactly: 1.21.x throws when a screen unmounts.@app-brew/app-updatechanges on iOS: the in-app update store sheet now closes when Done is tapped.
Breaking
@gauntlet/shopify and @gauntlet/shopify-types drop the Checkout API.
Shopify no longer serves the Checkout API at any version, so its surface is
gone: ShopifyCheckoutProvider and migrateCart from @gauntlet/shopify,
and the Checkout* and CreateCheckout documents and their mutation types
from @gauntlet/shopify-types. Apps already run on the Cart API through
ShopifyCartProvider, which is unchanged. Remove any remaining import of the
deleted names before upgrading.
screenHeight moved out of the device dimensions. The store keeps it at
device.screenHeight, no longer at device.dimensions.screenHeight, so
useDeviceDimensions() no longer returns it. Code that read it from the
dimensions object should select device.screenHeight from the store.
Shopify API version is now 2026-07. Every Storefront and Customer Account request is pinned to 2026-07 from one module. Before this, requests asked for 2024-04 or 2025-01 and Shopify silently answered with the oldest supported version. Custom queries written against older schemas should be checked against 2026-07.
New
Keyboard handling measured on every screen. Whether a focused field is clear of the keyboard is now measured at runtime, on every screen, instead of decided by hard-coded screen-name lists, which are gone.
- Every screen's list scrolls the focused field clear of the keyboard, measured to the whole input box rather than the caret line.
- A footer, such as a search bar pinned above the bottom bar, lifts with the keyboard based on where its input actually is.
- On Android, a bottom sheet lifts a focused field clear of the keyboard, so the variant sheet no longer hides quantity and Add to cart.
- The footer gap is configurable: the screen's
layout.footer.options.keyboardGap, thensettings.global.footerKeyboardGap, then 24. settings.global.disableKeyboardHandlingturns all of it off for an app.
@gauntlet/fare-freight — live carrier shipping rates in the cart. For
stores that quote shipping through a Fare Freight carrier service, a shipping
calculator block shows the rate checkout will charge, which the Storefront
Cart API does not return.
@gauntlet/livemeup — live shopping, published for the first time. A
mini player block and a full-screen player for LiveMeUp live streams.
GoKwik sends the KwikPass SDK version in checkout and web view payloads.
Fixed
- Keyboard. A keyboard that grows while open, for an emoji panel or the autofill bar, no longer hides the field. Closing the keyboard no longer jumps the list back to a stale offset. iOS address forms no longer hide the pin code, and OTP and phone fields no longer sit flush against the keyboard.
- Onboarding crash.
ScreenBreweryno longer throws when rendered outside a navigator, which crashed the default onboarding. - Launch crash on deep links with an encoded
%. Preview parameters are now parsed only on preview links, so a campaign link with a malformed encoding no longer throwsURIErrorat launch. - Free-gift lines no longer duplicate. Concurrent gift evaluations could each add the same gift, and Shopify merged them into one line with several units. A gift add in flight now blocks a second one.
- Cart events skip items whose product has not loaded yet.
- Sign in. Sign-in v3 handles a non-object sign-in result, and Shopflo asks for an email when OTP verification returns none.
- Null guards for a missing customer in
getOrdersand Flits, an undefined SearchTap collection result, a swallowed review fetch error and a failed Nector redeem before the coupon modal opens. - Collection metafields are not queried when no keys are requested.
- Attentive stops re-prompting subscribed users on every launch.
- WebEngage push notifications no longer trigger a refresh on Android.
- Afterpay block renders and reads its settings from config.
- Unbxd search builds variants from
variantDetail.
Performance
A keyboard toggle no longer re-renders every useDeviceDimensions()
consumer, since screenHeight left the dimensions object, and deviceType
is selected on its own rather than through the whole device object.
Tooling
@app-brew/build-tools ships appbrew-sync-deps. The dependency sync
the monorepo runs before every build now works in an app's own repo. Run
pnpm exec appbrew-sync-deps after installing: it walks the app's imports
through the installed @gauntlet/* and @app-brew/* packages, adds what is
missing to package.json at the versions those packages declare, prunes what
nothing reaches, and reinstalls. Pass --dry-run to preview or --no-prune
to only add. It refuses to prune when an imported first-party package is not
installed, since the graph is incomplete.
Run from inside a local integration under packages/, it syncs the app rather
than the integration, and it resolves packages whose exports map has
conditions but no "." key.
Upgrading? The workflow is at Upgrading @gauntlet packages.
0.35.0
A new bottom bar engine with the iOS 26 Liquid Glass bar, view_item sent for every way of reaching a product, deep links that survive an unparseable screen path, Meta ads that open at their destination, B2B wholesale prices, and remote components that fail on their own.
0.33.0
Every app can load instant code: the remote-bundle loader defaults its host and brewery exports a prewarm hook. Nector loyalty tiers render before sign-in, with the program's own coin expiry unit.

