Skip to main content

Shop Minis March April 2026 update

New Features

Optional Consent

Users can now reject scopes and continue using your Mini. Consent is no longer all-or-nothing — if a user declines a scope, your Mini should gracefully degrade rather than block the experience. If your Mini hard-fails when a scope is rejected, please update it using the new hooks below.

useCheckScopesConsent Hook

Check at runtime which scopes a user has granted. Use this to conditionally render features that depend on a particular scope.

Usage:

import {useCheckScopesConsent} from '@shopify/shop-minis-react'

function MyMini() {
const {scopes} = useCheckScopesConsent()

if (scopes.includes('product_lists:write')) {
return <SaveToListButton />
}
return <SignInPrompt />
}

useRequestScopesConsent Hook

Re-request consent after a user has previously declined. The hook must be invoked from a user interaction — you cannot re-prompt automatically. Use this for flows where granting consent unlocks a clear, user-initiated action.

Usage:

import {useRequestScopesConsent} from '@shopify/shop-minis-react'

function GrantAccessButton() {
const {requestScopesConsent} = useRequestScopesConsent()

return (
<button onClick={() => requestScopesConsent(['product_lists:write'])}>
Enable saving products
</button>
)
}

useCheckPermissions Hook

Separate from scopes, useCheckPermissions lets your Mini check OS-level permissions (camera, photo library, and so on) before invoking an action that requires them.

Usage:

import {useCheckPermissions} from '@shopify/shop-minis-react'

function CameraFeature() {
const {permissions} = useCheckPermissions(['camera'])

if (permissions.camera === 'granted') {
return <CameraView />
}
return <RequestCameraButton />
}

request_blocked Sentinel

When a user has declined a scope or permission and the platform will not re-prompt, the relevant hooks now return a request_blocked sentinel value instead of null. This lets you distinguish "not asked yet" from "asked and blocked" and tailor your UI accordingly. See the Scopes Consent docs on shopify.dev for the full state machine.

Intents

Intents are a new communication layer between the Shop app and Shop Minis. The Shop app launches your Mini from contextually relevant moments — such as a product detail page — and passes along the context (typically a product). For partners, this opens a new path to distribution: instead of relying on the Explore tab alone, your Mini can be surfaced where buyer intent is highest.

Two intents are supported today:

IntentWhat it's for
try_onVirtual try-on Minis — clothing, accessories, anything wearable
view_inAR and room-placement Minis — furniture, decor, anything you'd visualize in a space

If your Mini fits one of the supported intents, or you have a different use case in mind (recipe building, gift finding, custom configurations, and so on), reach out to the Shop Minis team — we're onboarding partners now and actively scoping new intents.

useIntent Hook

Parse the intent that launched your Mini. Use this to read the context the Shop app passed in and route the user to the right experience.

Usage:

import {useIntent} from '@shopify/shop-minis-react'

function MyMini() {
const intent = useIntent()

if (intent?.action === 'try_on') {
return <TryOn productId={intent.productId} />
}
return <DefaultExperience />
}

Async Storage Limits

To keep Minis fast, we're introducing limits on useAsyncStorage and useSecureStorage:

  • 10 keys max per Mini
  • 1 MB per key

Most Minis are well under both limits. Async storage is intended for small structured data — if you're persisting larger assets like images, use a dedicated upload hook and store the resulting URL instead of the raw bytes.

availableForSale on Product Hooks

Product hooks now expose availableForSale on variants, and the SDK's commerce buttons (AddToCartButton, BuyNowButton) handle the out-of-stock state out of the box. If you render product cards or build a custom commerce flow, check availableForSale before letting users add to cart.

pnpm Support in the CLI

npx minis create now detects and supports pnpm alongside npm and yarn.

Usage:

npx minis create
# Select pnpm when prompted

Documentation Updates

Scopes Consent

The Scopes Consent page on shopify.dev has been updated to reflect optional consent. It now documents the full state machine (granted, declined, request_blocked) and includes guidance for the new useCheckScopesConsent, useRequestScopesConsent, and useCheckPermissions hooks.

Intents

A new documentation page covers intents end-to-end: what they are, which intents are supported today (try_on, view_in), the launch-context contract, and how to parse the intent in your Mini with the useIntent hook.


Deprecations

localStorage and sessionStorage

Browser storage is no longer permitted inside the Mini webview — it's disabled on Android and reset between sessions on iOS. The Shop Minis ESLint config now flags any use of localStorage or sessionStorage. Migrate to useAsyncStorage (persistent) or useSecureStorage (encrypted).


Package Versions

PackageVersion
@shopify/shop-minis-platform0.17.0
@shopify/shop-minis-react0.20.0
@shopify/shop-minis-cli0.3.11

Other Changes

  • Phantom dependency imports blocked: The partner ESLint config flags imports of packages not declared in your package.json.
  • Transitive SDK deps allowed: clsx, tailwind-merge, and cva are now explicitly available for partner use.
  • TypeScript 6: The SDK is now built against TypeScript 6.0.2 (up from 5.8.3).

Summary

March-April 2026 brings significant improvements to the Shop Minis platform:

  1. Optional consent is now the default — three new hooks let your Mini gracefully degrade when scopes are declined.
  2. Intents are a new communication layer for launching your Mini from contextually relevant moments in the Shop app — try_on and view_in supported today.
  3. Async storage limits of 10 keys per Mini, 1 MB per key.
  4. availableForSale on product variants for first-class out-of-stock handling.
  5. localStorage and sessionStorage are no longer permitted in the Mini webview.

For questions or feedback, reach out to the Shop Minis team.

Was this section helpful?