Skip to content

October 2026

Release 2026.10.0, published October 28, 2026.

  • Added the feature-product package: product listings with filters, sort, pagination, active-filter chips, a grid-or-list toggle, an empty state, and a skeleton
  • Added the product page: a gallery, a sticky buy box and a sticky bar on phones, swatches colored from catalog data, and a variant selector that shows stock and price differences
  • Added discounts with the EU Omnibus lowest-price line, stock and a delivery promise per variant, and contract prices, price tiers, and article numbers for business buyers
  • Added add-ons such as an extra warranty, bundles, related products, recently viewed, product comparison, and questions and answers to the product page
  • Added delivery dates and time slots, pickup points, collecting at the seller’s warehouse, express checkout with Apple Pay and Google Pay, and gift cards to the checkout
  • Added a business checkout: company billing and VAT number, complete or split delivery on a requested date, an order or a quote request at the end, and the VAT rule it applies and why
  • Made the checkout offer saved addresses as cards, and added a company address picker, sign-in inside its details step, a cart-merge notice with Undo, and an account offer to guests on the thank-you page
  • Added quick order by SKU, and an add-to-cart drawer for every add, with a summary for a bulk add
  • Added a collapsed discount code entry, cart names that tell carts apart, a stock status per cart line, and digital lines without a quantity stepper
  • Made the address form fill in the street and city from a postal code and house number or a search, and the address books read like a contact list, with search, a pinned default, and a name per address
  • Reworked the order pages: the order detail reads top to bottom, a delivery shows the lines that went out in it, next steps, the chosen delivery slot or pickup point, and an order history table for business buyers
  • Added a to-do list for the business dashboard, a consumer account overview, an account menu grouped by task, and a searchable, paginated invoice table with the credit left as a bar
  • Added the quote number, a status filter and sort, and replying to or declining a quote, and approval rules and invites with several roles for organizations
  • Added a mega menu on React Aria with flyout, full-width, and mobile drill-down layouts and a brands panel, plus HeaderSearch, StickyHeader, a Footer from rows, CountryLanguagePicker, ErrorPage, and NotFound
  • Added SEO helpers: hreflang alternates, a sitemap toolkit, and JSON-LD for the site, a product, and a listing
  • Added the session package: the /graphql/auth route, session renewal in the proxy, server readers for the tokens, and a client fetcher that refreshes once after a 401
  • Added a Piwik PRO listener, consent-gated analytics wiring, and a cart viewed event
  • Added Switch, RangeSlider, Gallery, Price, and TodoList, and a QuantityStepper you can type in
  • Rebuilt the checkout as a shell of sections, one open at a time, with one-page, multi-step, and phone layouts, and released feature-cart 1.0.0 (breaking: upgrade the framework first, and recompose the checkout page)
  • Made persisted document ids the bare sha256 digest, which Hive usage reporting accepts (breaking: use the shared persistedDocuments codegen config)
  • Moved the order and quote facts out of their detail headers into OrderDetailInfo and QuoteDetailInfo (breaking: render the info part beside your own header)
  • Made the approvals add-on read and decide through the framework’s order-approval module (breaking: move to the new approval props and hooks)
  • Made the address form reject postal codes and phone numbers that do not fit the country (breaking: expect stricter validation)
  • Made the server sort the quote list, ready-to-order quotes first (breaking: upgrade the framework first)
  • Made the cart total include the estimated shipping, and a net summary end with the gross total (breaking: read “Total excl. VAT” for the net amount)
  • Fixed a form submitted before hydration putting its fields, such as a password, in the URL
  • Fixed logout leaving the refresh token valid, and made the preview secret check constant-time
  • Fixed rapid quantity steps getting lost, and cart writes refused on a version conflict being lost or silently resent
  • Fixed a payment method that is no longer offered being placed with the order
  • Fixed technical values, such as raw status codes, showing to customers
  • Fixed account menu items being clickable only on their text
  • Locked next at 16.3.6, past the critical next/og advisory, and pinned shell-quote to its patched release
  • Added delivery options on commercetools and Medusa: delivery dates and time slots, pickup points, split or complete delivery, a carrier and delivery estimate per shipping method, a delivery promise on the product page, the shipping method a cart starts on, and how far a cart is from free delivery
  • Added several payments on one cart with gift cards as a partial payment method, Apple Pay, Google Pay and PayPal Express through Adyen, Order.openPaymentRedirect, and a handler that keeps an order’s payment state in step with its payments
  • Added returns for consumers and business units: drop-off or pickup, a refund or an exchange, a decision by the back office or an ERP, and photos through signed upload URLs
  • Added the EU and B2B VAT rules to the cart, with Cart.vatOutcome and its reason, the company VAT number on the cart and the order, and a live VAT number check in the new vies package
  • Added address lookup by postal code and type-ahead address entry in the new pdok, loqate and photon packages, and the official spelling of a city on every address write
  • Added stock levels, stock per warehouse, backordered lines, an in-stock alternative, NOT_FOR_SALE for a variant without a price, and back-in-stock mails a shopper can withdraw
  • Added price tiers, a list price, identifiers, physical or digital, documents, accessories, a sales unit, complementary products, the lowest price before a discount, and product reviews to a variant
  • Added search suggestions, spelling correction, keyword redirects and a category’s own facets to product search, and the sort orders, paging limit and query id each engine supports
  • Added add-ons and bundles as linked cart lines, a result per line when adding several, a maximum and a pack size per line, the price a line was added at, the cart’s changes since the last visit, and named and automatic discounts
  • Added preview images, a default name, a dated name for new carts and archiving after 60 days to named carts, and let a buyer undo a guest cart merge at sign-in
  • Added a company’s credit on account, payment terms and minimum order value, a setting that turns off one-off shipping addresses, pending invitations, structured approval rules, and Cart.approvalRequirement and Order.requiredAction to say who has to act
  • Added signed order links, status counts on order and invoice lists, invoice search, a filter on the orders you placed, and a quote number, a status filter and the buyer’s reply or decline to quotes
  • Added quote and back-in-stock notifications, made the order confirmation carry its lines and totals and copy the company’s contact, and added the customer’s phone number and a name for an address
  • Brought Medusa close to commercetools: company carts, invoices, approvals, order history, guest sessions and cart merge, delivery options, gift cards, catalog events, stock, customer-group prices and taxes, test-data cleanup, and its own Search module as a search engine
  • Added vendor-neutral rich text with tables, article and article overview pages, and six new content block types to the content contract
  • Added site settings, content search with keyword redirects, the content pages about a product’s category, curated collections, menu icons by name and field tabs to every CMS
  • Added content-modified events, translated paths, breadcrumbs and per-tenant catalog pages to Payload, an eject command for its built-in blocks and collections, and a job that recreates missing catalog pages
  • Added application onStart and onShutdown hooks, signed upload and read URLs for object storage, and store switching and extra store-context headers to mcp-core
  • Added test-support actions to create a business unit, pay an order, moderate a review and clean up by email, and exported the scenarios every search index and payment adapter must pass
  • Made a new cart start at the buyer’s default addresses and shipping method, without a country-only shipping address (breaking: read the country from the store context, and deregister copyCustomerDefaultsToCart)
  • Made the commercetools service client need more scopes, and checked an associate’s permissions before paying, reopening or cancelling a business unit’s order (breaking: add the scopes and role permissions)
  • Stopped retrying a cart update after a version conflict, and reported a line that cannot be added in lineResults (breaking: handle CART_VERSION_CONFLICT and lineResults)
  • Made a cart become an order only once its payments cover the total (breaking: a payment adapter reads Cart.amountToPay)
  • Replaced applyReverseCharge with applyVatRules, which decides by the delivery country and a verified VAT number (breaking: register applyVatRules and add its custom fields)
  • Reworked the approval rule mutations around structured conditions, and made an approval’s order, approver and rejecter nullable (breaking: use the new inputs and handle null)
  • Made a credit note lower the amount due on its invoice, and a business unit’s cart keep the buyer’s email (breaking: record the credit on the invoice, and address the confirmation with orderConfirmationAddressees)
  • Made BusinessUnit.carts list active carts only by default (breaking: pass status for archived carts)
  • Counted the price facet in minor units with Algolia and Medusa too, and gave each Meilisearch document type its own index (breaking: reindex, and send Algolia and Medusa price filters in minor units)
  • Made the Storyblok and Contentful webhooks accept only signed deliveries, and made paths optional on content-modified events now that they carry changes (breaking: set webhookSecret, and read changes)
  • Reworked the CMS content model: SEO as three plain fields, a Page interface, one page heading, and a text field for a Storyblok catalog page’s category (breaking: apply the new content model, and set isPageHeading in your own block mappers)
  • Moved core to version 11 of the Sentry SDK, dropped its @labdigital/federated-token dependency, and made a composed module close before the modules ahead of it (breaking: upgrade your own Sentry calls and custom client contexts)
  • Made Medusa hold a company’s order for approval, require core 1.8.0, and list automatic promotions apart from discount codes (breaking: handle an orderPlace without an order)
  • Read the SFCC organization id from SFCC_ORGANIZATION_ID (breaking: rename the environment variable)
  • Added methods to UserNotificationClient and actions to the test-support contract, and made test-support quote cleanup opt-in (breaking: implement the new methods and actions, and pass quotes: true)
  • Made Query.customer answer null for a guest, orderByPublicId answer without a time window, and an expired quote read as EXPIRED
  • Fixed other shoppers’ guest orders in a shared browser reaching the account of whoever signed in, and unpublished Payload content being readable without signing in
  • Enforced a business unit’s boundaries when switching units, approving your own order, billing a cart and resolving federated references
  • Fixed a product’s gross price without tax, shipping methods shown at the wrong rate, duplicate cart lines and address book entries, and missing localized slugs on large product pages
  • Fixed order numbers restarting after a failed counter read, commercetools writes being resent after a lost response, MEDUSA_REQUEST_TIMEOUT being ignored, and a failed Azure Event Grid event counting as delivered
  • Kept secrets nested in logged values, Sentry requests and Redis URLs out of the logs, and kept a Redis outage from failing or stalling requests
  • Fixed empty Storyblok listings and sitemaps, Storyblok links and names that ignored the translated slug, and one malformed block failing a whole page in Storyblok and Payload
  • Updated dependencies, including the releases of Next.js, proxy-addr and shell-quote that fix critical advisories