diff --git a/UNRELEASED.md b/UNRELEASED.md
index 35dcf24e3c1..7407d8f67c8 100644
--- a/UNRELEASED.md
+++ b/UNRELEASED.md
@@ -8,6 +8,8 @@ Use [the changelog guidelines](https://git.io/polaris-changelog-guidelines) to f
### New components
+- `SkeletonThumbnail` for representing thumbnails in loading state
+
### Enhancements
- Updates `TopBar.UserMenu` interaction states styling ([#1006](https://github.com/Shopify/polaris-react/pull/1006))
diff --git a/src/components/SkeletonThumbnail/README.md b/src/components/SkeletonThumbnail/README.md
new file mode 100644
index 00000000000..f30bba5a7fb
--- /dev/null
+++ b/src/components/SkeletonThumbnail/README.md
@@ -0,0 +1,56 @@
+---
+name: Skeleton thumbnail
+category: Feedback indicators
+releasedIn: 3.7.2
+keywords:
+ - SkeletonThumbnail
+ - skeleton
+ - loading
+ - page
+---
+
+# Skeleton image
+
+Skeleton thumbnail is used to provide a low fidelity representation of an image before it appears on the page, and improves load times perceived by merchants. Use for thumbnails in or outside of a card.
+
+---
+
+## Best practices
+
+Skeleton thumbnail component should:
+
+- Try to match the size of the thumbnail to the content being loaded so it gives an accurate representation.
+
+---
+
+## Examples
+
+### Medium thumbnail
+
+Use this component to represent medium thumbnails.
+
+```jsx
+
+```
+
+### Large thumbnail
+
+Use this component to represent large thumbnails.
+
+```jsx
+
+```
+
+### Small thumbnail
+
+Use this component to represent small thumbnails.
+
+```jsx
+
+```
+
+---
+
+## Related components
+
+- Use this component with [Skeleton display text](/components/feedback-indicators/skeleton-display-text) to represent the content of a card while it’s loading.
diff --git a/src/components/SkeletonThumbnail/SkeletonThumbnail.scss b/src/components/SkeletonThumbnail/SkeletonThumbnail.scss
new file mode 100644
index 00000000000..d5feaccbe63
--- /dev/null
+++ b/src/components/SkeletonThumbnail/SkeletonThumbnail.scss
@@ -0,0 +1,21 @@
+@mixin skeleton-thumbnail-size($size) {
+ height: $size;
+ width: $size;
+}
+
+.SkeletonThumbnail {
+ @include skeleton-shimmer;
+ @include skeleton-content;
+}
+
+.sizeSmall {
+ @include skeleton-thumbnail-size(rem(30px));
+}
+
+.sizeMedium {
+ @include skeleton-thumbnail-size(rem(40px));
+}
+
+.sizeLarge {
+ @include skeleton-thumbnail-size(rem(50px));
+}
diff --git a/src/components/SkeletonThumbnail/SkeletonThumbnail.tsx b/src/components/SkeletonThumbnail/SkeletonThumbnail.tsx
new file mode 100644
index 00000000000..0f5dbb74309
--- /dev/null
+++ b/src/components/SkeletonThumbnail/SkeletonThumbnail.tsx
@@ -0,0 +1,22 @@
+import * as React from 'react';
+import {classNames, variationName} from '@shopify/react-utilities/styles';
+import styles from './SkeletonThumbnail.scss';
+
+export type Size = 'small' | 'medium' | 'large';
+
+export interface Props {
+ /**
+ * Size of the thumbnail
+ * @default 'medium'
+ */
+ size?: Size;
+}
+
+export default function SkeletonThumbnail({size = 'medium'}: Props) {
+ const className = classNames(
+ styles.SkeletonThumbnail,
+ size && styles[variationName('size', size)],
+ );
+
+ return
;
+}
diff --git a/src/components/SkeletonThumbnail/index.ts b/src/components/SkeletonThumbnail/index.ts
new file mode 100644
index 00000000000..f638a10b69a
--- /dev/null
+++ b/src/components/SkeletonThumbnail/index.ts
@@ -0,0 +1,4 @@
+import SkeletonThumbnail from './SkeletonThumbnail';
+
+export {Props} from './SkeletonThumbnail';
+export default SkeletonThumbnail;
diff --git a/src/components/SkeletonThumbnail/tests/SkeletonThumbnail.test.tsx b/src/components/SkeletonThumbnail/tests/SkeletonThumbnail.test.tsx
new file mode 100644
index 00000000000..cf618a41d44
--- /dev/null
+++ b/src/components/SkeletonThumbnail/tests/SkeletonThumbnail.test.tsx
@@ -0,0 +1,10 @@
+import * as React from 'react';
+import {mountWithAppProvider} from 'test-utilities';
+import SkeletonThumbnail from '../SkeletonThumbnail';
+
+describe('', () => {
+ it('renders', () => {
+ const skeletonThumbnail = mountWithAppProvider();
+ expect(skeletonThumbnail.exists()).toBe(true);
+ });
+});
diff --git a/src/components/index.ts b/src/components/index.ts
index 0429461eca7..d1475f93140 100644
--- a/src/components/index.ts
+++ b/src/components/index.ts
@@ -294,6 +294,11 @@ export {
Props as SkeletonDisplayTextProps,
} from './SkeletonDisplayText';
+export {
+ default as SkeletonThumbnail,
+ Props as SkeletonThumbnailProps,
+} from './SkeletonThumbnail';
+
export {default as ProgressBar, Props as ProgressBarProps} from './ProgressBar';
export {default as Indicator, Props as IndicatorProps} from './Indicator';