--- title: Card description: >- Group related content and functionality together in a familiar and consistent style, for customers to scan, read, and get things done. api_version: 2025-07 api_name: customer-account-ui-extensions source_url: html: >- https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/ui-components/layout-and-structure/card md: >- https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/ui-components/layout-and-structure/card.md --- Migrate to Polaris Version 2025-07 is the last API version to support React-based UI components. Later versions use [web components](https://shopify.dev/docs/api/customer-account-ui-extensions/latest/polaris-web-components), native UI elements with built-in accessibility, better performance, and consistent styling with [Shopify's design system](https://shopify.dev/docs/apps/design). Check out the [migration guide](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-10/upgrading-to-2025-10) to upgrade your extension. # Card Group related content and functionality together in a familiar and consistent style, for customers to scan, read, and get things done. ### Support Targets (25) ### Supported targets * Customer​Account::Kitchen​Sink * customer-account.​footer.​render-after * customer-account.​order-index.​announcement.​render * customer-account.​order-index.​block.​render * customer-account.​order-status.​announcement.​render * customer-account.​order-status.​block.​render * customer-account.​order-status.​cart-line-item.​render-after * customer-account.​order-status.​cart-line-list.​render-after * customer-account.​order-status.​customer-information.​render-after * customer-account.​order-status.​fulfillment-details.​render-after * customer-account.​order-status.​payment-details.​render-after * customer-account.​order-status.​return-details.​render-after * customer-account.​order-status.​unfulfilled-items.​render-after * customer-account.​order.​action.​menu-item.​render * customer-account.​order.​action.​render * customer-account.​order.​page.​render * customer-account.​page.​render * customer-account.​profile.​addresses.​render-after * customer-account.​profile.​announcement.​render * customer-account.​profile.​block.​render * customer-account.​profile.​company-details.​render-after * customer-account.​profile.​company-location-addresses.​render-after * customer-account.​profile.​company-location-payment.​render-after * customer-account.​profile.​company-location-staff.​render-after * customer-account.​profile.​payment.​render-after ## CardProps * **padding** **boolean** Adjust the padding of all edges. `true` applies a default padding that is appropriate for the component. Examples ## Preview ![An example of the card component shows a header that says "Addresses", and a button in the upper-right corner that says "+Add". Under the header, there is a full mailing address labeled as the default address, with a pencil icon for editing it.](https://cdn.shopify.com/shopifycloud/shopify-dev/development/assets/assets/images/templated-apis-screenshots/customer-account-ui-extensions/2025-07/card-preview-EDxnZVoE.png) ### Examples * #### Basic Card ##### React ```tsx import { Card, Grid, BlockStack, Heading, Text, TextBlock, View, Icon, InlineLayout, reactExtension, } from '@shopify/ui-extensions-react/customer-account'; import React from 'react'; export default reactExtension( 'customer-account.page.render', () => , ); function App() { return ( Addresses Default address Kristin Watson 1655 Island Pkwy Kamloops BC M7G 672 Canada Add ); } ``` ##### JS ```js import { Card, Grid, extension, } from '@shopify/ui-extensions/customer-account'; export default extension( 'customer-account.page.render', (root, api) => { renderApp(root, api); }, ) function renderApp(root, api) { const card = root.createComponent( Card, {padding: true}, [ root.createComponent(Grid, {columns: ['1fr', 'auto'], spacing: "base", minInlineSize: "fill", blockAlignment: "start"}, [ root.createComponent('BlockStack', {spacing: 'loose'}, [ root.createComponent('Heading', undefined, 'Addresses'), root.createComponent('BlockStack', {spacing: 'base'}, [ root.createComponent('Text', {appearance: "subdued"}, 'Default address'), root.createComponent('BlockStack', {spacing: 'extraTight'}, [ root.createComponent('TextBlock',{}, 'Kristin Watson'), root.createComponent('TextBlock', {}, '1655 Island Pkwy'), root.createComponent('TextBlock', {}, 'Kamloops BC M7G 672'), root.createComponent('TextBlock', {}, 'Canada'), ]), ]), ]), root.createComponent('BlockStack', {spacing: 'loose'}, [ root.createComponent('InlineLayout', {blockAlignment: "center"}, [ root.createComponent('Icon', {source: "plus", size: "small", appearance: "accent"}), root.createComponent('Text', {appearance: "accent"}, 'Add'), ]), root.createComponent('View', {inlineAlignment: "end"}, [ root.createComponent('Icon', {source: "pen", size: "small", appearance: "accent"}), ]), ]), ]), ]) root.append(card); } ``` ## Best Practices * Group related information. * Use headings that set clear expectations about the card’s purpose. * Display information in a way that emphasizes and prioritizes what the customer needs to know first.