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
Summary Apps can now discover Rollouts, inspect their schedules, traffic allocation, and resource changes, and receive notifications when they change. These capabilities help apps understand and respond to coordinated launches, experiments, and temporary events across discounts, catalogs, themes, and checkout and accounts configurations. What's new Discover and read Rollouts. Use the root rollouts
Developer ChangelogAction RequiredNewAdmin GraphQL API
Update your app to account for discount Rollouts Summary Admin GraphQL API version 2026-10 adds a read-only rollouts connection across Discount types. Apps that read discounts should use Discount.rollouts alongside existing discount fields to account for Rollout-driven schedules and buyer reach. What's changing Merchants can include discounts in Rollouts to coordinate launches, test discounts with
Line items in Orders webhook payloads now include a selling_plan_id field. This field identifies the selling plan applied to a subscription line item, which helps you avoid extra API calls to look up that information. The change applies to API version 2026-10 and later, and you don’t need to take any action to keep your app working. Previously, if your app needed to know which selling plan applied
As of the 2026-10 GraphQL Admin API version, the PointOfSaleDevice object includes a new fiscalDeviceIdentifier field. This field returns the Shopify-assigned fiscal register identifier (manufacturing number) for a POS device. You only need to adopt it if your app supports in-person fiscal compliance workflows. What changed The PointOfSaleDevice object in the GraphQL Admin API now includes a nulla
Developer ChangelogAction RequiredBreaking API ChangeAdmin GraphQL API
As of API version 2027-01, the metafieldInteger collection source condition inputs and types is removed from GraphQL Admin API. If you use metafieldInteger to create or read collection source conditions, you need to migrate to metafieldInt before you upgrade to API version 2027-01. What changed With metafieldInt, the value field on integer metafield conditions changes type from Int to String, to a
Starting in API version 2026-10, the shopifyqlQuery query in the GraphQL Admin API returns a new parseWarnings field on ShopifyqlQueryResponse. This field surfaces non-fatal issues, such as the use of fields scheduled for deprecation, so you can detect and address them proactively. What changed shopifyqlQuery now returns a parseWarnings field alongside your results. The field is always present: it
As of the 2026-10 GraphQL Admin API version, the orderCancel mutation returns a new jobResult field of type OrderCancelJobResult. Order cancellations run asynchronously. The jobResult field provides a structured, cancellation-specific result, including the cancellation status, any errors, and the affected order. Use this field to check whether the cancellation completed successfully and to handle
Developer ChangelogAction RequiredNewAdmin GraphQL APICustomer Account API
SMS marketing consent is now available through the new smsMarketingConsent field on the CustomerPhoneNumber object. This field uses the same structured consent model as WhatsApp. The existing flat SMS marketing consent fields on CustomerPhoneNumber remain available for backward compatibility but are now deprecated. New integrations should use smsMarketingConsent, and existing integrations should p
Developer ChangelogAction RequiredBreaking API ChangeAdmin GraphQL APIEvents & webhooks
Starting with API version 2027-01, third-party tax apps will receive Global IDs (GIDs) in tax calculation requests and tax summary webhook payloads for all entity references of the summary section. This aligns with how Partners interact with other Shopify APIs. These apps can now use the same identifiers across all Shopify endpoints without managing different ID formats for tax-specific integratio
A new SubscriptionContractCalculation API is now available to manage subscriptions. This new API runs subscription contract edits through Shopify's checkout engine, enabling new capabilities: Shopify Functions, including cart transforms and delivery customizations are supported during contract calculations Contract edits align with what the subscriber sees during billing Get a preview of the full
Patch Changes 8351255: Wait for nested block validation in ValidBlockTarget and referenced block validation in ValidSettingsKey. Neither was awaited, so their offenses could arrive after check() returned and be lost. e0f63a0: Run all checks on a Liquid file in one walk of its AST, instead of one walk per check. Each check still runs its methods in the order it did before, each one settled before t
Canvas is a new design surface for your online store. Every page is laid out together in one interactive, infinite workspace, so you can see how your whole store feels and work on any part of it in context. In Canvas, you can: At launch, Canvas doesn't support third-party themes from the Shopify Theme Store, Markets, rollouts, translations, or app blocks and app embeds. Themes edited in Canvas don
We are introducing the inventory_transfer_id to several inventory_shipment webhook payloads to make it easier for developers to identify which inventory_transfer records, if any, a given shipment is related to. This will ease integration burdens and remove the need for developers to merge the datasets on their end to manually build the links. What changed Introduces an inventory_transfer_id field
Your reports show what changed. You know why. Now, you're able to capture that story directly in Shopify Analytics. Add annotations to supported time-series reports for the moments that shape your business, like a campaign launch, creator mention, supplier change, promotion, or operational improvement. Instead of leaving that context in memory, spreadsheets, or team threads, it stays beside the da
Developer ChangelogAction RequiredBreaking API ChangeAdmin GraphQL API
As of GraphQL Admin API version 2026-10, functions in the segment query language now use the operators MATCHES/NOT MATCHES instead of = true/= false. For example, the previous query shopify_email.opened() = true would now be represented as shopify_email.opened MATCHES (). The parameters for each function have also been expanded to use their own operators. For example, the query products_purchased(
API version 2026-10 adds return policy profiles to the GraphQL Admin API. A return policy profile is a set of return rules that you associate with markets, and it supersedes a store’s return policy text. Your app can now query each market's return rules as structured data, such as the length of the return window. What's added Two query fields: returnPolicyProfile: Returns a single profile by ID. r
You can now manage buyer-requested order edits through the GraphQL Admin API, Customer Account API, and three new webhook topics in API version 2026-10. Buyers can request the removal of unfulfilled line items from an order, and merchants (or apps acting on their behalf) can review, resolve, or decline those requests. What changed Buyers can now request edits to the unfulfilled line items on an or
As of API version 2026-10, the GraphQL Admin API exposes the tax amounts calculated for return shipping fees. These amounts reflect the tax calculated by the merchant's tax provider for the fee. What's new CalculatedReturnShippingFee.taxAmountSet (MoneyBag!) — the estimated tax on the return shipping fee, in shop and presentment currencies. Available on the returnCalculate query, and zero when no
Minor Changes 96af869: Support LiquidDoc string enums in hovers and completions Allowed values are kept through assignments, and render, content_for and block parameter completions insert the first one. The default filter widens enum values to string. Patch Changes 0bbd0f8: Complete and hover the implicit content parameter inside blocks/*.liquid. Bare content is a string variable in every theme bl
Apps that create new discount types using Shopify Functions can now register shopify/Discount app intents. This lets Sidekick launch an app’s create and edit flows and promote them in the disambiguation picker. Apps can register an intent using either of these targets: admin.app.intent.link navigates to an existing page in a React Router app. admin.app.intent.render renders a focused Admin UI exte
Shop's web experience has moved from shop.app to shop.com. Your store, products, and channel settings are unaffected — the change only affects the web address shoppers use to reach Shop. What's changing Shop's web experience now lives at shop.com instead of shop.app Existing shop.app links redirect automatically to shop.com What you need to do Nothing. Your store, products, and channel settings ca
Starting with GraphQL Admin API version 2027-01, apps can read and write packed product dimensions using InventoryItemMeasurement.packedDimensions and InventoryItemMeasurementInput.packedDimensions. Shopify uses these measurements for automatic package selection on eligible multi-item orders. What changed The packedDimensions field returns the packed length, width, height, and unit for an inventor
Developer ChangelogUpdateAdmin GraphQL APIAdmin REST API
More resilient token exchanges when migrating to expiring offline access tokens When you migrate an app from non-expiring offline tokens to expiring offline access tokens without a user session, you can now recover a lost migration response by retrying the exchange with the original non-expiring token for up to seven days. This reduces how often you need a merchant to reopen the app to restore acc
Starting with the 2027-01 Admin GraphQL API version, apps can read and write packed product dimensions using InventoryItemMeasurement.packedDimensions and InventoryItemMeasurementInput.packedDimensions in the Admin GraphQL API. Shopify uses these measurements for automatic package selection on eligible multi-item orders. What changed The packedDimensions field returns the packed length, width, hei
You can now set return window overrides by market for specific collections, products, or variants. Overrides let you choose a different return period than your default return window - for example, 14 days for seasonal items instead of your standard 90 days. How it works Where to set it Example Learn more in return window overrides.
Apps that bill with the Billing API can now move their existing subscriptions to Shopify App Pricing by using the migration tool in the Partner Dashboard or new commands in Shopify CLI. Subscriptions move at the start of their next billing cycle, and merchants don’t need to re-approve charges. What changed You can now migrate existing Billing API subscriptions to Shopify App Pricing instead of cre
Patch Changes Shopify's consent API now returns visitor tracking values in the consentManagement response. Hydrogen now enables asynchronous consent initialization so the Customer Privacy API fetches and caches these values before analytics starts. This replaces Hydrogen's separate consent query and cache writes, as well as Server-Timing headers, which are no longer collected or forwarded for trac
Patch Changes Shopify's consent API now returns visitor tracking values in the consentManagement response. Hydrogen now enables asynchronous consent initialization so the Customer Privacy API fetches and caches these values before analytics starts. This replaces Hydrogen's separate consent query and cache writes, as well as Server-Timing headers, which are no longer collected or forwarded for trac
Patch Changes e084f75: Restrict where authenticate.admin follows exit-iframe redirects. The destination may now only be the app's own origin (including relative paths) or the Shopify admin (admin.shopify.com, and .myshopify.com under /admin), over https with no custom port. Other destinations are refused. Apps that passed their own external URL to the exit-iframe endpoint should use redirect(url,
Patch Changes e084f75: Restrict where authenticate.admin follows exit-iframe redirects. The destination may now only be the app's own origin (including relative paths) or the Shopify admin (admin.shopify.com, and .myshopify.com under /admin), over https with no custom port. Other destinations are refused. Apps that passed their own external URL to the exit-iframe endpoint should use redirect(url,
Shopify POS now lets store staff run cycle and full stock counts directly in POS, making it easier to count inventory on the sales floor while keeping planning, review, and approval in Shopify Admin. In Shopify Admin, users with the required permissions can create and schedule a stock count, select the location where the count will take place, and choose the products to include. Once created, the