# 0.28.0 (/docs/changelog/0-28-0)



<Callout type="warn" title="Contains native changes">
  Quick actions ships a **new native module**, and the native web view changed on
  both platforms. Picking up either needs a [store
  release](/docs/ship/app-releases) — a config publish is not enough. Everything
  else here is JavaScript and needs only an app build at 0.28.0.
</Callout>

## Breaking [#breaking]

None. No public export was removed and no interface gained a required method. The one revert in this release — `useBlockStyle` and `useBlockSettings` taking a non-nullable `BlockConfig` again — does not change any call site's type, because `useBlock` throws rather than returning null.

## New [#new]

**Home-screen quick actions** — long-press the app icon for up to four shortcuts. Configured per brand at `store.quickActions` with a title, subtitle, icon, and any `Link` as the target; leave it unset and shoppers get Wishlist, Cart and Account, filtered to the screens the app actually has. There is nothing to build: the hook runs inside brewery's shell, so apps get registration and tap routing for free once the `@app-brew/quick-actions` native module is installed. Icons are per-platform — Android takes an image URL, iOS takes an SF Symbol name — and `mailto:` targets open the in-app compose screen rather than the mail client. See [Quick actions](/docs/build/quick-actions).

**Remote blocks on the web** — the remote-block system gains a web target, an app scaffold and authoring APIs, so a block bundle can be built once and rendered on web as well as native. Deeplink previews now load host-side bundles through lens, which is what makes a shared preview render the real block rather than a placeholder.

**Unified in-app update overlay** — forced and flexible update paths now share one overlay across the six packages that touched them, replacing the split behaviour introduced in 0.27.0.

**Add-to-cart from modal links** — modal-link ATC routes through a single sheet host with a double-open guard, and the sheet takes a `bottomInset`. Fixes the case where two sheets could stack on a fast double tap.

**Nector loyalty revamp** — a reworked loyalty surface, with per-block configurable empty-screen text and styling.

**Smaller additions** — wishlist can show recently added products first; the cart list removes an item when minus is pressed at quantity 1; sort options take a deterministic order via `sortOptionsOrder`; filter buttons gain a separator divider and long-label ellipsizing; Judge.me gains a sort dropdown and a rating-input empty colour; the appbar's scroll-swap accepts style and source overrides; the product hotspot supports multi-slide carousels with a header and dots; orders-v5 can close its cancel window on the earlier of status or duration; GoKwik sends `shopify_order_id` on the purchase payload; Shiprocket EDD gets date reformatting, a delivery icon and checking text; Shopflo adds SSO steps 2–5 for OTP login.

## Fixed [#fixed]

* Order cancel now shows a processing state instead of appearing to do nothing.
* Cart list v2: consistent price modes, template variables and free-gift classification — and quantity-0 lines are no longer labelled as free gifts.
* Coupon codes validate case-insensitively, with an option to force uppercase input.
* Recursive schema markers no longer carry a `$ref` key, which was breaking Milo.
* The payment web view opens native sign-in only for store login URLs.
* Tab buttons are no longer wrapped when the theme has no wrapper style.
* Phone input passes country-picker flag props explicitly, for React 19's `defaultProps` removal.
* Carousel gains an `autoScrollVideos` option, takes its poster from `item.src`, and fixes promo `isInView`.
* Toast height and theming, image-banner touch handling, address-list null safety, profile-greeting name and icon options, and OTP copy on the account screen.
* Nector records actions only for social triggers in ways-to-earn.
* Searchanise builds variant titles from options.
* Yotpo rewards saved birthdays a day early in timezones behind UTC.
* **Native web view**: a scroll issue, plus a pass to bring it in line with the legacy web view on both platforms.
* Link-hotspot block registration was restored after being dropped with the one8-only path.
* MoEngage tracker fixes across state, GoKwik and MoEngage.

## Upgrading [#upgrading]

Bump every `@gauntlet/*` entry to `0.28.0` together with the Appbrew-published `@app-brew/*` packages, which move with the platform, then rebuild. Apps that want quick actions also need `@app-brew/quick-actions` added and a `pod install`. Full workflow: [Upgrading @gauntlet packages](/docs/ship/upgrading).
