Guide for using Shopify Polaris Icons in Shopify Apps. Covers icon usage patterns, accessibility, tone variants, and common icon categories for commerce applications.
Polaris Icons is Shopify's official icon library with 400+ carefully designed icons focused on commerce and entrepreneurship. These icons are designed to work seamlessly with the Polaris Design System.
npm install @shopify/polaris-icons
# or
yarn add @shopify/polaris-icons
[!NOTE] The
@shopify/polaris-iconspackage is typically installed alongside@shopify/polaris. If you're using Polaris, you likely already have access to these icons.
import { Icon } from '@shopify/polaris';
import { PlusCircleIcon } from '@shopify/polaris-icons';
function MyComponent() {
return <Icon source={PlusCircleIcon} />;
}
When an icon appears without accompanying text, always provide an accessibility label:
import { Icon } from '@shopify/polaris';
import { DeleteIcon } from '@shopify/polaris-icons';
function DeleteButton() {
return (
<button>
<Icon source={DeleteIcon} accessibilityLabel="Delete item" />
</button>
);
}
Use the tone prop to set the icon color semantically:
import { Icon } from '@shopify/polaris';
import { AlertCircleIcon, CheckCircleIcon, InfoIcon } from '@shopify/polaris-icons';
// Available tones
<Icon source={CheckCircleIcon} tone="success" /> // Green - positive actions
<Icon source={AlertCircleIcon} tone="critical" /> // Red - errors, destructive
<Icon source={AlertCircleIcon} tone="warning" /> // Yellow - warnings
<Icon source={AlertCircleIcon} tone="caution" /> // Orange - caution
<Icon source={InfoIcon} tone="info" /> // Blue - information
<Icon source={InfoIcon} tone="base" /> // Default text color
<Icon source={InfoIcon} tone="subdued" /> // Muted/secondary
<Icon source={InfoIcon} tone="interactive" /> // Link/action color
<Icon source={InfoIcon} tone="inherit" /> // Inherit from parent
<Icon source={InfoIcon} tone="magic" /> // AI/Magic features
<Icon source={InfoIcon} tone="emphasis" /> // Emphasized content
<Icon source={InfoIcon} tone="primary" /> // Primary brand color
All icons follow a consistent naming pattern: {Name}Icon
// Examples
import {
HomeIcon, // Navigation
ProductIcon, // Commerce
OrderIcon, // Orders
CustomerIcon, // Customers
SettingsIcon, // Settings
PlusIcon, // Actions
EditIcon, // Actions
DeleteIcon, // Actions
SearchIcon, // Search
FilterIcon, // Filtering
} from '@shopify/polaris-icons';
import {
HomeIcon,
MenuIcon,
ChevronLeftIcon,
ChevronRightIcon,
ChevronUpIcon,
ChevronDownIcon,
ArrowLeftIcon,
ArrowRightIcon,
ExternalIcon,
MaximizeIcon,
MinimizeIcon,
} from '@shopify/polaris-icons';
import {
ProductIcon,
CollectionIcon,
InventoryIcon,
PriceTagIcon, // Renamed from TagIcon
GiftCardIcon,
DiscountIcon,
CartIcon,
CartAbandonedIcon,
StorefrontIcon,
} from '@shopify/polaris-icons';
import {
OrderIcon,
OrderDraftIcon,
OrderFulfilledIcon,
DeliveryIcon,
ShippingLabelIcon,
PackageIcon,
ReturnIcon,
RefundIcon,
} from '@shopify/polaris-icons';
import {
CustomerIcon,
CustomerPlusIcon,
PersonIcon,
PersonAddIcon,
TeamIcon,
ProfileIcon,
} from '@shopify/polaris-icons';
import {
PlusIcon,
PlusCircleIcon,
MinusIcon,
MinusCircleIcon,
EditIcon,
DeleteIcon,
DuplicateIcon,
ArchiveIcon,
SaveIcon,
UndoIcon,
RedoIcon,
RefreshIcon,
ImportIcon,
ExportIcon,
UploadIcon,
DownloadIcon,
} from '@shopify/polaris-icons';
import {
CheckIcon,
CheckCircleIcon,
XIcon,
XCircleIcon,
AlertCircleIcon,
AlertTriangleIcon,
InfoIcon,
QuestionCircleIcon,
ClockIcon,
CalendarIcon,
} from '@shopify/polaris-icons';
import {
EmailIcon,
ChatIcon,
NotificationIcon,
BellIcon,
PhoneIcon,
SendIcon,
NoteIcon,
} from '@shopify/polaris-icons';
import {
SettingsIcon,
ToolsIcon,
KeyIcon,
LockIcon,
UnlockIcon,
EyeIcon,
HideIcon,
FilterIcon,
SortIcon,
SearchIcon,
CodeIcon,
ApiIcon,
} from '@shopify/polaris-icons';
import {
AnalyticsIcon,
ChartVerticalIcon,
ChartHorizontalIcon,
ReportIcon,
TrendingUpIcon,
TrendingDownIcon,
} from '@shopify/polaris-icons';
import {
ImageIcon,
ImageAltIcon,
VideoIcon,
FileIcon,
FolderIcon,
AttachmentIcon,
LinkIcon,
} from '@shopify/polaris-icons';
import {
MagicIcon,
SparklesIcon, // AI-generated content
WandIcon,
} from '@shopify/polaris-icons';
import { Button } from '@shopify/polaris';
import { PlusIcon, DeleteIcon } from '@shopify/polaris-icons';
// Icon before text
<Button icon={PlusIcon}>Add product</Button>
// Destructive action
<Button icon={DeleteIcon} variant="primary" tone="critical">
Delete
</Button>
// Icon-only button (requires accessibilityLabel)
<Button icon={EditIcon} accessibilityLabel="Edit product" />
import { TextField } from '@shopify/polaris';
import { SearchIcon } from '@shopify/polaris-icons';
<TextField
label="Search"
prefix={<Icon source={SearchIcon} />}
placeholder="Search products..."
/>
import { Banner, Icon } from '@shopify/polaris';
import { AlertCircleIcon } from '@shopify/polaris-icons';
<Banner
title="Warning"
tone="warning"
icon={AlertCircleIcon}
>
Please review your settings.
</Banner>
import { Navigation } from '@shopify/polaris';
import { HomeIcon, OrderIcon, ProductIcon } from '@shopify/polaris-icons';
<Navigation location="/">
<Navigation.Section
items={[
{ label: 'Home', icon: HomeIcon, url: '/' },
{ label: 'Orders', icon: OrderIcon, url: '/orders' },
{ label: 'Products', icon: ProductIcon, url: '/products' },
]}
/>
</Navigation>
Decorative Icons: When an icon accompanies text that already describes the action, the icon is decorative and doesn't need a label:
<Button icon={PlusIcon}>Add product</Button>
// No accessibilityLabel needed - "Add product" describes the action
Standalone Icons: When an icon appears without text, always provide an accessibilityLabel:
<Button icon={EditIcon} accessibilityLabel="Edit product" />
Status Icons: For icons that convey important status information:
<Icon source={CheckCircleIcon} tone="success" accessibilityLabel="Completed" />
tone prop instead.