Skip to main content

POS UI extensions 2026-10 adds s-pos-list, a virtualized list with custom row templates

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 api_version = "2026-10" 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)
datarows. Each row keeps its id and adds templateFor.
leftSide and rightSideMarkup in a template, built from components such as s-image, s-text, s-badge, and s-switch.
onPress on a rowonRowClick on the list. Read the row from event.detail.item. Use a type="text" template for rows that had no onPress.
isLoadingMore and onEndReachedloadingMore and onLoadMore.
listHeaderComponentA child element with slot="header", such as <s-search-field slot="header" />. Like listHeaderComponent, it scrolls with the rows.
titleAn s-heading above the list. Like title, it stays in place while the rows scroll.
imageDisplayStrategyYour 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.

Related docs

Was this page helpful?