Skip to main content

Migrate to the Polaris icon component

The Polaris icon component displays small visual indicators and symbols. It replaces the previous Icon component and is available as <s-icon> in API versions 2025-10 and newer.


The following properties are different in the Polaris icon component.

The previous Icon source prop is now called type. Icon names have changed from camelCase to kebab-case, and some icons are renamed.

Previous iconNew iconNotes
'arrowDown''arrow-down'
'arrowLeft''arrow-left'
'arrowRight''arrow-right'
'arrowUp''arrow-up'
'arrowUpRight''arrow-up-right'
'bag''bag'
'bullet''bullet'
'calendar''calendar'
'camera''camera'
'caretDown''caret-down'
'cart''cart'
'cashDollar''cash-dollar'
'categories''categories'
'checkmark''check'Renamed.
'chevronDown''chevron-down'
'chevronLeft''chevron-left'
'chevronRight''chevron-right'
'chevronUp''chevron-up'
'clipboard''clipboard'
'clock''clock'
'close''x'Renamed.
'creditCard''credit-card'
'critical''alert-circle'Renamed.
'delete''delete'
'delivered''delivered'
'delivery''delivery'
'disabled''disabled'
'discount''discount'
'email''email'
'error''x-circle'Renamed.
'errorFill''x-circle-filled'Renamed.
'external''external'
'filter''filter'
'geolocation''geolocation'
'gift''gift-card'Renamed.
'giftFill''gift-card'No filled variant; maps to the same value as 'gift'.
'grid''grid'
'hamburger''menu'Renamed.
'hollowCircle''circle'Renamed.
'horizontalDots''menu-horizontal'Renamed.
'image''image'
'info''info'
'infoFill''info-filled'
'list''list-bulleted'Renamed.
'lock''lock'
'magnify''search'Renamed.
'map''map'
'marker''location'Renamed.
'minus''minus'
'mobile''mobile'
'note''note'
'orderBox''order'Renamed.
'pen''edit'Renamed.
'plus''plus'
'profile''profile'
'question''question-circle'Renamed.
'questionFill''question-circle-filled'Renamed.
'reorder''reorder'
'reset''reset'
'return''return'
'savings''savings'
'settings''settings'
'star''star'
'starFill''star-filled'
'starHalf''star-half'
'store''store'
'success''check-circle'Renamed.
'truck''truck'
'upload''upload'
'verticalDots''menu-vertical'Renamed.
'warning''alert-triangle'Renamed.
'warningFill''alert-triangle-filled'Renamed.

Migrating source to type

import '@shopify/ui-extensions/preact';
import {render} from 'preact';

export default function extension() {
render(<Extension />, document.body);
}

function Extension() {
return (
<>
<s-icon type="check" />
<s-icon type="arrow-left" />
</>
);
}
import {
reactExtension,
Icon,
} from '@shopify/ui-extensions-react/checkout';

export default reactExtension(
'purchase.checkout.block.render',
() => <Extension />,
);

function Extension() {
return (
<>
<Icon source="checkmark" />
<Icon source="arrowLeft" />
</>
);
}

The previous Icon appearance prop is now called tone.

Previous valueNew valueMigration notes
'base'RemovedNo direct replacement. 'auto' adapts to the context where the icon is rendered.
'subdued'RemovedNo direct replacement. 'auto' adapts to the context where the icon is rendered.
'info''info'No change needed.
'success''success'No change needed.
'warning''warning'No change needed.
'critical''critical'No change needed.
'decorative''custom'Use tone="custom".
'interactive'RemovedNo direct replacement. 'auto' adapts to the context where the icon is rendered.
'accent'RemovedNo direct replacement. 'auto' adapts to the context where the icon is rendered.

Migrating appearance to tone

import '@shopify/ui-extensions/preact';
import {render} from 'preact';

export default function extension() {
render(<Extension />, document.body);
}

function Extension() {
return <s-icon type="check" tone="success" />;
}
import {
reactExtension,
Icon,
} from '@shopify/ui-extensions-react/checkout';

export default reactExtension(
'purchase.checkout.block.render',
() => <Extension />,
);

function Extension() {
return <Icon source="checkmark" appearance="success" />;
}

The size prop values have changed.

Previous valueNew valueMigration notes
'extraSmall''small-200'Renamed.
'small''small' or 'small-100''small' is an alias for 'small-100'.
'base''base'No change needed.
'large''large' or 'large-100''large' is an alias for 'large-100'.
'fill'RemovedNo equivalent in the Polaris icon component.

For more on the scale system, see Scale.


The Polaris icon component no longer supports accessibilityLabel directly. To provide a screen-reader label, render a <s-text accessibilityVisibility="exclusive"> next to the icon.

Migrating accessibilityLabel

import '@shopify/ui-extensions/preact';
import {render} from 'preact';

export default function extension() {
render(<Extension />, document.body);
}

function Extension() {
return (
<>
<s-text accessibilityVisibility="exclusive">
More information
</s-text>
<s-icon type="info" />
</>
);
}
import {
reactExtension,
Icon,
} from '@shopify/ui-extensions-react/checkout';

export default reactExtension(
'purchase.checkout.block.render',
() => <Extension />,
);

function Extension() {
return <Icon source="info" accessibilityLabel="More information" />;
}

Was this page helpful?