Shopify Plus Checkout Extensibility: Custom Checkout Experiences
Shopify's checkout converts at an average of 15% — among the highest in ecommerce. That statistic is why Shopify historically restricted checkout customization: their checkout is well-optimized, and custom modifications tend to reduce conversion. But merchants have legitimate reasons to customize: loyalty points display, delivery preferences, gift messaging, B2B purchase order fields, and compliance requirements that standard checkout can't accommodate.
Checkout Extensibility is Shopify Plus's answer to this tension. It allows meaningful checkout customization while keeping Shopify's optimized checkout architecture intact and maintaining automatic updates as Shopify evolves the platform. The deprecated checkout.liquid approach broke every time Shopify updated checkout. Extensions are upgrade-safe by design.
Key Takeaways
- Checkout Extensibility replaces deprecated checkout.liquid — all Plus merchants must migrate by 2025 (already past)
- UI Extensions add React components to specific checkout slots without overriding Shopify's core checkout template
- Checkout Functions enable custom server-side logic for discounts, shipping, and payment method filtering
- Extensions execute in a sandboxed environment — they cannot access DOM outside their render target
- Branding API allows full visual customization of checkout colors, typography, and corner radius
- Post-purchase extensions add one-click upsell offers after order confirmation (highest conversion placement)
- Thank You page and Order Status page are now fully customizable with extensions
- Performance: extensions are server-side rendered in Shopify's infrastructure — no client-side performance penalty
The Architecture of Checkout Extensibility
Understanding the technical architecture helps you make better decisions about what to build and how.
Extension Points (Slots)
Shopify's checkout UI has predefined extension points — specific locations where you can inject custom React components. Think of them as structured slots in a checkout template that accepts approved components:
| Extension Point | Location in Checkout | Common Use Cases |
|---|---|---|
purchase.checkout.block.render | Any section (most flexible) | Custom informational blocks |
purchase.checkout.cart-line-item.render-after | After each line item | Bundle disclosure, product notes |
purchase.checkout.reductions.render-after | After discount field | Loyalty points redemption widget |
purchase.checkout.shipping-option-item.render-after | After each shipping option | Delivery date estimate display |
purchase.checkout.payment-method-list.render-after | After payment methods | Security badges, payment guarantees |
purchase.checkout.contact.render-after | After contact info | GDPR consent checkbox, B2B field |
purchase.checkout.actions.render-before | Before "Complete Order" | Final offer, donation widget |
purchase.thank-you.block.render | Order confirmation page | Cross-sell, loyalty points earned display |
purchase.order-status.block.render | Order status page | Return initiation, support widget |
The Extension Sandbox
Extensions run in an isolated JavaScript environment. They communicate with Shopify's checkout via a standardized API (the @shopify/ui-extensions package) rather than direct DOM manipulation. This means:
- Extensions cannot read or modify other parts of the checkout page
- Extensions cannot access browser cookies, localStorage, or external JavaScript
- Network requests from extensions must go through Shopify's approved endpoints
- Extensions can read checkout data (cart contents, customer info, shipping selection) via the API
This sandboxing is why extensions are upgrade-safe: Shopify can update the checkout template without breaking extension integrations.
Setting Up Your Extension Development Environment
Prerequisites
- Shopify Plus store with development store access
- Node.js 18+ and npm/pnpm
- Shopify CLI 3.x
Initial Setup
npm install -g @shopify/cli @shopify/theme
shopify app create
# Select: Add extension → Checkout UI extension
This creates a checkout extension scaffold in your Shopify app directory.
Extension File Structure
extensions/
my-checkout-extension/
src/
Checkout.tsx # Main React component
shopify.extension.toml # Extension configuration
package.json
The Minimal Extension (TypeScript/React)
A checkout extension that displays a custom message:
import {
reactExtension,
useSettings,
Banner,
} from "@shopify/ui-extensions-react/checkout";
export default reactExtension(
"purchase.checkout.block.render",
() => <MyExtension />
);
function MyExtension() {
const { message } = useSettings();
return (
<Banner status="info">
{message || "Default message"}
</Banner>
);
}
Note: Code examples are illustrative; the actual Shopify UI Extensions API evolves — always reference current Shopify developer documentation.
High-Value Extension Use Cases
1. Loyalty Points Display and Redemption
Show a customer's current loyalty points balance and allow them to apply points as a discount:
The extension reads the customer's ID from checkout context, calls your loyalty platform's API (Smile.io, LoyaltyLion) via Shopify's fetch proxy, displays the balance, and on confirmation, applies a discount code via Shopify's discount API.
This replaces a common friction point: customers who want to redeem loyalty points but have to leave checkout to find their code, which often results in cart abandonment.
Expected conversion impact: 3–8% increase in checkout completion rate for loyalty program members who see available points.
2. Gift Message and Packaging Options
Add a gift message field and gift wrapping option to checkout. The extension:
- Displays a "This is a gift" toggle
- When enabled, reveals a text field for the gift message
- Optionally shows a gift wrapping upsell (fixed price added as a line item)
- Saves the message as an order attribute accessible in your packing workflow
Expected impact: 2–5% of orders use gift messaging; the upsell creates incremental revenue.
3. B2B Purchase Order Number Field
B2B buyers require a PO number for their procurement systems. Without this field, B2B checkout friction is significant:
The extension adds a "Purchase Order Number" text input field, marks it as required for B2B customers (detected via customer tags), and saves the PO number as an order attribute. The PO number appears on invoices and in order admin.
Implementation consideration: Detect B2B customers by checking customer tags using the useCustomer hook.
4. Delivery Date Preference
For merchants offering multiple delivery speed options, displaying estimated delivery dates alongside shipping options reduces decision uncertainty and increases premium shipping selection:
The extension hooks into purchase.checkout.shipping-option-item.render-after to inject a delivery date calculation beneath each shipping option. The date calculation uses the current date + shipping transit days (fetched from your carrier API or hardcoded by shipping zone).
Expected impact: 8–15% increase in expedited shipping selection when accurate delivery dates are shown.
5. Upsell/Cross-Sell at Checkout
A product upsell block before the "Complete Order" button — the last opportunity to increase AOV before purchase:
The extension reads the cart contents, calls your recommendation engine API, and displays 1–2 relevant add-on products with one-click add-to-cart. Items added via the extension update the Shopify checkout total in real time.
Expected impact: 5–12% of buyers add an item from the checkout upsell block.
Post-Purchase Extensions: The Highest ROI Opportunity
Post-purchase extensions appear on the order confirmation page immediately after a customer completes checkout. The customer is in a peak positive state — they just bought something they wanted. This is the highest-converting placement for upsell offers.
One-Click Post-Purchase Upsell
The post-purchase extension can offer a product add-on that charges to the customer's already-authorized payment method without a new checkout flow:
- Customer completes Order #1234
- Extension appears: "Complete your purchase — add [Product] for $19 (one click, no re-entering payment info)"
- Customer accepts or declines
- If accepted: creates a new charge and a new order line item
- Customer is redirected to the final order status page
Expected impact: 8–20% acceptance rate on well-configured post-purchase offers at the right price point ($10–$30 offer for a $100+ primary order).
Thank You Page Customizations
Beyond upsells, the thank you page extension can:
- Display loyalty points earned from this order
- Show referral program CTA with pre-populated share link
- Offer subscription upgrade for one-time purchasers of consumable products
- Request social media follow with incentive
- Display product care instructions for first-time category buyers
Checkout Functions: Server-Side Logic Extensions
Checkout Functions are more powerful than UI extensions — they modify the core checkout computation logic itself. They run server-side as compiled WebAssembly, which means they're fast and can't be bypassed by client-side manipulation.
Discount Functions
Implement complex discount logic that Shopify's native discount engine doesn't support:
| Custom Discount Scenario | Shopify Native? | Discount Function? |
|---|---|---|
| Buy 3, pay for 2 (tier-based) | Partial | Full |
| Percentage off orders from specific referral source | No | Yes |
| Free gift with purchase (specific product) | App required | Yes |
| Customer-group-based automatic discount | No | Yes |
| Volume discount that scales with quantity across multiple line items | No | Yes |
| Geographic-based discount | No | Yes |
Shipping Functions
Modify how Shopify calculates and presents shipping options:
- Hide certain shipping methods based on cart contents (no standard shipping for oversized items)
- Inject custom shipping rates from your logistics provider
- Apply shipping surcharges for remote delivery addresses
- Offer free shipping once cart reaches a threshold (calculated in real time)
Payment Customization Functions
Control which payment methods appear:
- Hide "Cash on Delivery" for international orders
- Show only bank transfer for orders above $10,000
- Hide PayPal for specific product categories (compliance reasons)
- Display custom payment method descriptions or icons
Branding API: Visual Checkout Customization
The Checkout Branding API allows comprehensive visual customization without touching checkout logic:
What You Can Customize
| Element | Customization Options |
|---|---|
| Colors | Primary accent, error state, background, text |
| Typography | Font family (from Shopify's CDN), size, weight |
| Corner radius | Buttons, form fields, containers (sharp vs. rounded) |
| Buttons | Fill style, label text, hover states |
| Form fields | Border style, label positioning |
| Checkout header/footer | Logo position, header background |
Configure via the Shopify Admin → Settings → Checkout and Customer Accounts → Customize checkout or via the Branding API directly for programmatic configuration across multiple stores.
Migration from checkout.liquid
If your Shopify Plus store was using checkout.liquid (deprecated August 2024, forced migration complete), you need to rebuild customizations as extensions. Common checkout.liquid customizations and their extension equivalents:
| checkout.liquid Customization | Extension Equivalent |
|---|---|
| Custom header/logo | Branding API |
| Custom footer text | purchase.checkout.block.render (bottom) |
| Gift message field | purchase.checkout.actions.render-before |
| Custom CSS | Branding API (limited to API options) |
| Analytics pixel injection | Shopify Pixels API (separate system) |
| Custom JavaScript | Cannot replicate directly — use Checkout Functions for logic |
| Social proof widget | purchase.checkout.block.render |
| Trust badges | Branding API + purchase.checkout.payment-method-list.render-after |
Limitations vs. checkout.liquid
Extensions cannot replicate arbitrary JavaScript injection or full template manipulation. If your checkout.liquid contained complex conditional logic or deeply customized UI layouts, some functionality may require rebuilding with Checkout Functions or may not be replicable in the extensions framework at all.
Frequently Asked Questions
Do Checkout Extensibility features work on mobile and desktop?
Yes. UI Extensions render using Shopify's UI components, which are inherently responsive. Shopify's checkout handles the layout responsiveness — your extension renders within its designated slot, which adapts to the screen size automatically. You don't need to write separate mobile and desktop layouts.
Can extensions slow down the checkout experience?
UI extensions are server-rendered within Shopify's infrastructure — they don't require client-side JavaScript execution for the initial render. However, extensions that make API calls (to fetch loyalty balances, recommendation data, etc.) add network latency. Keep API calls under 200ms by caching responses and optimizing your endpoints. Extensions that consistently slow checkout are detected by Shopify and may be disabled.
How do I test Checkout Extensions before going live?
Use Shopify's development store to test extensions without affecting your production checkout. The Shopify CLI provides a local development server that previews your extension in the real Shopify checkout environment. Extensions can also be deployed to your production store in a "hidden" state, visible only via a preview URL — useful for stakeholder review before public launch.
What technical skills are required to build Checkout Extensions?
UI Extensions require React and TypeScript knowledge. Checkout Functions require Rust or JavaScript (compiled to WebAssembly via a Shopify-provided toolchain). Most developers with React experience can build UI extensions after reviewing Shopify's documentation. Checkout Functions are more technically demanding — a senior developer with backend experience is appropriate for non-trivial functions.
Are Checkout Extensions available on Shopify plans other than Plus?
Post-purchase extensions and thank you page extensions are available on all Shopify plans. Checkout UI Extensions (mid-checkout customization) are Plus-only. Checkout Functions are Plus-only. The Branding API for checkout visual customization is Plus-only (though basic theme editor checkout customization is available on all plans).
Next Steps
Checkout Extensibility is the most technically complex capability in the Shopify Plus feature set. The ROI is clear — loyalty redemption, B2B fields, post-purchase upsells, and delivery date transparency all have documented conversion impact. The implementation requires React development skill and familiarity with Shopify's extension APIs.
ECOSIRE's Shopify Plus team builds and maintains Checkout Extensions for merchants ranging from DTC brands to B2B distributors. Our developers are Shopify Plus Certified Partners with specific experience in Checkout Extensibility, Checkout Functions, and the Branding API.
Reach out to discuss your checkout customization requirements — we'll assess your needs and design an extension architecture that increases conversions without compromising checkout performance.
Written by
ECOSIRE Research and Development Team
Building enterprise-grade digital products at ECOSIRE. Sharing insights on Odoo integrations, e-commerce automation, and AI-powered business solutions.
Related Articles
Landing Page Optimization in GoHighLevel: A/B Testing and Conversion
Master landing page optimization in GoHighLevel. Learn A/B testing setup, conversion rate optimization techniques, and proven funnel design patterns that increase lead capture.
Personalizing the Shopify Shopping Experience with AI
Implement AI personalization on Shopify to deliver 1:1 shopping experiences. Covers product discovery, content personalization, email, and on-site behavioral targeting.
Shopify Checkout Optimization: Reduce Abandonment by 30%
Cut Shopify checkout abandonment by 30% with proven tactics: payment method expansion, friction reduction, trust signal placement, and abandonment recovery sequences.