> This page is for Developer.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bigcommerce.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bigcommerce.com/_mcp/server.

# Catalyst version 1.14.0 release notes

> Catalyst 1.14.0 shows pick list items under their parent cart line item, sends OpenTelemetry spans to Cloudflare Workers tracing on Workers, upgrades Next.js to 16.4.3, and fixes analytics, faceted search, and session redirects in server actions.

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](https://github.com/bigcommerce/catalyst/blob/canary/core/CHANGELOG.md#1140).

## 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](https://developers.cloudflare.com/workers/observability/traces/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 `productViewed` fire from child effects that run before `AnalyticsProvider` called `initialize()`, so the Google Analytics provider called `gtag` before 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 `catch` blocks.
* **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-catalyst` agent skill**: `core/.agents/skills/verify-catalyst` drives 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 with `create 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.includedItems` message.
* **Instrumentation**: if you customized `instrumentation.ts`, keep your `registerOTel()` call behind the new Workers check, and import `@vercel/otel` lazily so it never loads on Workers.

If you customized any of these files, review the changes when you upgrade. The [changeset on GitHub](https://github.com/bigcommerce/catalyst/blob/canary/core/CHANGELOG.md#1140) has the code for each one.

* **Cart**: `core/app/[locale]/(default)/cart/page.tsx` and `core/app/[locale]/(default)/cart/page-data.ts` fetch `addedByAttributeId` on cart line items and nest pick list items under their parent. `core/vibes/soul/sections/cart/client.tsx` adds an optional `includedItems` array to `CartLineItem` and an optional `includedItemsLabel` prop to the `Cart` section, and sets a fixed width on the quantity column.
* **Instrumentation**: `core/instrumentation.ts` uses the new `core/lib/otel/cloudflare.ts` on Workers.
* **Analytics**: `core/lib/analytics/index.ts` initializes providers before the first event.
* **Faceted search**: `core/app/[locale]/(default)/(faceted)/fetch-faceted-search.ts` includes sub-categories in the Category filter.
* **Server actions**: the `_actions` files under `core/app/[locale]/(default)`, `core/components/header`, and `core/components/subscribe` call `unstable_rethrow` from `next/navigation` in their `catch` blocks.
* **Product list**: `core/vibes/soul/sections/products-list-section/index.tsx` hides the filters column when there are no filters.

## Release tags

* [**@bigcommerce/catalyst-core@1.14.0**](https://github.com/bigcommerce/catalyst/releases/tag/%40bigcommerce%2Fcatalyst-core%401.14.0)
* [**@bigcommerce/catalyst-makeswift@1.14.0**](https://github.com/bigcommerce/catalyst/releases/tag/%40bigcommerce%2Fcatalyst-makeswift%401.14.0)
* [**@bigcommerce/catalyst-b2b-makeswift@1.14.0**](https://github.com/bigcommerce/catalyst/releases/tag/%40bigcommerce%2Fcatalyst-b2b-makeswift%401.14.0)

Latest stable:

* [**@bigcommerce/catalyst-core@latest**](https://github.com/bigcommerce/catalyst/releases/tag/%40bigcommerce%2Fcatalyst-core%40latest)
* [**@bigcommerce/catalyst-makeswift@latest**](https://github.com/bigcommerce/catalyst/releases/tag/%40bigcommerce%2Fcatalyst-makeswift%40latest)
* [**@bigcommerce/catalyst-b2b-makeswift@latest**](https://github.com/bigcommerce/catalyst/releases/tag/%40bigcommerce%2Fcatalyst-b2b-makeswift%40latest)