releases.shpreview
Shopify/Developer Changelog/Publish and unpublish product variants independently from product

Publish and unpublish product variants independently from product

ProductVariant is now a Publishable. Variants can be published or unpublished per publication (channel or catalog) in API version 2026-07, giving merchants — and your apps — fine-grained control over where each variant is visible without deleting variants, duplicating products, or hiding them via storefront code.

This is a non-breaking, additive change:

  • Product-level publishing is unchanged and still takes precedence. A product must be active and published to a channel for any of its variants to render there.
  • Variants default to published (opt-out model). Existing apps that publish at the product level continue to work without modification.
  • Variants can be created in an unpublished state in order to prevent early exposure to buyers.

What's new in the Admin GraphQL API

  • publishablePublish and publishableUnpublish now accept ProductVariant IDs.
  • ProductVariant now adheres to the Publishable interface, similar to Product and Collection, which includes resourcePublicationv2 and publishedOnPublication
  • Product feed webhooks fire with a product update for variant added and deleted when variants are published to the feed’s channel.
  • variant_publication/create/update/delete webhooks are still under development and will be shipped imminently.

What this means for your app

  • Channel apps using product feeds should not require any changes to work - the product feed adds and removes variants to the product and an incremental sync webhook is triggered.
  • Channels or pseudo channels that do not use product feeds and rely on reading publication state via the admin graphql API should implement support by reading the respective publication state of variants via ProductVariant.resourcePublicationsv2.
  • Apps that create variants after product publication occurs: new variants default to published in all of the parent product's publications. If your app plans to create variants in an unpublished state, productSet and productVariantBulkCreate both include a variant.published: false field to create variants as unpublished.
  • Apps that publish products: no changes required. Continue calling publishablePublish on products as before. Consider implementing variant publishing support if unpublishing variants is relevant to your apps workflows.

Read the developer guide →

Fetched May 26, 2026