Patch Changes ee937aa: Add the migrate-to-hydrogen-2026-10 packaged skill. The skill guides an AI agent through the migration of a classic Hydrogen storefront (Remix or React Router) to Hydrogen 2026-10 (@shopify/hydrogen@^2026.10.0). Run hydrogen skills sync to copy it into your project.
Shop MCP lets your agent or app search Shopify Catalog, build carts, and complete Shop Pay checkout through a single MCP connection. It works with over 1 billion products in Shopify Catalog and doesn't require an API key for search. Nothing changes for existing Catalog API integrations, and no action is required. What changed Shop MCP is live at https://mcp.shop.com, with a skill description at ht
Sidekick can now help you customize checkout and customer accounts. Get answers and guidance right where you work, without searching the docs or contacting support. In the checkout and accounts editor: Sidekick is now available in the desktop editor. You can ask it to: In Checkout Blocks app: Sidekick can help you understand and plan blocks and functions in the Checkout Blocks app. For example, yo
Cart operations that leave the cart unchanged, for example, resubmitting the same values a cart already has, no longer trigger a carts/update webhook. Shopify sends a webhook every time a cart's contents or properties change. Previously, every cart operation produced a carts/update webhook. This change removes the duplicate notifications, and apps receive one carts/update for each change to a cart
What changed shopify.extension.version returns the version of the extension that is running. It’s the same name shown on the Versions page in the Dev Dashboard and chosen when running shopify app deploy. The value is an opaque name, not a version number, so compare it for equality rather than sorting it. It’s undefined when the extension runs from a local development server. Who’s affected This fi
What changed The POS Navigation API adds the navigatesuccess event. It fires after the destination screen finishes its native transition, and its callback receives a standard Event. currententrychange can fire before the screen finishes appearing, and the navigate() promise doesn’t wait for the transition. When navigating back, register the listener on the screen that will reappear; the screen bei
What's Changed App Skip lockfiles in every shopify app security check scan directory, including --include-dir paths, so large repository-root lockfiles no longer leave the secret check unresolved by @jplhomer in #8825 Check Dependabot and Renovate configuration at the app's Git repository root when the app is nested below it by @jplhomer in #8826 Detect React Router code in additional directories,
For EU merchants in the following countries: Austria, Belgium, Denmark, France, Germany, Ireland, Italy, Netherlands, Spain, Sweden, Switzerland, and United Kingdom, we've added automatic translation updates to Translate & Adapt. Until now, editing a product description or any other store content meant going back into the app to re-translate it yourself. As a result, translated storefronts fell be
Shopify now shares your compare-at price with AI shopping agents through Shopify Catalog, so AI agents can see when a product is marked down. Previously, AI agents reading Catalog only saw the current price and markdown prices displayed in storefront were not shown. Control if AI agents can view compare-at prices by reviewing your settings in admin. Find the toggle in the “Compare-at” section. Lea
The Global Catalog REST API, which was deprecated in April 2026, stops serving traffic on November 2, 2026. If your app still calls it, you need to migrate to Global Catalog MCP, which implements the Universal Commerce Protocol (UCP), before that date.
Minor Changes 661e015: Accept Liquid-style ?variant= links on product pages. handleShopifyRoutes({routeTemplates}) now 302-redirects ?variant= product URLs to the canonical option-params URL (/products/x?variant=123 → /products/x?Color=Red&Size=M), resolving the variant through the Storefront API with Cache.long() when the client has a cache adapter, following combined-listing variants to their ow
The Catalog API now returns a merchant’s compare-at price as list_price on each product variant. Your app or agent can use list_price to tell when a product is marked down and by how much. The price field doesn’t change. No action is required. list_price is an optional field defined in the UCP catalog specification, version 2026-08-25. It uses the same Price object as price, with amount in minor u
chore: exit prerelease mode on Changesets 3.0.3 for Hydrogen 2026.10.0 changesets/action v2.1.0 bundles Changesets 3.0, which keeps changesets Upgrading the CLI to 3.0.3 (and @changesets/parse to 1.0.0) puts both changeset pre exit the next changeset version releases everything in it as 2026.10.0 and empties ci: release, test, and deploy from main with Hydrogen on CalVer Run CI, the release, store
Minor Changes 1891913: ProductPayload.price is now { amount, currencyCode }, the Storefront API MoneyV2 shape, instead of a bare amount string. The hosted Shopify analytics script reads currencyCode as the event's currency, so product_viewed events no longer depend on window.Shopify.currency.active being set. Pass the variant's price object where you used to pass price.amount: // before price: var
Patch Changes d7be864: Redact credential headers from request params passed to the client logger. Logger events now show **** for the Authorization, Cookie, Set-Cookie, X-Shopify-Access-Token, Shopify-Storefront-Private-Token and X-Shopify-Storefront-Access-Token header values. The headers sent with the request are unchanged. Updated dependencies [d7be864] @shopify/graphql-client@2.0.1
Starting with API version 2026-10, Checkout and Customer Account UI extensions can specify an owner_type for each metafield declaration in shopify.extension.toml. Starting with API version 2027-01, owner_type is required for every metafield declaration, and deployments without it will be blocked. What changed Metafield declarations in [[extensions.metafields]] and [[extensions.targeting.metafields
You can now automate your return and refund, contact information, terms of service, shipping, and legal notice policies to help you launch your store faster and expand into new markets. Your automated policies stay up to date as your store settings change and in sync with Shopify’s recommendations. You remain responsible for your policies and your store’s compliance with applicable laws. To activa
What's Changed App Add JSON output schema for app versions list by @dmerand in #8524 Remove the dependency CVE audit check from app doctor by @jplhomer in #8555 Add JSON schema to organization list by @dmerand in #8526 Check for dependency automation configuration files in App Doctor by @jplhomer in #8556 Support target-level input query variables on functions by @saga-dasgupta in #8471 Support op
Developer ChangelogAction RequiredBreaking API ChangePOS Extensions
Shopify POS 11.15 corrects the value returned by Discount.amount for Percentage discounts to match the Cart API contract. Extensions that used this value as money need to update their logic. What changed A 25% discount on a $200 line item now returns amount: 25. POS 11.14 and earlier returned amount: 50, the monetary amount deducted. This applies to cart-level and line-item percentage discounts, i
Starting with Admin GraphQL API version 2027-01, apps that use Shopify-managed installation can call appDowngradeAccessScopes to replace optional write scopes with their matching read scopes. No action is required for existing apps. What changed The mutation affects only the calling app’s installation. Requested scopes must be declared in optional_scopes and must be write scopes with matching read
Developer ChangelogAction RequiredBreaking API ChangePOS Extensions
In POS UI extensions API version 2026-10, Cart API mutations reject when Shopify POS doesn't confirm that the cart changed. In earlier versions these mutations resolve whether or not POS applied the write. This is a breaking change for apps that adopt 2026-10, and those apps need to handle a rejected promise on every cart mutation they call. Apps on 2026-07 and earlier are unaffected. What changed
The Customer Account API now enforces a per-customer rate limit of 3000 requests per minute per store, shared across all apps. This affects all apps that call the Customer Account API, but you typically don't need to make changes because normal buyer traffic stays well under this limit. What changed The Customer Account API now limits each customer on a store to 3000 requests per minute. This limi
You can now review and export purchase order data in Shopify Analytics. Three new reports help you understand your purchase orders: Purchase order costs shows ordered items, quantities, supplier costs, estimated taxes, and purchase order costs. Purchase order transfers follows purchase orders through transfers, shipments, and receiving. Purchases on order shows open, ordered purchase orders that d
npm now rejects Trusted Publishing token exchanges for issue_comment runs, and the NPM_TOKEN snapit relied on has been dead since npm revoked classic tokens. snapit.yml now only validates the /snapit request and dispatches release.yml (already the trusted publisher for every package) on the PR branch. There, the branch is built and packed without a publish credential, and a job that runs no reposi
We have released International Payments from Balance for the US. This gives merchants a more cost-effective way to pay their international suppliers, with transparent pricing and no extra setup. International payments from Balance will let eligible merchants pay recipients internationally from the Balance mobile app. Learn more about the International Payments from Balance in the Shopify Help Cent
Shop can now verify who a shopper is while they're browsing your store, even before they make a purchase. For Shop users, this means checkout loads faster, carts sync across devices, sign-in is sped up with one-tap, and the Buy with Shop Pay button is pre-filled for a smoother, higher-converting checkout. Browsing activity also syncs to a shopper's Shop account, so Shop can resurface items they vi
Minor Changes b202925: Add getTrackingValues() to analytics destination callback context. Destinations can read current uniqueToken and visitToken values from Shopify's consent API without accessing its internal globals. Each read requests fallback generation with the tag hydrogen: ; token generation is provided by the consent API when supported. Unavailable values are returned as empty strings, a
We’ve released improved support for 3 right-to-left languages (Arabic, Urdu, and Hebrew) in both Admin and Storefronts, including checkout, customer accounts and the Horizon family of themes. Display language is determined based on the user’s device settings, if available. Product pages and other merchant-owned content will continue to be displayed in the languages that you have enabled. You can e
Patch Changes h2 init --template skeleton and npm create @shopify/hydrogen -- --template skeleton now do the same as leaving the flag out, instead of downloading GitHub's latest release. The new project's dependencies install, its .env and name are set up, and every other flag is honoured. Scripted or non-interactive runs that use --template skeleton should now pass the same prompt-skipping flags
Patch Changes Fix React hydration interruption caused by Analytics.Provider state updates. Deferred cart, shop, and consent state updates are now wrapped in startTransition, preventing React from abandoning server-rendered HTML when Suspense boundaries are still dehydrating. (#4111) by @andguy95 publish from useAnalytics() also re-checks consent when called. If a visitor revokes consent while Reac
Patch Changes Fix h2 env pull corrupting environment variable values that contain backslashes, double quotes or tabs. Values are now single-quoted where possible so they are read back exactly by dotenv, and $ and backticks are no longer expanded if the .env file is sourced by a shell. (#4115) by @stephanie-shopify h2 init --template skeleton and npm create @shopify/hydrogen -- --template skeleton
You can now include discounts in Rollouts to run coordinated campaigns and test different offers before launching more broadly. Schedule discount changes: Launch a new offer to a portion of online store traffic, then expand when you're ready. Compare offers: Test discount changes against your existing offers and review conversion results to help decide which offer to keep. Launch changes together:
What's Changed Theme [4.8] Bump Shopify/theme-tools packages by @karreiro in #8719 [4.8] Restore theme documentation sync by @karreiro in #8723 Full Changelog: 4.8.3...4.8.4
Polaris 2.0.0-rc.1 brings more components in line with the new admin style update, fixes several layout and event-handling bugs, and improves mounting and update performance. What's changed Components Table now matches the updated Shopify admin design. Tooltip can now be placed in Section's supplemental slot. Section now supports equal-height cards within the same Grid. Select now matches the heig
With the 2026-10 API version Next Gen Events, Shopify's successor to classic webhooks, is now generally available. Events give you more customization than classic webhooks, letting you choose what changes your app receives, and what data comes with the payload. If your app keeps track of collection memberships, for example, finding out that a collection changed is only part of the work. You still
ShopGym creates realistic online stores and generates shopping tasks based on each store’s products and features. Developers can then repeatedly test shopping agents under consistent conditions.
Starting in API version 2026-10, ShopifyQL adds Shop Campaigns fields to two schemas. The shop_campaign_insights schema adds a shop_campaign_orders metric and country and country_code dimensions. The sales schema adds four Shop Campaign dimensions, so you can break down sales by the campaign that drove them. What changed The shop_campaign_insights schema adds these fields: | Field | Type | Descrip