POS UI extensions API version 2026-10 adds s-pos-list, a virtualized list component for Polaris web components. You pass rows as plain data and lay out each kind of row with a template built from web components. s-pos-list is now available in Shopify POS 11.17.0 and later, and it replaces the List component from API version 2025-07 and earlier for extensions that adopt 2026-10. No action is required.
What changed
The List component ended with API version 2025-07, and Polaris web components had no list component to replace it. s-pos-list fills that gap. Instead of List’s fixed row layout, each kind of row gets its own template, so one list can mix headings, dividers, and content rows.
Who's affected
Extensions that set and run on Shopify POS 11.17.0 or later can use s-pos-list. API version 2026-07 and earlier don’t include it, and nothing changes for extensions that stay on earlier API versions or keep using List.
It’s for extensions that used List and are moving to Polaris web components, and for extensions that build long lists by mapping rows into s-scroll-box.
Why this matters
Mapping rows into s-scroll-box makes POS create a view for every row, so display time and memory grow with the list, and very large lists can fail to display. s-pos-list recycles row views as the POS user scrolls. In testing on an iPad (A16) with the most complex List row layout, s-pos-list displays and scrolls large lists as fast as the 2025-07 List.
What to do
You don’t need to change existing extensions, because s-pos-list is a new component and existing extensions keep working unchanged. When you adopt API version 2026-10 and run on Shopify POS 11.17.0 or later, you can use the following mappings to move List implementations to s-pos-list:
List (2025-07) | s-pos-list (2026-10) |
|---|---|
data | rows. Each row keeps its id and adds . |
and | Markup in a template, built from components such as s-image, s-text, s-badge, and s-switch. |
on a row | on the list. Read the row from event.detail.item. Use a type="text" template for rows that had no . |
and | and . |
| A child element with slot="header", such as <s-search-field slot="header" />. Like , it scrolls with the rows. |
title | An s-heading above the list. Like title, it stays in place while the rows scroll. |
| Your template. Always render the image area, or wrap it in {{#if}} on a row field. |
When you update your extension to 2026-10, use this table to adjust your list props and templates so that s-pos-list matches your previous List behavior. Test on Shopify POS 11.17.0 or later to confirm that long lists still load and scroll as expected.