--- title: Choice list description: |- The choice list component presents multiple options for single or multiple selections. Use it when merchants need to choose from a defined set of options, such as filtering results or collecting preferences. The component supports both single selection (radio button behavior) and multiple selection (checkbox behavior) modes. It includes configurable labels, help text, and validation. For compact dropdown selection with four or more options, use [select](/docs/api/checkout-ui-extensions/2026-01/web-components/forms/select). api_version: 2026-01 api_name: checkout-ui-extensions source_url: html: https://shopify.dev/docs/api/checkout-ui-extensions/latest/web-components/forms/choice-list md: https://shopify.dev/docs/api/checkout-ui-extensions/latest/web-components/forms/choice-list.md --- # Choice list The choice list component presents multiple options for single or multiple selections. Use it when merchants need to choose from a defined set of options, such as filtering results or collecting preferences. The component supports both single selection (radio button behavior) and multiple selection (checkbox behavior) modes. It includes configurable labels, help text, and validation. For compact dropdown selection with four or more options, use [select](https://shopify.dev/docs/api/checkout-ui-extensions/2026-01/web-components/forms/select). ### Support Targets (29) ### Supported targets * purchase.​checkout.​actions.​render-before * purchase.​checkout.​block.​render * purchase.​checkout.​cart-line-item.​render-after * purchase.​checkout.​cart-line-list.​render-after * purchase.​checkout.​contact.​render-after * purchase.​checkout.​delivery-address.​render-after * purchase.​checkout.​delivery-address.​render-before * purchase.​checkout.​footer.​render-after * purchase.​checkout.​header.​render-after * purchase.​checkout.​payment-method-list.​render-after * purchase.​checkout.​payment-method-list.​render-before * purchase.​checkout.​pickup-location-list.​render-after * purchase.​checkout.​pickup-location-list.​render-before * purchase.​checkout.​pickup-location-option-item.​render-after * purchase.​checkout.​pickup-point-list.​render-after * purchase.​checkout.​pickup-point-list.​render-before * purchase.​checkout.​reductions.​render-after * purchase.​checkout.​reductions.​render-before * purchase.​checkout.​shipping-option-item.​details.​render * purchase.​checkout.​shipping-option-item.​render-after * purchase.​checkout.​shipping-option-list.​render-after * purchase.​checkout.​shipping-option-list.​render-before * purchase.​thank-you.​announcement.​render * purchase.​thank-you.​block.​render * purchase.​thank-you.​cart-line-item.​render-after * purchase.​thank-you.​cart-line-list.​render-after * purchase.​thank-you.​customer-information.​render-after * purchase.​thank-you.​footer.​render-after * purchase.​thank-you.​header.​render-after ## Properties * **disabled** **boolean** **Default: false** Disables the field, disallowing any interaction. `disabled` on any child choices is ignored when this is true. * **error** **string** Indicate an error to the user. The field will be given a specific stylistic treatment to communicate problems that have to be resolved immediately. * **id** **string** A unique identifier for the element. * **label** **string** Content to use as the field label. * **labelAccessibilityVisibility** **'visible' | 'exclusive'** **Default: 'visible'** Changes the visibility of the component's label. * `visible`: the label is visible to all users. * `exclusive`: the label is visually hidden but remains in the accessibility tree. * **multiple** **boolean** **Default: false** Whether multiple choices can be selected. * **name** **string** An identifier for the field that is unique within the nearest containing form. * **values** **string\[]** An array of the `value`s of the selected options. This is a convenience prop for setting the `selected` prop on child options. * **variant** **'auto' | 'list' | 'inline' | 'block' | 'grid'** **Default: 'auto'** The variant of the choice grid. * `auto`: The variant is determined by the context. * `list`: The choices are displayed in a list. * `inline`: The choices are displayed on the inline axis. * `block`: The choices are displayed on the block axis. * `grid`: The choices are displayed in a grid. ## Events Learn more about [registering events](https://shopify.dev/docs/api/checkout-ui-extensions/latest/using-polaris-components#event-handling). * **change** **CallbackEventListener\** A callback that is run whenever the control is changed. ### CallbackEventListener ```ts (EventListener & { (event: CallbackEvent & TData): void; }) | null ``` ### CallbackEvent ```ts TEvent & { currentTarget: HTMLElementTagNameMap[TTagName]; } ``` ## Choice The choice component creates individual selectable options within a choice list. Use choice to define each option that merchants can select, supporting both single selection (radio buttons) and multiple selection (checkboxes) modes. Choice components support labels, help text, and custom content through slots, providing flexible option presentation within choice lists. * **accessibilityLabel** **string** A label used for users using assistive technologies like screen readers. When set, any children or `label` supplied will not be announced. This can also be used to display a control without a visual label, while still providing context to users using screen readers. * **defaultSelected** **boolean** **Default: false** Whether the control is active by default. * **disabled** **boolean** **Default: false** Disables the control, disallowing any interaction. * **error** **boolean** **Default: false** Set to `true` to associate a choice with the error passed to `ChoiceList` * **id** **string** A unique identifier for the element. * **selected** **boolean** **Default: false** Whether the control is active. * **value** **string** The value used in form data when the control is checked. ## Slots Learn more about [component slots](https://shopify.dev/docs/api/checkout-ui-extensions/latest/using-polaris-components#slots). * **details** **HTMLElement** Additional text to provide context or guidance for the input. This text is displayed along with the input and its label to offer more information or instructions to the user. * **secondaryContent** **HTMLElement** Secondary content for a choice. * **selectedContent** **HTMLElement** Content to display when the option is selected. This can be used to provide additional information or options related to the choice. Examples ## Preview ![](https://shopify.dev/images/templated-apis-screenshots/checkout-ui-extensions/2026-01/choice-list-default.png) ### Examples * #### Code ##### Default ```html Yonge-Dundas Square locations Distillery District location Yorkville location ``` * #### List Variant ##### Description This classic and flexible variant is ideal for \up to 10 choices\. It’s the most common and recognizable format for making a selection from a vertical list. \Best Practices\ \ ##### Default ```html Yonge-Dundas Square Distillery District Yorkville ``` * #### Block Variant ##### Description This variant is designed for options that require both \secondary content\ and a clear visual separation. It’s well-suited for \up to 5 choices\ where each item is complex and needs its own defined space. Due to its "chunky" footprint, using more than 5 can take up too much vertical space. \Best Practices\ \ ##### Default ```html Yonge-Dundas Square 1 Dundas St E, Toronto ON 1.2 km Distillery District 55 Mill St, Toronto ON 4 km Yorkville 55 Avenue Rd, Toronto ON 6 km ``` * #### Inline Variant ##### Description This compact variant is ideal when \screen real estate is limited\. It works best for \up to 3 to 5 choices\ depending on the typical length of the content. \Best Practices\ \ ##### Default ```html $3.50 $4.50 $5.50 Other ``` * #### Grid Variant ##### Description This variant is best for \up to 6 choices\, arranged in a grid-like layout. It’s great for scenarios where choices have significant visual differences and need to be arranged for easy comparison. \Best Practices\ \ ##### Default ```html Standard Deluxe Personalized ```