The End of Checkout.liquid Was Not a Suggestion
On August 28, 2025, Shopify pulled the plug on checkout.liquid for good. Any store still running custom Liquid code on the information, shipping, and payment pages was hard-migrated to the new extensibility model, and the old template stopped working overnight. If you woke up to a checkout missing your trust badges or custom delivery picker, you already know why Shopify checkout extensibility is not an academic topic.
The shift was coming for years. Shopify announced the sunset in 2023 and only extended it for Thank You and Order Status pages. The core checkout was never getting a reprieve: checkout.liquid was a security and performance liability that let any developer inject arbitrary code into the highest-converting page on the internet. The new model is sandboxed, upgrade-safe, and designed for the way merchants customize checkout in 2026.
This guide explains what extensibility is, which parts require Shopify Plus, what you can and cannot do, and how to decide between building a custom extension or installing an app. If you want the broader picture first, our payments and checkout resources cover the rest of the stack.
Why Checkout.liquid Had to Go
Checkout.liquid was the single template file that rendered Shopify's multi-page checkout. Merchants and their developers could edit it directly, which was powerful and dangerous in equal measure. One stray script could slow the page to a crawl, leak customer data, or silently break on Shopify's next platform update.
Three structural problems forced the deprecation:
- Security surface area. Injected JavaScript ran in the same context as Shopify's own checkout code, making the page a target for skimmers and magecart-style attacks. Shopify's PCI compliance burden grew with every custom store.
- Upgrade fragility. Every time Shopify shipped a checkout improvement — Shop Pay, one-page checkout, accelerated payments — custom Liquid code broke in creative ways. Merchants lost conversions for weeks chasing the fix.
- Mobile performance. Liquid edits ran server-side on every page load. Slow checkout pages cost real money, and according to Shopify's Shop Pay data, one-click checkouts convert up to 50% better than guest flows that have to wait on render.
Extensibility replaces the "edit the template directly" model with a sandboxed, component-based system. Your code runs in isolation, cannot block checkout rendering, and survives platform upgrades because you are building against a stable API contract instead of a file.
The Migration Timeline at a Glance
| Date | What Happened |
|---|---|
| June 2023 | Shopify announces checkout.liquid deprecation for Information, Shipping, and Payment pages |
| August 28, 2024 | Deprecation deadline for Information, Shipping, Payment pages (non-Plus stores) |
| August 28, 2025 | Final deadline — Thank You and Order Status pages deprecated; checkout.liquid fully retired |
| 2026 and beyond | All customization must use UI extensions, Shopify Functions, or the Branding API |
If your store is on the modern checkout already, good. If you inherited a build that still references checkout.liquid, stop reading this article and go check your Shopify admin right now — you may be running a broken checkout without knowing it.
What Shopify Checkout Extensibility Actually Is

"Extensibility" is Shopify's umbrella term for four distinct systems that together replace the old Liquid template. Understanding them separately is the fastest way to get unstuck.
The Four Pillars of Extensibility
- Checkout UI Extensions — small React-based components that add fields, banners, content blocks, product offers, or trust signals to specific regions of checkout. These are the most common customization most merchants need.
- Shopify Functions — server-side logic that runs inside Shopify's infrastructure to modify discounts, shipping rates, payment methods, or cart validation. Written in Rust, JavaScript, or TypeScript, compiled to WebAssembly, and executed in milliseconds.
- The Checkout Branding API — a GraphQL-based styling system that controls colors, typography, corner radius, spacing, and component schemes far beyond what the drag-and-drop editor exposes.
- Post-Purchase Extensions — a separate extension point for the page shown after the order is placed but before the thank-you page, used for one-click upsells and surveys.
The key mental shift: you are no longer editing the checkout. You are composing it from approved building blocks. Shopify owns the chrome, the form logic, the payment flows, and the security model. You own the content you slot into defined regions.
For a plain-English walkthrough of what a UI extension looks like in practice, Shopify.dev's checkout UI extensions documentation has the canonical reference and code samples for every target.
Checkout UI Extensions: What You Can and Cannot Do
UI extensions are what most people mean when they say "custom checkout." They are small React components (built with Shopify's @shopify/ui-extensions-react library) that mount into predefined "targets" on the checkout page.
Common Extension Targets
purchase.checkout.block.render— a generic block you can position anywhere merchants allow via the editorpurchase.checkout.delivery-address.render-before— add content above the shipping address formpurchase.checkout.payment-method-list.render-before— inject above the payment optionspurchase.checkout.reductions.render-after— add fields below the discount code inputpurchase.thank-you.block.render— content on the thank-you pagecustomer-account.order-status.block.render— extend the order status page merchants and customers see post-purchase
What You Can Build
- Trust badges and security signals near the payment method selector
- Custom fields like gift notes, delivery instructions, VAT numbers, or B2B PO numbers
- Product upsells and cross-sells rendered inline as the shopper checks out
- Loyalty widgets that show reward balances or let customers redeem points
- Conditional content based on cart contents, customer tags, or shipping address
- Delivery date pickers and scheduled-delivery UI
What You Cannot Do
- Override or replace Shopify's own checkout logic
- Modify the payment form, billing address form, or order summary calculations
- Run arbitrary scripts outside the sandbox (no third-party analytics injection at checkout — use web pixels instead)
- Access raw payment details, full card numbers, or CVVs
- Make synchronous network calls that block the shopper's progress
The sandbox is strict, and that strictness is the point. Your extension cannot slow down checkout or leak data because Shopify controls the execution environment. Shopify's checkout extensibility overview lays out the full target map if you are planning what to build.
Shopify Functions and the Branding API

The other two pillars run alongside UI extensions. Functions handle server-side logic; the Branding API handles design-system styling.
Shopify Functions: The Server-Side Half
If UI extensions are the face of extensibility, Functions are the brain — the replacement for Shopify Scripts (the old Ruby-based system for discount and shipping logic that was also deprecated).
What Functions Replace
| Old System | New System |
|---|---|
| Ruby Scripts for discounts | cart.lines.discountsAllocate function |
| Ruby Scripts for shipping | cart.delivery-options.rank and cart.delivery-options.transform |
| Ruby Scripts for payments | cart.payment-methods.rank and cart.payment-methods.hide |
| Cart validation (new) | cart.validations.generate |
Functions are written in Rust, JavaScript, or TypeScript, compiled to WebAssembly, and uploaded as part of a Shopify app. They execute on Shopify's infrastructure in milliseconds, meaning they can run on every cart update without hurting performance.
Typical Function Use Cases
- Tiered discounts like "buy 3 get the cheapest free" or "10% off when cart exceeds $200"
- VIP-only shipping rates surfaced for customers tagged with a loyalty tier
- Payment method gating — hide COD for international orders, hide express checkout for B2B
- Cart validation — block checkout if a regulated product ships to a restricted region
Functions are available on every Shopify plan, including Basic — this is important because merchants often assume all extensibility requires Plus. Custom discount and shipping logic via Functions does not. Per GemPages' guide to Shopify Functions, the only plan restriction is the number of Functions you can install (1 on Basic, unlimited on Plus).
The Branding API: Design System Control
The third pillar is the Checkout Branding API, a GraphQL mutation set that exposes deep styling controls not available in the drag-and-drop checkout editor.
What the Editor Gives You (All Plans)
- Logo, colors, fonts from Shopify's library, background image, basic layout
What the Branding API Adds (Plus Only)
- Corner radius control on every component type (small, base, large radii)
- Custom typography scales and letter spacing
- Color schemes (primary and secondary) that apply consistently across buttons, fields, and headings
- Global spacing and density control
- Header alignment, position, and logo sizing beyond the editor presets
- Divider styles, shadow depth, border weights
If your brand guidelines specify exact corner radii, a specific button hover state, or custom spacing between form fields, the Branding API is how you ship them. It is mutation-based, meaning you update the design system once via a GraphQL call and the checkout re-renders with the new tokens. Ecorn.agency's rundown of the Checkout Branding API walks through the mutations with real code.
Plan Requirements: What You Actually Need Shopify Plus For
This is the part that trips up every merchant. Extensibility is not binary — some parts work on every plan, and some require Shopify Plus.
What Works on Every Plan (Basic, Shopify, Advanced)
- The checkout editor (drag-and-drop section management, basic branding)
- UI extensions distributed through apps — you can install any app from the App Store that uses checkout extensions
- Shopify Functions (with a 1-Function limit on Basic)
- Checkout & Accounts editor for the thank-you and order status pages
What Requires Shopify Plus
- Building your own custom UI extensions and deploying them to your own store without publishing to the App Store
- The Checkout Branding API for advanced design-system control
- Checkout.liquid parity features like custom CSS injection at the checkout layer
- B2B checkout customization using company-location-aware extensions
- Headless checkout via the Storefront API with full extensibility
The practical implication: if you are on Basic or Shopify plan and you need a custom checkout field, your options are (1) install an app that provides it, or (2) upgrade to Plus to build it yourself. Shopify's pricing documentation lists current Plus pricing — it starts around $2,500/month, so the cost-benefit only works for stores doing significant volume. This is why most small and mid-market merchants live in the app ecosystem: the right app is almost always cheaper than the Plus upgrade plus developer time plus ongoing maintenance.
Common Use Cases Merchants Actually Build

Theoretical architecture is one thing. Here is what real stores deploy once they move to extensibility.
Trust Badges and Delivery Options
Trust badges — SSL icons, payment processor logos, a money-back-guarantee seal — render right above the payment method selector and typically lift conversion 1-3% on stores with no prior trust signals. Delivery customizations (date pickers, gift-wrap upsells, "leave at door" checkboxes that write to the order note) were the most common checkout.liquid use cases and now live cleanly as UI extensions.
Loyalty, Rewards, and Post-Purchase Upsells
Programs like Yotpo, LoyaltyLion, and Smile.io expose loyalty balance and redemption UI at checkout via their own extensions. Separately, post-purchase extensions show a one-click upsell on the page between payment and the thank-you page — apps like ReConvert and AfterSell specialize in this and work on every plan.
B2B Fields and Conditional Content
PO numbers, VAT IDs, resale certificates, and customer-specific discount codes matter enormously for B2B and wholesale checkouts and previously required custom Liquid. Conditional content — banners shown only to first-time customers, payment methods hidden by region, a free-shipping progress bar when cart subtotal crosses a threshold — all composes from the same extension primitives.
If you want the conversion-optimization lens on these use cases, our guide to Shopify checkout optimization tips for higher conversions digs into the measurement side. For the broader customization picture across plans, see our complete guide to customizing Shopify checkout.
The Migration Checklist: How to Move Off Checkout.liquid

If you still have legacy checkout.liquid code — or you are cleaning up a store that was force-migrated and lost functionality — work through these steps in order.
| Step | Action | Owner |
|---|---|---|
| 1 | Audit current customizations — list every block of custom Liquid, script, or app that touches checkout | Merchant + dev |
| 2 | Map each customization to an extensibility primitive (UI extension, Function, Branding API, or app replacement) | Developer |
| 3 | Check which customizations are now provided by apps you already use — often they are | Merchant |
| 4 | For custom fields, choose: build your own extension (Plus) or install a field app (any plan) | Merchant |
| 5 | For discount/shipping logic, port Ruby Scripts to Shopify Functions | Developer |
| 6 | For design system changes, implement the Branding API mutations via a script | Developer |
| 7 | Test the new checkout in a draft configuration before publishing | Merchant + dev |
| 8 | Publish the new configuration and archive the old one (do not delete until verified) | Merchant |
| 9 | Monitor checkout analytics for 30 days — watch completion rate, average time on step, and error events | Merchant |
| 10 | Remove legacy scripts, webhooks, and app installs that are no longer needed | Developer |
The "draft configuration" step (7) is critical. Shopify lets you create multiple checkout configurations, test them in preview, and promote one to live without downtime. Use it.
Breaking Changes to Watch in 2026
Even stores that migrated cleanly in 2025 are hitting new rough edges as Shopify iterates. Watch for these:
One-Page Checkout and Shop Pay
Shopify has consolidated the three-page checkout into a single-page experience for most merchants. Extensions targeted at page-specific anchors may render in unexpected positions, so test every extension in the one-page flow, not just the legacy three-page layout. Shopify's help docs on the unified checkout explain which targets map where. Shop Pay goes further: buyers skip most of the checkout entirely and land directly at payment confirmation, meaning any extension rendering before the payment step will not show for them.
App Conflicts and API Version Deprecation
Install two apps that render a trust-badge block in the same target and shoppers see two overlapping components — use the checkout editor to reorder or hide extensions, and audit any time you add a new checkout-facing app. Checkout UI extensions also use versioned APIs (2024-01, 2024-07, 2025-01, etc.) that Shopify deprecates on a rolling schedule. If you have not updated the API version in your shopify.extension.toml files, put a quarterly calendar reminder to audit them before stale extensions break.
Build Your Own vs. Use an App: The Decision
This is the question every merchant asks after they understand extensibility: do I build a custom extension, or do I install an app?
Build Your Own When
- You are on Shopify Plus and already have developer resources
- The customization is core to your brand or checkout experience
- Available apps do not match your exact flow or data model
- You need tight integration with an internal system (ERP, custom loyalty, B2B workflow)
- Long-term cost of app subscriptions exceeds development + maintenance
Use an App When
- You are on a plan below Plus (you cannot build your own without it)
- The functionality is commoditized — trust badges, delivery date pickers, upsells
- You want someone else maintaining the code as Shopify's APIs evolve
- Time-to-live matters more than pixel-perfect fit
- You lack in-house developer bandwidth
The app ecosystem is deep. For upsells, ReConvert and AfterSell dominate. For custom fields, apps like Checkout Plus and Checkout Blocks cover the common cases. For loyalty widgets, Yotpo, LoyaltyLion, and Smile.io all ship checkout extensions.
If you need help making the call for your specific stack, the Shopify experts network in our community is full of agencies who have run the build-vs-buy analysis on hundreds of stores.
Common Mistakes That Kill Extensibility Projects

Enough botched migrations and first-time extension builds have shipped to surface patterns that go wrong most often.
| Mistake | Why It Fails | Fix |
|---|---|---|
| Treating extensibility as a like-for-like port of checkout.liquid | Many old customizations were hacks; a clean extensibility build questions whether you need them at all | Audit by value, not by presence |
| Building on Basic/Shopify plan | You literally cannot deploy custom extensions without Plus or without publishing through the App Store | Confirm plan requirements before scoping |
| Skipping the staging checkout configuration | Pushing untested extensions to the live checkout has broken conversion for entire Black Friday weekends | Always clone, test, then promote |
| Hardcoding cart logic in UI extensions | UI extensions should not contain business logic — that belongs in Functions | Split: UI renders, Functions decide |
| Ignoring Shop Pay and express checkout flows | Most extensions never render for Shop Pay buyers because they skip the steps | Design extensions to degrade gracefully |
| Leaving unused web pixels and scripts installed | They add latency even if they no longer render | Remove old scripts after migration |
| Using the wrong anchor target | Extensions render in the wrong place because the dev targeted a deprecated anchor | Check the API version in every toml |
| Not updating API versions annually | Extensions silently break when Shopify retires the version | Quarterly API-version audit |
The biggest anti-pattern is treating extensibility as a chore instead of an opportunity. The migration forces you to re-examine every checkout customization you ever made — most were not pulling their weight. Use the forced audit to clean house.
What to Measure After You Ship
Extensibility work is only worthwhile if it moves a number. Track these in Shopify analytics and your broader stack after any meaningful checkout change:
- Checkout completion rate by device and customer type
- Average time on payment step — slow extensions will show up here first
- Order edit rate and post-purchase refund rate (high values suggest your fields are creating confusion)
- Shop Pay and express checkout share of total orders
- Upsell take rate for post-purchase extensions
- JavaScript error rate at checkout — spikes point to a broken extension
Fold this into whatever cadence you already use for your conversion optimization program. For deeper measurement patterns, Hostinger's checkout optimization guide has a useful framework for baselining.
Frequently Asked Questions
Is checkout.liquid completely gone?
Yes, for all merchants as of August 28, 2025. Any references to checkout.liquid in your theme files no longer render at checkout. If your admin still shows a legacy reference, it is inert.
Do I need Shopify Plus to use checkout extensibility?
No. You can install apps that use extensions on any plan. You need Plus to build and deploy your own custom extensions or to use the Branding API.
Will my existing apps still work?
Most of them, yes. Apps that properly migrated to UI extensions (nearly all major ones did) work across all plans. Apps that never migrated stopped working in 2025 — if you are still using an unmaintained app, replace it.
How much does it cost to build a custom extension?
Budget $5,000-$25,000 for a typical Plus-merchant extension, depending on complexity and whether you need backend logic (Functions) alongside the UI. Replo's breakdown of checkout extensibility costs has more detail on realistic developer rates.
Can I still use web pixels for analytics at checkout?
Yes. Web pixels are Shopify's sanctioned way to run analytics and marketing scripts at checkout — they are sandboxed and do not block rendering.
What happens if Shopify deprecates an extension API version?
You get advance notice (usually 12+ months), your existing extensions continue running until the cutoff date, and you need to update the version and redeploy before the deadline. Track this in your ops calendar.
Extensibility Is the Platform Now
Checkout extensibility is not a stopgap. It is how Shopify checkout works in 2026 and beyond, and every merchant needs a working mental model of the four pillars — UI extensions, Functions, the Branding API, and post-purchase extensions — even if you never write code yourself. Knowing what is possible is what lets you brief a developer, scope an agency, or pick the right app.
The workflow for most merchants: audit current checkout, identify what moved to extensibility, fill gaps with apps, and reserve custom development for what differentiates your brand. Our Talk Shop community includes hundreds of Shopify developers and agencies who have shipped extensibility projects on every plan tier — come ask questions, share what you built, and trade notes on what worked.
What is the first checkout customization you are planning to build or replace with extensibility?

About Talk Shop
The Talk Shop team — insights from our community of Shopify developers, merchants, and experts.
