Widgets & Llama Cart

Express payments setup

Add accelerated checkout buttons (PayPal, Apple Pay, Shop Pay, and more) to the Llama Cart, including the required theme snippet and styling controls.

Express payments are Shopify's accelerated, one-tap checkout buttons — PayPal, Apple Pay, Amazon Pay, Meta Pay, Shop Pay, and Google Pay — surfaced inside the Llama Cart footer so shoppers can pay without going through the full checkout flow. They're turned off by default and require a one-time theme snippet to work.

This guide explains what express payments do, how to install the required snippet, every styling option in the Payments tab, how the buttons render on the storefront, and the edge cases that trip merchants up most often.

What express payments are

Shopify generates a set of dynamic, wallet-based checkout buttons for each storefront based on your Shopify Payments configuration and the shopper's context. The Llama Cart captures those real buttons and repositions them into the cart drawer, so shoppers see familiar, fully functional payment buttons instead of a custom imitation.

Because they're Shopify's own buttons, clicking one starts that wallet's express checkout exactly as it would anywhere else on your store — the Llama Cart only changes where the button appears and how it looks.

Express payments are disabled until you both add the theme snippet (below) and enable at least one gateway in the Payments tab of the Customizer. A brand-new cart shows no express buttons until you do both.

Step 1 — Add the required theme snippet

The Llama Cart can't invent payment buttons. It uses a MutationObserver to watch the page for Shopify's real dynamic checkout buttons, then moves them into the drawer. If those buttons never appear on the page, there is nothing to capture — so you must add a small snippet that tells Shopify to render the dynamic checkout buttons into a hidden container the app can read from.

This is a one-time change to your live theme.

Open your theme code

In your Shopify admin, go to Online Store > Themes. Find your live theme, click the ... (three-dot) menu, and choose Edit code.

Open theme.liquid

In the code editor, open the layout folder and click theme.liquid.

Paste the snippet before </body>

Scroll to the bottom of the file and paste the snippet just before the closing </body> tag:

{% if additional_checkout_buttons %}
  <style>.lcu-dynamic-express-payments {display: none;}</style>
  <div class="additional-checkout-buttons lcu-dynamic-express-payments"> </div>
{% endif %}

The {% if additional_checkout_buttons %} guard renders the container only when your store actually has dynamic checkout buttons available. The inline <style> rule keeps the raw Shopify buttons hidden on the page — the app reveals them again once it has moved them into the drawer.

Save

Click Save. Open a storefront page, add a product to the cart, and confirm the express buttons now appear in the cart drawer footer.

Add this snippet only once. Shopify's additional_checkout_buttons object can only be rendered in one place. If your theme already prints it, or another app already added a similar container, adding a second copy can cause the buttons to render twice, render in the wrong place, or not render at all. See Conflicts with the theme or other apps below.

For the full walkthrough with screenshots, open the in-app guide: in the Payments tab, click Open step-by-step guide to setup Express Payments.

Step 2 — Enable and order gateways

Open the Customizer and go to the Payments tab. Under Payment Gateways you'll find the six supported gateways, each with an enable checkbox and a pair of up/down reorder arrows.

GatewayDefault state
PayPalEnabled
Apple PayEnabled
Amazon PayEnabled
Meta PayEnabled
Shop PayEnabled
Google PayEnabled

To configure them:

Turn gateways on or off

Use each gateway's checkbox to include or exclude it. Unchecking a gateway hides it from the cart even if Shopify could otherwise show it.

Reorder with the arrows

Use the up and down arrows on each row to set the on-screen sequence. The gateway at the top of the list renders first in the drawer; the bottom one renders last. The arrows are disabled at the ends of the list (you can't move the top item up or the bottom item down).

A gateway only appears to a shopper if it is both enabled here and available to that shopper from Shopify. Shopify only emits a wallet button when that wallet is turned on in your Shopify Payments settings and the shopper is eligible for it (their region, device, and browser support that wallet). So the cart can — and often will — show fewer buttons than you've enabled. Enabling a gateway here never forces a button to appear; it only allows one to appear when Shopify provides it.

Step 3 — Style the buttons

Below the gateway list, the Payments tab gives you full control over how the button stack looks. These settings apply to whichever buttons end up rendering.

SettingRangeDefaultWhat it controls
Payment buttons height25–55 px45 pxThe height of each express button.
Row gap between buttons0–20 px8 pxThe vertical space between stacked buttons.
Payment buttons border radius0–100 px3 pxHow rounded each button's corners are. Set to 0 for square buttons, higher for pill shapes.
Payment buttons alignmentLeft / Center / Right / Space betweenCenterHow buttons align within the footer. Space between spreads buttons across the full width.
Hide Buyer ConsentOn / OffOffHides the buyer-consent text that wallets show for accelerated checkout.

Alignment options in detail

OptionEffect
LeftButtons align to the start of the footer.
CenterButtons are centered in the footer (the default).
RightButtons align to the end of the footer.
Space betweenButtons are pushed apart so they span the footer's full width, with equal gaps between them.

When a subscription product is in the cart, accelerated checkout buttons display a line of buyer-consent / subscription text (the disclosure that the shopper is agreeing to a recurring purchase). Hide Buyer Consent removes that text from the express-payment area in the drawer.

Only hide buyer consent if you understand the compliance implications for your store and market. The consent line is there to disclose recurring billing for subscription items; hiding it is a presentation choice you're responsible for. Leave it off unless you have a specific reason to remove it.

How the buttons render

Understanding the render flow helps you diagnose "the buttons aren't showing" problems.

  • Capture, don't recreate. On the storefront, the cart watches the snippet's container for Shopify's dynamic checkout buttons, then moves each enabled button into its slot in the drawer footer and reveals it. Once all expected buttons are captured, the observer disconnects.
  • First-add refresh. When a shopper adds their first item to an empty cart, the app re-fetches the current page's HTML to pull a fresh copy of the dynamic checkout buttons. This is necessary because Shopify only generates wallet buttons once there's something to buy — so the very first add triggers a refresh to grab the up-to-date buttons.
  • Customizer preview is static. Inside the Customizer, the Payments tab shows static preview icons for the enabled gateways in your chosen order, sizing, and spacing — not live, clickable wallet buttons. This lets you lay out the design without a real cart, but it means the preview always shows every enabled gateway, even ones a real shopper might not be eligible for.

Because the preview is static, the only fully reliable way to confirm what shoppers actually see is to add a product on your live storefront and look at the real cart drawer.

Recipes

Lead with the two fastest wallets and drop the rest.

  1. In Payment Gateways, use the arrows to move Apple Pay to the top and Shop Pay second.
  2. Uncheck every other gateway (PayPal, Amazon Pay, Meta Pay, Google Pay).
  3. Leave styling at defaults, or set Alignment to Space between so the two buttons share the footer width.

Remember: shoppers on devices or browsers that don't support Apple Pay simply won't see that button, so keeping at least one broadly supported wallet enabled is usually safer.

A tight, modern button stack.

  1. Set Payment buttons height to 35 px.
  2. Set Row gap between buttons to 0 px.
  3. Set Payment buttons border radius to 0 px for square corners.
  4. Leave Alignment on Center, or switch to Left to match a left-aligned footer.

A store that sells subscription products and wants a cleaner express area.

  1. Enable the gateways your subscription checkout supports.
  2. Turn Hide Buyer Consent on to remove the subscription disclosure line from the express buttons in the drawer.
  3. Confirm with your own compliance requirements before going live — see the warning under Hide buyer consent.

Edge cases & troubleshooting

Conflicts with the theme or other apps

Shopify's additional_checkout_buttons can only be output in one location on a page. If your theme already renders dynamic checkout buttons, or another app injects its own additional-checkout-buttons container, adding the Llama Cart snippet creates a second source of the same buttons. The result is duplicated buttons, buttons appearing outside the drawer, or no buttons at all because the markup collides.

To fix it:

  • Add the Llama Cart snippet only once.
  • If another app or your theme already prints additional_checkout_buttons, remove or disable that copy so only one container exists, then keep the Llama Cart snippet.
  • After any change, re-test on the live storefront by adding a product and inspecting the cart drawer.

Advanced: track express payment clicks

If you run custom analytics, you can listen for both standard checkout clicks and express-payment clicks with a single DOM event, lcu:checkout:clicked, dispatched on document. For express buttons the event detail includes a type of 'express_payment' and the provider that was clicked (shop_pay, google_pay, paypal, amazon_pay, or apple_pay), along with the current cart object and a timestamp. See the developer guide on listening for checkout and express payment button clicks for the full payload.

Where to go next

On this page