Catalyst version 1.9.0 release notes
Catalyst v1.9.0 is now available. This release adds product videos and promotion callouts to product pages, honors store owner-configured sort settings, and fixes several cart and navigation issues. For a full list of Catalyst changes, see the changeset on GitHub.
Product videos on the PDP
Catalyst now displays product videos (YouTube) on the product detail page (PDP), in a dedicated section below the primary product content, mirroring the Stencil/Cornerstone layout.
The Storefront GraphQL API exposes product videos as a { title, url } pair (Product.videos). Catalyst fetches them and renders a featured player with a thumbnail strip — clicking a thumbnail swaps the featured video — using lite-youtube-embed, a lightweight facade that loads the YouTube player only when a shopper clicks.

Migration
Additive — no breaking changes; existing PDP markup, the image gallery, and image pagination are unchanged. Forks adopting this manually need to:
- add the
lite-youtube-embeddependency - request
videos(first: 25) { edges { node { title url } } }on the PDP product query (product/[slug]/page-data.ts) - stream those videos and render the new
ProductVideossection belowProductDetail(product/[slug]/page.tsx) - allow
i.ytimg.com/vi/**innext.config.tsimages.remotePatternsfor poster thumbnails
Promotion callouts
Catalyst now wires live promotion data from the Storefront GraphQL API (featuredPromotions on the Product type) into callouts on the PDP and PLP.
- PDP — stacked callout boxes render inline below the price, one per active promotion
- PLP (category, brand, search) — each product card shows its first promotion inline below the price; if there are multiple, a “+N more” label appears within the same callout
Sort settings from the control panel
Catalyst now respects the store’s default product search sort and product category sort settings configured in the control panel, instead of always falling back to a hardcoded default.
Cart reliability improvements
Catalyst coalesces rapid cart line item quantity and delete clicks into at most one in-flight server action, fixing a class of bugs where fast clicking could lock up the cart.
- Quantity buttons now update an optimistic pending intent that flushes a single absolute-quantity update after a short debounce (replacing the previous per-click increment/decrement intents), and deletes are serialized instead of queuing unboundedly.
- The cart section is now keyed by cart ID only (previously cart ID and version) and renders line items from the revalidation-refreshed cart data, so mutations no longer remount the section and swallow clicks that land during the DOM swap.
- Each quantity/delete control is its own progressive-enhancement form — JavaScript intercepts the submit to route through the coalescing dispatcher, but the controls keep working as full page round-trips before hydration or if the app bundle fails to load.
- The checkout button no longer gets stuck spinning forever if its navigation is cancelled (Esc, “Stay” on the leave-page prompt, a flaky connection); it now settles after a short timeout and on bfcache restore, re-enabling the button as a retry.
Catalyst also keeps the cart’s locale in sync when a shopper switches their storefront locale, calling the new updateCartLocale Storefront GraphQL mutation to update the active cart in place before navigating, mirroring the existing currency-switch behavior. This mutation is currently gated behind a store-side feature flag; until it’s enabled, updateCartLocale returns null and the switch is a no-op.
Storefront fixes and improvements
- Account Settings — fixed Account Settings failing to save for customers when a merchant-defined required custom customer field exists. Account Settings now renders and resubmits those fields, mirroring the existing Register/Address form-field support.
- Cache and customer navigation — caching is now disabled for the webpage sidebar navigation and route/raw-page resolution when a customer access token is present, so customer-only navigation links and pages aren’t leaked to (or hidden from) other visitors via a shared cache.
- Blog visibility — the footer’s “Navigate” section now respects the Blog visibility setting (Control Panel > Storefront > Blogs); the Blog link no longer appears when Blog visibility is turned off.
- Translations — static translations have been updated.
Release tags
Latest stable: