--- title: Migrate SkeletonImage description: >- Learn about the removal of the SkeletonImage component in checkout and customer account UI extensions. source_url: html: >- https://shopify.dev/docs/apps/build/checkout/migrate-to-web-components/skeleton-image md: >- https://shopify.dev/docs/apps/build/checkout/migrate-to-web-components/skeleton-image.md --- # Migrate SkeletonImage The `SkeletonImage` component has been removed and does not have a direct replacement in Polaris web components. The previous [`SkeletonImage`](https://shopify.dev/docs/api/checkout-ui-extensions/2025-07/ui-components/feedback-and-status-indicators/skeletonimage) component is no longer available in API versions 2025-10 and newer. *** ## Migration options If you were using `SkeletonImage` as a placeholder while images load, consider the following alternatives: ### Use the Image component directly The [``](https://shopify.dev/docs/api/checkout-ui-extensions/latest/web-components/media/image) component handles its own loading state. Render `` directly; it shows its own placeholder while the source resolves. ## Replacing SkeletonImage with the Image component ##### Latest (Preact) ```tsx import '@shopify/ui-extensions/preact'; import {render} from 'preact'; export default function extension() { render(, document.body); } function Extension() { const imageUrl = useImageUrl(); return ( ); } ``` ##### Pre-Polaris (2025-07) ```tsx import { reactExtension, SkeletonImage, Image, } from '@shopify/ui-extensions-react/checkout'; export default reactExtension( 'purchase.checkout.block.render', () => , ); function Extension() { const imageUrl = useImageUrl(); if (!imageUrl) { return ; } return ; } ``` *** ## Updated patterns Before looking for a skeleton replacement, consider whether you still need one: * **Automatic skeletons**: Shopify now automatically displays skeleton loading states when your app extension is loading. These provide a generic placeholder that roughly matches the size of your extension, so you might not need to manage skeletons manually. * **Let `` handle its own loading**: The component displays a placeholder while the source resolves, so you rarely need a separate skeleton. * **Skeleton only the loading content**: Skeleton only the piece of content that's loading, not the entire UI. ***