Catalyst version 1.14.0 release notes
Catalyst 1.14.0 is a minor release. It shows the products a pick list option adds to the cart, sends OpenTelemetry spans to Cloudflare Workers tracing when the storefront runs on Workers, and upgrades Next.js to 16.4.3. It also fixes analytics initialization, the Category facet, and session redirects in server actions. For a full list of Catalyst changes, see the changeset on GitHub.
Pick list items in the cart
The cart used to hide the products that a pick list option adds alongside the product a shopper selected. They now show under their parent line item:
- Each item is labeled with its pick list option’s label, and shows its own selected options.
- Its quantity shows only when it differs from the parent’s.
- It has no price of its own, because the parent’s price already includes it.
OpenTelemetry on Cloudflare Workers
@vercel/otel fails to load on Cloudflare Workers, so storefronts on Workers, including Storefront Hosting, had no spans. instrumentation.ts now checks for the Workers runtime and, when it finds it, registers a bridge in core/lib/otel/cloudflare.ts that hands spans from Next.js and ~/lib/otel/tracer to the runtime’s native tracing. Spans show up in Workers traces and in any OTLP destination the Worker exports to. There is no SDK or exporter to configure. For details, see Cloudflare’s custom spans guide.
Other runtimes keep using @vercel/otel, which is now imported lazily so it never loads on Workers.
Next.js 16.4.3
Catalyst now uses Next.js 16.4.3. It is required by @opennextjs/cloudflare 1.20.15, which Storefront Hosting uses to deploy proxy.ts directly, and it moves off the versions affected by the next/og vulnerability (CVE-2026-94545).
Fixes
- Analytics initialization: events like
productViewedfire from child effects that run beforeAnalyticsProvidercalledinitialize(), so the Google Analytics provider calledgtagbefore it was defined. Providers now initialize before the first event. - Category facet: on brand and search pages, selecting a parent category in the Category facet returned no products when they were assigned only to its sub-categories, even though the facet’s counts included them. The filter now includes sub-categories.
- Session redirects in server actions: when a session is invalidated, the GraphQL client redirects to sign out. Server actions such as add to cart caught that redirect and showed it as a form error. They now rethrow Next.js redirects from their
catchblocks. - Product list layout: product list pages hide the desktop filters column when there are no filters, so products use the full width.
- Cart quantity column: the column keeps a fixed width, so long backorder and inventory messages wrap instead of stretching it.
Other changes
verify-catalystagent skill:core/.agents/skills/verify-catalystdrives the storefront in a real browser to prove UI changes, and attaches screenshot, video, and trace evidence to pull requests. It works in the monorepo and in projects created withcreate catalyst, on macOS, Linux, and Windows.- Translations: updated.
Migration
No environment variables were added, renamed, or removed.
- Translations: if you maintain your own translations, add the
Cart.includedItemsmessage. - Instrumentation: if you customized
instrumentation.ts, keep yourregisterOTel()call behind the new Workers check, and import@vercel/otellazily so it never loads on Workers.
If you customized any of these files, review the changes when you upgrade. The changeset on GitHub has the code for each one.
- Cart:
core/app/[locale]/(default)/cart/page.tsxandcore/app/[locale]/(default)/cart/page-data.tsfetchaddedByAttributeIdon cart line items and nest pick list items under their parent.core/vibes/soul/sections/cart/client.tsxadds an optionalincludedItemsarray toCartLineItemand an optionalincludedItemsLabelprop to theCartsection, and sets a fixed width on the quantity column. - Instrumentation:
core/instrumentation.tsuses the newcore/lib/otel/cloudflare.tson Workers. - Analytics:
core/lib/analytics/index.tsinitializes providers before the first event. - Faceted search:
core/app/[locale]/(default)/(faceted)/fetch-faceted-search.tsincludes sub-categories in the Category filter. - Server actions: the
_actionsfiles undercore/app/[locale]/(default),core/components/header, andcore/components/subscribecallunstable_rethrowfromnext/navigationin theircatchblocks. - Product list:
core/vibes/soul/sections/products-list-section/index.tsxhides the filters column when there are no filters.
Release tags
- @bigcommerce/catalyst-core@1.14.0
- @bigcommerce/catalyst-makeswift@1.14.0
- @bigcommerce/catalyst-b2b-makeswift@1.14.0
Latest stable: