Version 2025-07 is the last API version to support React-based UI components. Later versions use web components, native UI elements with built-in accessibility, better performance, and consistent styling with Shopify's design system. Check out the migration guide to upgrade your extension.
Select
The Select component lets buyers choose one option from an options menu. Consider the Select component when you have 4 or more options, to avoid cluttering the interface.
Supported targets
- Checkout::Actions::Render
Before - Checkout::Cart
Line Details::Render After - Checkout::Cart
Lines::Render After - Checkout::Contact::Render
After - Checkout::Customer
Information::Render After - Checkout::Delivery
Address::Render Before - Checkout::Dynamic::Render
- Checkout::Pickup
Locations::Render After - Checkout::Pickup
Locations::Render Before - Checkout::Pickup
Points::Render After - Checkout::Pickup
Points::Render Before - Checkout::Reductions::Render
After - Checkout::Reductions::Render
Before - Checkout::Shipping
Method Details::Render After - Checkout::Shipping
Method Details::Render Expanded - Checkout::Shipping
Methods::Render After - Checkout::Shipping
Methods::Render Before - Checkout::Thank
You::Cart Line Details::Render After - Checkout::Thank
You::Cart Lines::Render After - Checkout::Thank
You::Customer Information::Render After - Checkout::Thank
You::Dynamic::Render - 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
Supported targets
- Checkout::Actions::Render
Before - Checkout::Cart
Line Details::Render After - Checkout::Cart
Lines::Render After - Checkout::Contact::Render
After - Checkout::Customer
Information::Render After - Checkout::Delivery
Address::Render Before - Checkout::Dynamic::Render
- Checkout::Pickup
Locations::Render After - Checkout::Pickup
Locations::Render Before - Checkout::Pickup
Points::Render After - Checkout::Pickup
Points::Render Before - Checkout::Reductions::Render
After - Checkout::Reductions::Render
Before - Checkout::Shipping
Method Details::Render After - Checkout::Shipping
Method Details::Render Expanded - Checkout::Shipping
Methods::Render After - Checkout::Shipping
Methods::Render Before - Checkout::Thank
You::Cart Line Details::Render After - Checkout::Thank
You::Cart Lines::Render After - Checkout::Thank
You::Customer Information::Render After - Checkout::Thank
You::Dynamic::Render - 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
Anchor to SelectPropsSelect Props
- Anchor to labellabellabelstringstringrequiredrequired
The text displayed as the field label, which identifies the purpose of the field to users.
- Anchor to optionsoptionsoptionsSelectOptionProps[]SelectOptionProps[]requiredrequired
The options a user can select from.
- Anchor to autocompleteautocompleteautocompleteAutocomplete | booleanAutocomplete | boolean
A hint as to the intended content of the field.
When set to
true, this property indicates that the field should support autofill, but you do not have any more semantic information on the intended contents.When set to
false, you are indicating that this field contains sensitive information, or contents that are never saved, like one-time codes. Note that it is impossible to prevent autocomplete in some browsers, so do not depend on its absence.Alternatively, you can provide an
Autocompleteobject, which describes the specific data you would like to be entered into this field during autocomplete.- Anchor to disableddisableddisabledbooleanboolean
Whether the select is disabled, preventing any user interaction.
- Anchor to errorerrorerrorstringstring
An error message displayed below the field to indicate validation problems. When set, the field is styled with error indicators.
- Anchor to idididstringstring
A unique identifier for the field. When no
idis set, a globally unique value will be used instead.- Anchor to namenamenamestringstring
An identifier for the field that is unique within the nearest containing
Formcomponent.- Anchor to onBluronBluronBlur() => void() => void
A callback fired when the select loses focus.
- Anchor to onChangeonChangeonChange(value: string) => void(value: string) => void
A callback fired when the select value changes. This callback is called with the string
valueof the selectedoption. This component is controlled, so you must store this value in state and reflect it back in thevalueprop of the select.- Anchor to onFocusonFocusonFocus() => void() => void
A callback fired when the select receives focus.
- Anchor to placeholderplaceholderplaceholderstringstring
The placeholder text displayed in the field when it's empty, providing a hint about the expected input format or value.
- Anchor to readonlyreadonlyreadonlybooleanboolean
Whether the select is read-only and can't be edited. Read-only selects remain focusable and their content is announced by screen readers.
- Anchor to requiredrequiredrequiredbooleanboolean
Whether the field needs a value. This requirement adds semantic value to the field, but it will not cause an error to appear automatically. If you want to present an error when this field is empty, you can do so with the
errorprop.- Anchor to valuevaluevaluestringstring
The active option for the select. This should match to one of the
valueproperties in theoptionsprop. When not set, the value will default to an empty string, which will show theplaceholdertext as the "selected value".
Autocomplete
A descriptor for selecting the data a field would like to receive during autocomplete. This attribute is modeled off of a limited set of the autocomplete values supported in browsers. Learn more about [autofill detail tokens](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill-detail-tokens).
- field
The type of data that should be inserted into a field supporting autocomplete.
AutocompleteField - group
The contact information “group” the autocomplete data should be sourced from.
AutocompleteGroup
AutocompleteField
'name' | 'honorific-prefix' | 'given-name' | 'additional-name' | 'family-name' | 'honorific-suffix' | 'nickname' | 'username' | 'new-password' | 'current-password' | 'one-time-code' | 'organization-title' | 'organization' | 'street-address' | 'address-line1' | 'address-line2' | 'address-line3' | 'address-level4' | 'address-level3' | 'address-level2' | 'address-level1' | 'country' | 'country-name' | 'postal-code' | 'credit-card-name' | 'credit-card-given-name' | 'credit-card-additional-name' | 'credit-card-family-name' | 'credit-card-number' | 'credit-card-expiry' | 'credit-card-expiry-month' | 'credit-card-expiry-year' | 'credit-card-security-code' | 'credit-card-type' | 'transaction-currency' | 'transaction-amount' | 'language' | 'birthday' | 'birthday-day' | 'birthday-month' | 'birthday-year' | 'sex' | 'url' | 'photo' | 'telephone' | 'telephone-country-code' | 'telephone-national' | 'telephone-area-code' | 'telephone-local' | 'telephone-local-prefix' | 'telephone-local-suffix' | 'telephone-extension' | 'email' | 'instant-message' | 'home telephone' | 'home telephone-country-code' | 'home telephone-national' | 'home telephone-area-code' | 'home telephone-local' | 'home telephone-local-prefix' | 'home telephone-local-suffix' | 'home telephone-extension' | 'home email' | 'home instant-message' | 'work telephone' | 'work telephone-country-code' | 'work telephone-national' | 'work telephone-area-code' | 'work telephone-local' | 'work telephone-local-prefix' | 'work telephone-local-suffix' | 'work telephone-extension' | 'work email' | 'work instant-message' | 'mobile telephone' | 'mobile telephone-country-code' | 'mobile telephone-national' | 'mobile telephone-area-code' | 'mobile telephone-local' | 'mobile telephone-local-prefix' | 'mobile telephone-local-suffix' | 'mobile telephone-extension' | 'mobile email' | 'mobile instant-message' | 'fax telephone' | 'fax telephone-country-code' | 'fax telephone-national' | 'fax telephone-area-code' | 'fax telephone-local' | 'fax telephone-local-prefix' | 'fax telephone-local-suffix' | 'fax telephone-extension' | 'fax email' | 'fax instant-message' | 'pager telephone' | 'pager telephone-country-code' | 'pager telephone-national' | 'pager telephone-area-code' | 'pager telephone-local' | 'pager telephone-local-prefix' | 'pager telephone-local-suffix' | 'pager telephone-extension' | 'pager email' | 'pager instant-message'AutocompleteGroup
'shipping' | 'billing'SelectOptionProps
- disabled
Whether the option is disabled, preventing selection.
boolean - label
The user-facing label for this option.
string - value
The value that will be passed to the select’s `onChange` callback when this option is selected.
string
Anchor to ExamplesExamples
Anchor to Basic SelectBasic Select
Basic Select

Basic Select
React
import {
reactExtension,
Select,
} from '@shopify/ui-extensions-react/checkout';
export default reactExtension(
'purchase.checkout.block.render',
() => <Extension />,
);
function Extension() {
return (
<Select
label="Country"
value="2"
options={[
{
value: '1',
label: 'Australia',
},
{
value: '2',
label: 'Canada',
},
{
value: '3',
label: 'France',
},
{
value: '4',
label: 'Japan',
},
{
value: '5',
label: 'Nigeria',
},
{
value: '6',
label: 'United States',
},
]}
/>
);
}JS
import {extension, Select} from '@shopify/ui-extensions/checkout';
export default extension('purchase.checkout.block.render', (root) => {
const select = root.createComponent(Select, {
label: 'Country',
value: '2',
options: [
{
value: '1',
label: 'Australia',
},
{
value: '2',
label: 'Canada',
},
{
value: '3',
label: 'France',
},
{
value: '4',
label: 'Japan',
},
{
value: '5',
label: 'Nigeria',
},
{
value: '6',
label: 'United States',
},
],
});
root.appendChild(select);
});Anchor to Using the Select component to display a long list of time choicesUsing the Select component to display a long list of time choices
The Select component is a great choice for displaying a long list of time choices, as it helps conserve valuable space. If the number of options is less than or equal to 5, we recommend using the ChoiceList component. This allows buyers to see all options immediately without opening the Select component.
Using the Select component to display a long list of time choices
 component. This allows buyers to see all options immediately without opening the Select component.](https://cdn.shopify.com/shopifycloud/shopify-dev/production/assets/assets/images/templated-apis-screenshots/checkout-ui-extensions/2025-07/select-time-picking-B9l0S224.png)
Using the Select component to display a long list of time choices
React
import {
reactExtension,
Select,
} from '@shopify/ui-extensions-react/checkout';
export default reactExtension(
'purchase.checkout.block.render',
() => <Extension />,
);
function Extension() {
return (
<Select
label="Pickup time"
value="1"
options={[
{
value: '1',
label: '9:00 AM',
},
{
value: '2',
label: '9:30 AM',
},
{
value: '3',
label: '10:00 AM',
},
{
value: '4',
label: '10:30 AM',
},
{
value: '5',
label: '11:00 AM',
},
{
value: '6',
label: '11:30 AM',
},
]}
/>
);
}JS
import {extension, Select} from '@shopify/ui-extensions/checkout';
export default extension('purchase.checkout.block.render', (root) => {
const select = root.createComponent(Select, {
label: 'Pickup time',
value: '1',
options: [
{
value: '1',
label: '9:00 AM',
},
{
value: '2',
label: '9:30 AM',
},
{
value: '3',
label: '10:00 AM',
},
{
value: '4',
label: '10:30 AM',
},
{
value: '5',
label: '11:00 AM',
},
{
value: '6',
label: '11:30 AM',
},
],
});
root.appendChild(select);
});Anchor to Best practicesBest practices
- Use for four or more options: For fewer choices, use the ChoiceList component with radio buttons for better visibility.
- Add placeholder text: Set
placeholderto guide buyers when no option is selected, such as "Choose a country." - Pre-select common choices: Set
valueto the most common option when it makes sense so most buyers need fewer interactions.
Anchor to LimitationsLimitations
- No multi-select support is available. Use the ChoiceList component with a
string[]value so choices render as checkboxes. - No built-in search or filter capability is provided. All options are displayed in a flat list.