Guide for creating data visualizations in Shopify Apps using the Polaris Viz library...
Polaris Viz is Shopify's data visualization component library for React. It provides accessible, themeable chart components that match the Shopify Admin visual style.
Note: This library was archived in June 2025. While still functional, Shopify recommends reaching out to support for migration assistance if building new features.
npm install @shopify/polaris-viz
# Required peer dependencies
npm install @shopify/polaris @shopify/polaris-tokens
Wrap your application with PolarisVizProvider:
import { PolarisVizProvider } from '@shopify/polaris-viz';
import '@shopify/polaris-viz/build/esm/styles.css';
function App() {
return (
<PolarisVizProvider>
{/* Your app */}
</PolarisVizProvider>
);
}
| Component | Use Case | Max Data Points |
|---|---|---|
BarChart |
Comparing discrete categories | ~6 categories |
SimpleBarChart |
Simple horizontal bars | ~6 categories |
LineChart |
Trends over time | 30+ points |
SparkLineChart |
Compact inline trends | Any |
DonutChart |
Part-to-whole relationships | ~6 segments |
StackedAreaChart |
Cumulative trends | 30+ points |
FunnelChart |
Conversion funnels | ~6 stages |
import { BarChart } from '@shopify/polaris-viz';
const data = [
{
name: 'Sales',
data: [
{ key: 'Monday', value: 150 },
{ key: 'Tuesday', value: 200 },
{ key: 'Wednesday', value: 175 },
],
},
];
<BarChart data={data} />
import { LineChart } from '@shopify/polaris-viz';
const data = [
{
name: 'Orders',
data: [
{ key: 'Jan', value: 100 },
{ key: 'Feb', value: 150 },
{ key: 'Mar', value: 200 },
],
},
];
<LineChart data={data} />
import { DonutChart } from '@shopify/polaris-viz';
const data = [
{ name: 'Direct', data: [{ key: 'Direct', value: 200 }] },
{ name: 'Social', data: [{ key: 'Social', value: 150 }] },
{ name: 'Email', data: [{ key: 'Email', value: 100 }] },
];
<DonutChart data={data} />
import { SparkLineChart } from '@shopify/polaris-viz';
const data = [
{
data: [
{ key: 0, value: 100 },
{ key: 1, value: 150 },
{ key: 2, value: 120 },
{ key: 3, value: 180 },
],
},
];
<SparkLineChart data={data} />
All charts use a consistent DataSeries format:
interface DataPoint {
key: string | number; // X-axis value or category
value: number | null; // Y-axis value (null for gaps)
}
interface DataSeries {
name: string; // Series label
data: DataPoint[]; // Array of data points
color?: string; // Optional color override
isComparison?: boolean; // Mark as comparison data (renders grey)
}
Use the theme prop to switch between themes:
// Use built-in themes
<BarChart data={data} theme="Light" />
<BarChart data={data} theme="Dark" />
// Or define custom themes in provider
<PolarisVizProvider
themes={{
MyBrand: {
chartContainer: { backgroundColor: '#f9f9f9' },
seriesColors: { upToEight: ['#5c6ac4', '#47c1bf'] },
},
}}
>
<BarChart data={data} theme="MyBrand" />
</PolarisVizProvider>
Most chart components accept these props:
| Prop | Type | Description |
|---|---|---|
data |
DataSeries[] |
Chart data |
theme |
string |
Theme name |
isAnimated |
boolean |
Enable/disable animations |
showLegend |
boolean |
Show legend |
xAxisOptions |
object |
X-axis configuration |
yAxisOptions |
object |
Y-axis configuration |
emptyStateText |
string |
Text when no data |
Follow Shopify's formatting standards: