# 0.29.0 (/docs/changelog/0-29-0)



<Callout type="info" title="No native changes">
  Every change here is JavaScript. No native module was added or altered, so
  apps pick this up with a build at `0.29.0` — no
  [store release](/docs/ship/app-releases) is required for the platform itself.
</Callout>

## Breaking [#breaking]

None. No public export was removed, and the one interface whose shape moved — the cart provider's error result — only gained fields.

## New [#new]

**Instant code store flag** — `StoreFeatureFlags.ENABLE_INSTANT_CODE` gates instant code per store, so a brand can be switched onto host-loaded blocks without a build. Remote blocks are now called instant code throughout the tooling and its docs; this release only renames the prose and the build-tools help text, no API changed.

## Fixed [#fixed]

* **Carts no longer dead-end on a stale customer token.** Signing in on the website invalidates the Storefront token the app is holding, and `cartCreate` then fails with "Customer is invalid" — a Storefront token has no refresh flow, so every add-to-cart kept failing until the shopper reinstalled or logged out. The cart now detects that specific `customerAccessToken` user error, re-validates the session (which clears it), and retries the create as a guest. Both `ShopifyCartProvider` and `ShopifyCustomerCartProvider` also surface `cartCreate` user errors as a real error result — code `SHOPIFY_API_ERROR`, with the raw `userErrors` attached — instead of returning an empty success.

* **External links open the browser on Android.** `https` links marked external are routed through the `googlechrome://navigate` scheme, with a fall back to the plain URL when Chrome is absent, so an installed app can no longer intercept them and swallow the tap. `tel:`, `mailto:` and `sms:` are deliberately left alone.

* **The wishlist toast fires on tap.** Add and remove now show their confirmation immediately rather than waiting on the network round trip, and a failed write replaces it with the error toast. Tapping either still routes to the wishlist screen.

* **Subscription modify-form price preview.** The preview now scales the line's real unit price by the ratio between the current and the selected variant, instead of reading a selling-plan price adjustment that often did not match the plan being chosen, and renders through `PriceText` so currency formatting matches the rest of the app. An out-of-stock variant shows a banner and hides the preview rather than quoting a price for something that cannot be bought.

## Upgrading [#upgrading]

Move every `@gauntlet/*` entry to `0.29.0` together with the Appbrew-published `@app-brew/*` packages, which version with the platform, then rebuild. No `pod install` or Gradle change is needed for this release. Full workflow: [Upgrading @gauntlet packages](/docs/ship/upgrading).
