---
title: >-
  POS UI extensions 2026-10 adds s-pos-list, a virtualized list with custom row
  templates - Shopify developer changelog
description: >-
  Shopify’s developer changelog documents all changes to Shopify’s platform.
  Find the latest news and learn about new platform opportunities.
source_url:
  html: >-
    https://shopify.dev/changelog/posts/pos-ui-extensions-2026-10-adds-s-pos-list-a-virtualized-list-with-custom-row-templates
  md: >-
    https://shopify.dev/changelog/posts/pos-ui-extensions-2026-10-adds-s-pos-list-a-virtualized-list-with-custom-row-templates.md
metadata:
  effectiveApiVersion: 2026-10
  affectedApi:
    - displayName: POS Extensions
      handle: pos-extensions
  primaryTag:
    displayName: API
    handle: api
  secondaryTag:
    displayName: New
    handle: new
  indicatesActionRequired: false
  createdAt: '2026-10-08T13:07:22-04:00'
  postedAt: '2026-10-22T12:00:00-04:00'
  updatedAt: '2026-10-22T12:29:18-04:00'
  effectiveAt: '2026-10-12T12:00:00-04:00'
---

October 22, 2026

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

DateOctober 22, 2026

Version[2026-10](https://shopify.dev/changelog?api_version=2026-10)

FlagsNew

SurfacesAPI

Affected APIs[POS Extensions](https://shopify.dev/changelog?api_type=pos-extensions)

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](https://shopify.dev/docs/api/pos-ui-extensions/2026-10/web-components/layout-and-structure/pos-list) 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`) |
| - | - |
| `data` | `rows`. Each row keeps its `id` and adds `templateFor`. |
| `leftSide` and `rightSide` | Markup in a template, built from components such as `s-image`, `s-text`, `s-badge`, and `s-switch`. |
| `onPress` on a row | `onRowClick` on the list. Read the row from `event.detail.item`. Use a `type="text"` template for rows that had no `onPress`. |
| `isLoadingMore` and `onEndReached` | `loadingMore` and `onLoadMore`. |
| `listHeaderComponent` | A child element with `slot="header"`, such as `<s-search-field slot="header" />`. Like `listHeaderComponent`, it scrolls with the rows. |
| `title` | An `s-heading` above the list. Like `title`, it stays in place while the rows scroll. |
| `imageDisplayStrategy` | 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.

## Related docs

* [POS list component reference](https://shopify.dev/docs/api/pos-ui-extensions/2026-10/web-components/layout-and-structure/pos-list)
* [Upgrading POS UI extensions to 2025-10](https://shopify.dev/docs/apps/build/pos/upgrading-to-2025-10)
