---
title: >-
  Publish and unpublish product variants independently from product - Shopify
  developer changelog
description: >-
  Shopify’s developer changelog documents all changes to Shopify’s platform.
  Find the latest news and learn about new platform opportunities.
source_url:
  html: >-
    https://shopify.dev/changelog/publish-and-unpublish-product-variants-independently-from-product
  md: >-
    https://shopify.dev/changelog/publish-and-unpublish-product-variants-independently-from-product.md
metadata:
  effectiveApiVersion: 2026-07
  affectedApi:
    - displayName: Admin GraphQL API
      handle: admin-graphql
    - displayName: Storefront GraphQL API
      handle: storefront-graphql
  primaryTag:
    displayName: API
    handle: api
  secondaryTag:
    displayName: New
    handle: new
  indicatesActionRequired: false
  createdAt: '2026-05-06T19:54:44-04:00'
  postedAt: '2026-05-07T13:00:00-04:00'
  updatedAt: '2026-05-07T13:14:08-04:00'
  effectiveAt: '2026-05-07T12:00:00-04:00'
---

May 7, 2026

Tags:

* Admin GraphQL API
* Storefront GraphQL API
* 2026-07

# 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 →](https://shopify.dev/docs/apps/build/sales-channels/product-publishing#variant-level-publishing)
