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 need to know which product joined or left. With classic webhooks, that can mean fetching the collect
AI Pulse
Your level is built by what you ship — not by what you read. Anthropic · Gemini · Vercel · OpenAI · your stack are listed below as a feed; the real progress is in the hero above.
- 01Publish a plugin to a marketplace+4 XP
- 02Write a public post about the persona crew framework+1 XP
- 03Open-source crew-monitor as a generic agent dashboard+3 XP
News & ecosystem updates
Auto-fetched every 6h. Mark items read / tried for personal organization — no XP attached.
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 integrations. What's changed This change affects two key integration points: Tax calculation requests: Custome
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 plan to migrate to this field. For field definitions, data structure, and migration details, see the
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 any errors. Previously, the mutation only exposed the generic job field, which didn’t include cance
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 returns a list of warning messages when a successful query has non-fatal issues, and an empty list
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 align with the metafield value field on the Storefront API. For details, see the Storefront Metaf
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 nullable fiscalDeviceIdentifier field. It returns the Shopify-assigned fiscal register identifier for the
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 to a subscription line item, it had to make a follow-up Admin API call for every order it received.
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 a share of buyers, or run temporary events alongside other store changes. When a discount is part o
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 query to list and search Rollouts, and rollout(id:) to fetch a Rollout directly by ID. See what a R
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 like bundled products, Shopify Functions, and consistent pricing calculations. Subscription contracts can now include bundle products Shopify Functions, including cart transforms and delivery customizations are supported during contract calculations Contract edits align with what the subscriber sees during b
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 to the payloads of the following... inventory_shipments/create inventory_shipments/delete inventory_
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(quantity: 5) = true would now be represented as products_purchased MATCHES (quantity = 5) . Th
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 extension inline. This target requires API version 2026-04 or later. Discounts UI extensions using admin
<h2>What’s changed</h2> <h3>Behavior changes</h3> <ul> <li><strong>Tokens are blocked in browsers by default</strong> (<a href="https://github.com/makenotion/notion-sdk-js/pull/791" data-hovercard-type="pull_request" data-hovercard-url="/makenotion/notion-sdk-js/pull/791/hovercard">#791</a>) <ul> <li>In a browser page, web worker, or service worker, constructing a client with <code>auth</code> throws <code>BrowserTokenNotAllowedError</code>. Per-request <code>auth</code> and OAuth client credent
Previously, the URL for Flow Trigger Lifecycle Callback extensions were required to be absolute HTTPS URLs pointing to a web server. This required an already hosted system which made it inconvenient to test locally before deployment. Additionally, it required that the full URL be updated in addition to a Shopify app's application_url when being used with a dynamically tunneled server whose URL might change. Now, Flow Trigger Lifecycle Callback extensions support relative URLs in addition to abso
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, height, and unit for an inventory item. Mutations that accept InventoryItemMeasurementInput can use the
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 access, but you don’t need to change existing flows to keep them working. What changed When you migrate
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 creating new plans from scratch. Migration tool in the Partner Dashboard : Draft App Pricing plans from
Sidekick now surfaces app extensions that declare only intents , with no tools file. Previously an extension had to declare tools to be eligible for Sidekick, so an admin.app.intent.link or admin.app.intent.render extension that registered only an intent was skipped and Sidekick never suggested the app. This applies to all apps on all stores, with no API version to target and nothing to opt into. If your app has an intent-only extension and no extensions_summary in its shopify.app.toml , then yo
Browser agents can now read and update Shopify checkouts using WebMCP tools for checkout . The tools let agents interact with the active checkout in the buyer’s browser session. When the buyer’s input is required, such as 3D Secure authentication or for blocking UI extensions, the tools hand back control to the buyer. With storefront and cart tools already live, browser agents can now assist the full shopping journey on Shopify, from product discovery and cart management through checkout and ord
With today's release of AI Toolkit , all existing shopify- skills are consolidated into a single shopify skill. If you use AI Toolkit skills with agents or npx skills , you might need to update your environment. What changed Shopify skills content in AI Toolkit was previously distributed across many skills, such as shopify-dev-onboarding , shopify-admin , and shopify-functions . The agent plugins and the AI Toolkit skills repository now expose a consolidated shopify skill that covers these use c
Today we're sharing the newest wave of improvements to the Dev Dashboard. You told us, in the community forums and in support conversations, that common work like managing collaborator access or understanding app health took too much juggling. This release brings that work into one home for your apps and the stores you work in: store management, collaborator access, and app health—one place to see how your business is doing and act on whatever needs attention, across all your apps and stores. He
As of GraphQL Admin API version 2026-10 , ShopifyPaymentsTransactionType now includes CURRENCY_CONVERSION type. Learn more about ShopifyPaymentsTransactionType on Shopify.dev .
<p>v24.8.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-cli] Add <code>--build-fingerprint</code> to <code>eas simulator</code> to install the newest build with a given fingerprint. (<a href="https://github.com/expo/eas-cli/pull/4472" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4472/hovercard">#4472</a> by <a href="https://github.com/tchayen">@tchayen</a>)</li> <li>[eas-cli] Accept build IDs in <code>workflow:ssh <id></code>. (<a href="https://github.com/expo/eas-cli/
The Polaris 2.0 release candidate is now available for embedded App Home interfaces. It includes the Shopify admin’s new visual styles, allowing your app to adopt the new look. The new Shopify admin design began rolling out progressively to merchants on September 15, 2026. You can adopt the release candidate now and test your app across both the previous and new Shopify admin designs. What changes when you adopt Polaris 2.0 When your app uses polaris-2.0-rc.js inside the Shopify admin, its Polar
As of API version 2026-10, the GraphQL Admin API includes a feeDetails query for retrieving specialized fees charged to a shop. No action is required for existing apps. What changed The new feeDetails query returns a connection of FeeDetails objects. Each FeeDetails object includes: feeName and amount : The name of the fee and the amount charged. flatRate and variableRate : The fixed amount and the rate that make up the fee. taxAmount : The tax charged on the fee. settlementAmount and settlement
Starting with GraphQL Admin API version 2027-01 , setting the deprecated DiscountCountriesInput.includeRestOfWorld field to true returns a BAD_REQUEST error. Apps that use this value must specify every applicable country through add before upgrading. Apps on 2026-10 and earlier keep their existing behavior while those versions are supported. What changed As of API version 2027-01 , includeRestOfWorld remains in DiscountCountriesInput , but passing true returns this error: includeRestOfWorld is n
<p>Self-hosted Supabase v0.8.2: Postgres init changes, setup.sh fix, OAu…</p>
We’re reducing the query complexity limit for Events subscriptions from 250 to 100 points. This change does not affect Classic Webhooks. Shopify assigns each Events query a complexity score based on the fields it selects, the types of data those fields return, and the number of items requested in connections using first or last, following the GraphQL query cost calculation . The limit applies to each subscription query, and queries executed by Events subscriptions don’t count toward your app’s A
Polaris Web Components 1.1 is now available on the stable Polaris CDN channels. This is the first minor release under the CDN's new semantic versioning model . The following URLs now serve Polaris 1.1 <script src="https://cdn.shopify.com/shopifycloud/polaris.js"></script> <script src="https://cdn.shopify.com/shopifycloud/polaris-1.js"></script> Apps using polaris.js or polaris-1.js receive the update automatically. No action is required. If you need to remain on this version, you can pin your ap
As of Admin GraphQL API version `2027-01`, the `marketCurrencySettingsUpdate` mutation is removed, along with the `MarketCurrencySettingsUpdatePayload`, `MarketCurrencySettingsUserError`, and `MarketCurrencySettingsUserErrorCode` types. The mutation already returns an error for every request, so this removes an endpoint that can no longer be used. ## What changed In API version `2027-01`, the Admin GraphQL API removes: - `marketCurrencySettingsUpdate` - `MarketCurrencySettingsUpdatePayload` - `M
Developers using Shopify App Pricing can now create unlimited private plans per app and add unlimited target stores to each plan, replacing the previous limits of 15 private plans and 20 stores per plan. No action is required to continue using existing plans. What changed A private plan is an app pricing plan available only to stores you select. These selected stores are the plan’s targets. Private plans let you offer custom pricing and features to specific merchants without making that offer av
API version 2026-10 adds a non-null translatable field to the Metafield object in the GraphQL Admin API. Apps that fetch translatable metafields and migrate to 2026-10 can now see whether a metafield’s value is translatable directly on the metafield itself. If your app doesn’t query for translatable metafields by shop, you don’t need to change anything. What changed The Metafield object in the GraphQL Admin API exposes a new non-null field, translatable: Boolean! , in API version 2026-10 : { pro
The deprecated automaticDiscounts query is removed from the GraphQL Admin API in version 2027-01 . If your app reads a shop’s automatic discounts through automaticDiscounts , you need to move to the discountNodes query with a method:automatic filter before you upgrade to 2027-01 . Apps on 2026-10 and earlier keep working unchanged while those versions are supported. What changed As of API version 2027-01 , automaticDiscounts no longer exists on QueryRoot . Requests that include automaticDiscount
UI extensions using API version 2025-10 or later are limited to a 64 KB compressed JavaScript bundle per extension. Full page customer account extensions may use up to 128 KB. If your extension remains over the limit after optimization, run shopify app build and submit the minified bundle and its esbuild metafile through the bundle size exception form . Shopify will review the contents of your bundle and may grant a limit increase if the remaining bundle weight is unavoidable. Requests will be d
The GraphQL Admin API now includes the auditTrail field on ProductVariantContextualPricing in API version 2026-10 . Apps with the read_products access scope can use this field to inspect the ordered adjustments that Shopify applied to a contextual product variant price. Existing apps do not need to take action. What changed The new ProductVariantContextualPricing.auditTrail field returns a PricingAuditTrail object. Its priceAdjustments field contains the adjustments in the order that Shopify app
The GraphQL Admin API now includes fields for querying and traversing a store’s market hierarchy in API version 2026-10 . Apps that use the read_markets access scope can retrieve parent-child relationships, navigate between related markets, and check if the asynchronously rebuilt relationship data has changed. No action is required for existing apps. What changed The new marketRelationships query returns a connection of MarketRelationship objects. Each relationship includes a childMarket and a n
As of API version 2026-10, the static session.currentSession.staffMemberId field has been removed from the POS UI Extensions Session API. It was deprecated in 2026-07 in favour of session.staffMember, a reactive signal that updates when a different staff member pins into POS. Before targeting API version 2026-10, replace reads of session.currentSession.staffMemberId with session.staffMember.value?.id. To react to staff changes while your extension is running, subscribe to the signal with session
The GraphQL Admin API now supports a CANCELED receive action for inventory shipments in version 2026-10 . You can mark inventory shipment line item units as canceled when they’ll never arrive, and you can read canceled quantities on shipments and their line items. This is an additive change to the 2026-10 release candidate. No action is required, and apps on earlier API versions aren’t affected. What changed Canceled receiving joins the existing accepted and rejected receive actions across the i
<p>v24.7.0</p> <h3>🎉 New features</h3> <ul> <li>[build-tools] Stream iOS Simulator previews with H.264. (<a href="https://github.com/expo/eas-cli/pull/4416" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4416/hovercard">#4416</a> by <a href="https://github.com/gwdp">@gwdp</a>)</li> <li>[build-tools] Report the expo.dev preview page as a simulator session's preview URL, and the preview server behind it as <code>previewApiUrl</code>. (<a href="https://github.com/expo/ea
Starting today, we're updating Events payloads, trigger syntax, and delivery headers. Classic Webhook subscriptions are unaffected. What's changed fields_changed now describes how each path changed The flat array becomes an object containing three arrays: added , updated , and removed . Developers can distinguish a resource or relationship being added, a value being updated, or a resource or relationship being removed without querying just to infer what happened. Update payload handling to read
The Catalog API now returns video and 3D model media on products that have it, and supports filtering search results by media type. You can request only products that have video or 3D model media attached, and matching products return links to those assets in the same response. The new filter is optional, and existing queries keep returning the same products. What changed search_catalog , get_product , and lookup_catalog now return video and 3D model assets on a product's media array. Previously
<p>v24.6.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-cli] Display logs in <code>eas build --wait</code>. (<a href="https://github.com/expo/eas-cli/pull/4303" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4303/hovercard">#4303</a> by <a href="https://github.com/AHGIJMKLKKZNPJKQR">@AHGIJMKLKKZNPJKQR</a>)</li> </ul> <h3>🐛 Bug fixes</h3> <ul> <li>[build-tools] Skip project source refresh for jobs with no sources. (<a href="https://github.com/expo/eas-cli/pull/4389" data
B2B checkout treats the buyer’s surname as optional, so payment session requests for B2B orders can omit family_name in shipping_address and billing_address . This affects payments apps that handle B2B orders through the Payments Apps API and currently require family_name in these addresses. What changed B2B checkout doesn’t require a buyer surname, and the Payments Apps API already accepts payment session requests for B2B orders without family_name in the shipping_address or billing_address . T
Starting September 15, 2026, the Shopify admin has a new look, rolling out progressively to merchants. Apps that use Admin UI extensions and App Home UI extensions pick up the new styles automatically. Apps that render their own interface in App Home keep their current styles until you choose to move to Polaris 2.0. What merchants will see A new look across every page: new color, type, spacing, and icons, inside a new frame Search, notifications, and the store picker now in the side navigation,
The metafieldsSet mutation now uses dynamic complexity costing. Instead of a flat cost for every call, a request's cost reflects how many distinct resources metafields were changed. Most apps need no changes, as updating a single resource remains cheap. Apps setting many metafields across many different owners may hit their rate limit faster. Apps are encouraged to batch metafield writes by distinct resource. What changed Previously, every metafieldsSet call cost a flat 10 points , regardless of
Shopify Functions can now read metafields attached to delivery options in the cart. On API version 2026-10 , you can call metafield(namespace:, key:) on any option in cart.deliveryGroups.deliveryOptions . This affects apps that build Delivery Customization Functions and any other function whose input includes delivery options. No action is required. What changed In the Functions cart graph, CartDeliveryOption now includes a metafield field: metafield(namespace: String, key: String!): Metafield T
<p>v24.5.0</p> <h3>🎉 New features</h3> <ul> <li>[build-tools] Let connected sandboxes run shell commands through the Expo MCP server. (<a href="https://github.com/expo/eas-cli/pull/4347" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4347/hovercard">#4347</a> by <a href="https://github.com/sjchmiela">@sjchmiela</a>)</li> </ul>
<p>v24.4.2</p> <h3>🐛 Bug fixes</h3> <ul> <li>[eas-cli] Support Xcode 27, which replaces Simulator.app with Device Hub, in <code>build:dev</code>, <code>build:run</code>, and <code>run</code> for iOS simulator builds. (<a href="https://github.com/expo/eas-cli/pull/4405" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4405/hovercard">#4405</a> by <a href="https://github.com/brentvatne">@brentvatne</a>)</li> </ul>
<p>v24.4.1</p> <h3>🧹 Chores</h3> <ul> <li>[eas-cli] Bump <code>@expo/apple-utils</code> to <code>2.2.1</code>. (<a href="https://github.com/expo/eas-cli/pull/4404" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4404/hovercard">#4404</a> by <a href="https://github.com/brentvatne">@brentvatne</a>)</li> </ul>
<p>v24.4.0</p> <h3>🛠 Breaking changes</h3> <ul> <li>[eas-cli] Require Node <code>^20.18.3 || >=22.0.0</code>. (<a href="https://github.com/expo/eas-cli/pull/4279" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4279/hovercard">#4279</a> by <a href="https://github.com/ramonclaudio">@ramonclaudio</a>)</li> </ul> <h3>🎉 New features</h3> <ul> <li>[build-tools] Inject a guard into every iOS Simulator process during <code>--egress local</code> sessions that refuses connecti
<p>v24.3.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-build-job] Add a shared protocol for sandbox daemon commands. (<a href="https://github.com/expo/eas-cli/pull/4346" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4346/hovercard">#4346</a> by <a href="https://github.com/sjchmiela">@sjchmiela</a>)</li> </ul>
<p>v24.2.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-build-job] Remove repository URLs from Git job inputs and fetch them when resolving project sources. (<a href="https://github.com/expo/eas-cli/pull/4360" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4360/hovercard">#4360</a> by <a href="https://github.com/sjchmiela">@sjchmiela</a>)</li> <li>[eas-cli] Add <code>eas workflow:insights</code> to display Workflows Insights for a time range: run counts and success rate
<p>v24.1.2</p> <h3>🐛 Bug fixes</h3> <ul> <li>[eas-cli] Shorten the local egress banner printed by <code>eas simulator:start</code> and stop mentioning <code>eas simulator:egress</code> in interactive mode, where the client runs in the same terminal. (<a href="https://github.com/expo/eas-cli/pull/4383" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4383/hovercard">#4383</a> by <a href="https://github.com/brentvatne">@brentvatne</a>)</li> </ul>
<p>v24.1.1</p> <h3>🐛 Bug fixes</h3> <ul> <li>[eas-cli] Stop telling interactive <code>eas simulator:start --egress local</code> users to run <code>eas simulator:egress</code> when the egress client already runs in the same terminal. (<a href="https://github.com/expo/eas-cli/pull/4382" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4382/hovercard">#4382</a> by <a href="https://github.com/brentvatne">@brentvatne</a>)</li> </ul>
<p>v24.1.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-cli] Add <code>--egress-allow <host:port></code> to <code>eas simulator:start</code> so local egress sessions can reach dev servers on this machine or its network. (<a href="https://github.com/expo/eas-cli/pull/4369" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4369/hovercard">#4369</a> by <a href="https://github.com/brentvatne">@brentvatne</a>)</li> <li>[eas-cli][build-tools] Forward <code>--egress-allow localhos
The Discounts Allocator Function API, available only through the Discounts Allocator developer preview, has been removed and won’t be released. The developer preview is closed. Most developers don’t need to take action. The one exception is an app that still declares the purchase.discounts-allocator.run extension target. What changed The Discounts Allocator Function API let an app control how discounts were allocated across cart lines. Since the preview opened, native control over how discounts
<p>v24.0.0</p> <h3>🛠 Breaking changes</h3> <ul> <li>[eas-cli] Align the <code>eas observe:*</code> commands with the renamed Observe GraphQL schema. <code>--json</code> output now uses <code>name</code>/<code>value</code> instead of <code>metricName</code>/<code>metricValue</code> (metrics) and <code>name</code> instead of <code>eventName</code> (log events and event-name summaries), and <code>eas observe:events</code> now lists user-defined events only — exceptions moved to the new <code>eas o
<p>Self-hosted Supabase v0.8.1: PgBouncer override option and version bumps</p>
Shopify CLI 4.8 adds shopify store commands that let you create and manage dev stores from your terminal or coding agent. These commands are available after you update to Shopify CLI 4.8. What changed You can now use the following commands to manage dev stores in your Dev Dashboard organization: shopify store create dev creates dev stores in your organization for building and testing apps, themes, and Shopify features. shopify store delete deletes dev stores when run by a store owner, organizati
Merchants often sell the same variant under more than one identifier: a manufacturer UPC alongside a private-label EAN, a GTIN, a reissued ISBN, or an ASIN for a marketplace listing. Until now a variant held a single barcode value, so the extras ended up in metafields, tags, or outside Shopify entirely. What's new You can now read a variant's full set from the new barcodes connection on ProductVariant, and write it with the barcodes input on the productSet mutation , productVariantsBulkCreate mu
Starting with Customer Account API version 2026-10, customer address inputs and objects support countryCode . The existing territoryCode field is deprecated but remains fully supported, so current integrations continue working without interruption. Developers should migrate to countryCode when adopting API version 2026-10. What changed The CustomerAddressInput input object and CustomerAddress object now include countryCode . Use countryCode when creating, updating, or reading a customer address.
Shopify storefronts now advertise support for Universal Commerce Protocol (UCP) version 2026-08-25 in their discovery profiles at /.well-known/ucp . This update adds compatibility with the 2026-08-25 protocol release and doesn’t require any changes to your existing integrations. What changed Storefront discovery profiles now declare UCP version 2026-08-25 as a supported protocol version in /.well-known/ucp . Platforms and agents that speak UCP can use a compatible 2026-08-25 profile to negotiate
You can now use the paymentInstrumentSendAddEmail mutation in the GraphQL Admin API to email a customer a link for adding a payment method to a specific resource (for example, a subscription contract). This lets you collect payment details directly from the customer rather than needing them up front, and the link scopes the customer to that specific resource, so they don't need to sign in to their account. The mutation is available as of API version 2026-10. This is an additive change, so existi
The Hydrogen developer preview adds new capabilities to the toolkit and extends the ways developers can build Shopify storefronts: Variant links: Links that name a variant, like the ones Shopify submits to a Google Shopping feed, now open on that variant instead of the product's default. Cart refresh: Reload the cart after your own code changes it, like a cart created on your server. Local HTTPS certificates: Hydrogen creates the certificates for Customer Account testing, so local login setup ta
<p>v23.2.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-cli] Add <code>--tag</code> to <code>eas simulator</code> and <code>eas simulator:list</code> to group and filter simulator sessions by app variant. (<a href="https://github.com/expo/eas-cli/pull/4318" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4318/hovercard">#4318</a> by <a href="https://github.com/tchayen">@tchayen</a>)</li> <li>[eas-cli] Update workflow run logs in real time, instead of every 10 seconds. (<a
Polaris Web Components loaded from the Shopify CDN are moving to semantic versioning, read more about that change here . You can test out the Polaris CDN 1.1 release candidate by updating the URL you load polaris from to this: <script src="https://cdn.shopify.com/shopifycloud/polaris-1.1-rc.js"></script> New components EmptyState . For empty lists, tables, and pages. Inside a TableBody it renders as a full-width message beneath the table headers. Number . Inline numeric text with tabular figures
Polaris Web Components loaded from the Shopify CDN are moving to semantic versioning. Most apps will continue receiving compatible improvements automatically, while developers can choose when to adopt breaking changes. Existing apps don’t need to take immediate action. What changed Polaris CDN releases now follow familiar semantic versioning rules: Major releases may contain breaking API or behavioral changes that require app updates. Minor releases contain compatible components, APIs, bug fixes
<p>v23.1.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-cli] Prompt for the Expo SDK version in <code>eas new</code> and add a <code>--sdk-version</code> flag. The template now downloads from npm instead of GitHub to support SDK-specific versions. (<a href="https://github.com/expo/eas-cli/pull/4301" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4301/hovercard">#4301</a> by <a href="https://github.com/brentvatne">@brentvatne</a>)</li> <li>[eas-cli] Clean up template meta
Expiring offline access token refreshes now retain the previously used refresh token until an app begins using its replacement. This rollout helps apps recover when a refresh response is lost or isn’t persisted. No migration is required, but apps should continue to store every refreshed token pair atomically. What changed Previously, after an app used a refresh token, it could retry that token for up to 60 minutes. If the app didn’t receive or save the newly returned access token and refresh tok
Starting October 1, 2026, Theme commands on Shopify CLI for password protected storefronts will require version 3.84.0 or later . Versions 3.83.x and earlier will no longer be supported for theme development workflows on password protected storefronts. If you use Theme commands on Shopify CLI to develop or preview themes, upgrade to the latest version before October 1, 2026. Alternatively, you can remove the password protection on your storefront to continue using your preferred CLI version. Wha
<p>v22.6.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-cli] Add an opt-in <code>--max-idle-time-minutes</code> flag to <code>eas simulator</code>; the session stops automatically after that many minutes without activity. (<a href="https://github.com/expo/eas-cli/pull/4156" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4156/hovercard">#4156</a> by <a href="https://github.com/szdziedzic">@szdziedzic</a>)</li> <li>[eas-cli] Add experimental <code>--resource-class</code> f
Apps can now subscribe to events for Metaobject , MetafieldDefinition , MetaobjectDefinition , and InventoryTransfer . Apps can also subscribe to targeted metafield changes on InventoryTransfer . By subscribing to these topics, your app can react directly to changes in custom content, custom data definitions, and inventory transfer workflows. Apps can target the fields that matter in triggers, query the resource that changed, and avoid subscribing to broader updates just to diff payloads in thei
Shopify releases official PHP and Python app packages Shopify now publishes official, open-source packages for building apps in PHP and Python. shopify/shopify-app-php on Packagist and shopifyapp on PyPI have reached version 1.0 . They provide framework-agnostic primitives for request verification, token exchange, and Admin GraphQL requests. If you build apps in PHP or Python, you can adopt them today. What changed Two new packages are generally available: composer require shopify/shopify-app-ph
When you edit a theme in the Shopify admin, the commit Shopify pushes to your connected branch now includes the editor's name in the body: Update from Shopify for theme Dawn Committed from shop: Snowdevil Theme last edited by: Bob Bobsen The name is plain text in the commit body. The commit author is still the shopify bot, so git blame and the commit avatar don't change. Edits saved within about 10 seconds of each other are batched into one commit, and the body names whoever saved last. If the t
You can now deploy Hydrogen storefronts to Oxygen from trial plan stores . Previously, Oxygen hosting required a paid plan. Note that trial plan stores don't include public environments, so deployment URLs always require a store login. Learn more about supported plans .
Starting October 1, 2026, the scriptTagCreate and scriptTagUpdate mutations will return an user error, and the ScriptTag REST Admin API resource will reject POST and PUT . The deprecation applies to all API versions, including older ones, so pinning won't defer it. On March 1, 2027, Shopify will stop injecting script tags into storefronts. Storefronts are the last place script tags still run, since they already stopped working on the Order status page . If your app uses a script tag to load Java
<p>v22.2.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-cli] Add <code>--device</code> flag to <code>eas simulator</code> for selecting the virtual device to start. (<a href="https://github.com/expo/eas-cli/pull/4172" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4172/hovercard">#4172</a> by <a href="https://github.com/szdziedzic">@szdziedzic</a>)</li> <li>[eas-cli] Add support for Appium EAS Simulator sessions. (<a href="https://github.com/expo/eas-cli/pull/4190" data-
When Sidekick invokes an app intent declared on the admin.app.intent.link extension target, the Shopify admin now navigates the merchant to your extension's url as a full page, matching how Shopify's own admin intents behave. Previously, the same intent always opened in an overlay on top of the page the merchant was already on. This is live for all shops, isn't gated by API version, and doesn't require any changes to your extension's configuration, intent schema, or tools. Extensions that use th
The Hydrogen developer preview adds new capabilities to the toolkit and extends the ways developers can build Shopify storefronts: Cart session attribution: Carts and Customer Account sessions stay in step, so signed-in shoppers reach checkout with their saved details instead of a guest flow. Cart attributes: Attach order-wide data like gift messages to the cart, and per-line data like engraving text to the lines it belongs to. Standard page view events: Hydrogen storefronts used to report only
<p>v22.0.0</p> <h3>🛠 Breaking changes</h3> <ul> <li>[eas-cli] Build objects in <code>--json</code> output (<code>eas build</code>, <code>eas build:list</code>, <code>eas build:view</code>, <code>eas build:resign</code>) now have <code>app</code>, <code>updateChannel</code> (object with <code>id</code> and <code>name</code>), and <code>runtime</code> (object with <code>id</code> and <code>version</code>) instead of <code>project</code>, <code>channel</code>, and <code>runtimeVersion</code>. <cod
<h2>What’s changed</h2> <h3>API request types</h3> <ul> <li><strong><code>does_not_equal</code> condition on verification property filters</strong> (<a href="https://github.com/makenotion/notion-sdk-js/pull/766" data-hovercard-type="pull_request" data-hovercard-url="/makenotion/notion-sdk-js/pull/766/hovercard">#766</a>) <ul> <li>The <code>verification</code> property filter in data source and database queries now accepts <code>{ does_not_equal: "verified" | "expired" | "none" }</code> alongside
<h2>What’s changed</h2> <h3>Fixes</h3> <ul> <li><strong><code>isFullDataSource</code> and <code>isFullDatabase</code> no longer accept partial responses</strong> (<a href="https://github.com/makenotion/notion-sdk-js/pull/764" data-hovercard-type="pull_request" data-hovercard-url="/makenotion/notion-sdk-js/pull/764/hovercard">#764</a>) <ul> <li>Both guards only checked <code>response.object</code>, so a partial data source or database object passed the guard and was incorrectly narrowed to the fu
<h2>What’s changed</h2> <h3>New capabilities</h3> <ul> <li><strong>Filter properties on page writes</strong> (<a href="https://github.com/makenotion/notion-sdk-js/pull/761" data-hovercard-type="pull_request" data-hovercard-url="/makenotion/notion-sdk-js/pull/761/hovercard">#761</a>) <ul> <li><code>client.pages.create()</code> and <code>client.pages.update()</code> now accept the same <code>filter_properties</code> parameter as <code>client.pages.retrieve()</code>, letting you bound which propert
<p>v21.8.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-cli] Add Supabase integration foundation: GraphQL client, shared integration helpers, and provisioning utilities. (<a href="https://github.com/expo/eas-cli/pull/4130" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4130/hovercard">#4130</a> by <a href="https://github.com/gwdp">@gwdp</a>)</li> <li>[eas-cli] Add <code>eas integrations:supabase:connect</code> command. (<a href="https://github.com/expo/eas-cli/pull/4106"
<p>Self-hosted Supabase v0.8.0: Envoy is the default API gateway (breaki…</p>
The shop_campaign_insights schema is now available in the ShopifyQL . Analytics and reporting apps can query Shop Campaigns performance data on behalf of authorized merchants using the existing shopifyqlQuery field with read_reports scope. Available data Campaign-level and segment-level metrics including ad spend, sales, orders, ROAS, average order value, and average customer acquisition cost. Data is available by campaign name, customer segment, and time dimensions from hourly to yearly in the
<p>Here’s everything that happened with Supabase in the last month:</p> <h2>Supabase Select SF 2026</h2> <a target="_blank" rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/30495040/632973591-45a7d284-e240-424f-ae78-3c5f301be89a.gif?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODYxMjU5MzAsIm5iZiI6MTc4NjEyNTYzMCwicGF0aCI6Ii8zMDQ5NTA0MC82MzI5NzM1OTEtNDVhN2QyODQtZTI0MC00M
<p>v21.7.0</p> <h3>🎉 New features</h3> <ul> <li>[build-tools] Label serve-sim metrics artifacts with the sim's device name (from the metrics meta) instead of the raw udid. (<a href="https://github.com/expo/eas-cli/pull/4127" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4127/hovercard">#4127</a> by <a href="https://github.com/gwdp">@gwdp</a>)</li> <li>[build-tools] Set the artifact kind for Argent session artifacts from the MIME type reported by the tool server, so s
The updateCart standard action now updates cart attributes, and a new shopify:cart:attributes-update event fires whenever an attributes update is initiated. Before this, changing an attribute meant calling the Storefront API yourself, and nothing told your app when one changed. The action now handles attributes like any other cart update, and the event fires whether your app, the theme, or another app made the change. It carries the full new set of attributes and a promise for the result, so you
<p>v21.6.0</p> <h3>🎉 New features</h3> <ul> <li>[eas-build-job] Replace eas-cli npm dist-tags with cli-versions.json. (<a href="https://github.com/expo/eas-cli/pull/4147" data-hovercard-type="pull_request" data-hovercard-url="/expo/eas-cli/pull/4147/hovercard">#4147</a> by <a href="https://github.com/douglowder">@douglowder</a>)</li> <li>[eas-cli] Make <code>eas simulator</code> the canonical command and keep <code>eas simulator:start</code> as an alias. (<a href="https://github.com/expo/eas-cl
<h2>What’s changed</h2> <h3>New capabilities</h3> <ul> <li><strong>Create meeting notes</strong> (<a href="https://github.com/makenotion/notion-sdk-js/pull/753" data-hovercard-type="pull_request" data-hovercard-url="/makenotion/notion-sdk-js/pull/753/hovercard">#753</a>) <ul> <li>Use <code>client.blocks.meetingNotes.create()</code> with a file upload or an existing audio, video, or file block. Generated request types require <code>parent</code> only for file-upload sources.</li> </ul> </li> </ul