Unlock More Sales: How to Add a Dynamic Free Shipping Progress Bar to Your Shopify Cart (Horizon Theme)

Hey everyone! As a Shopify migration expert, I spend a lot of time sifting through community discussions, and every now and then, a thread pops up that’s just brimming with actionable insights for store owners. Recently, I stumbled upon a fantastic conversation titled "Free Shipping Bar Progress" started by veluxe1, and it sparked some really valuable points about a feature that can genuinely move the needle for your store: a dynamic free shipping progress bar.

We all know the power of free shipping, right? It's a conversion magnet! But what's even better is letting your customers know exactly how close they are to unlocking it. That's where a progress bar comes in – it’s a subtle nudge, a gentle encouragement to add just one more item to their cart, boosting your average order value (AOV) in the process.

The Challenge: Modern Themes & Outdated Tutorials

veluxe1 initially reached out because they were struggling to implement a free shipping bar on their Shopify Horizon theme. They'd tried following older YouTube tutorials, but as many of us know, Shopify themes, especially newer ones like Horizon, evolve quickly. What worked last year might not work seamlessly today due to changes in theme structure and how cart updates are handled.

The core requirements were clear:

  • A bar at the top of the cart (drawer or page).
  • Dynamic filling based on cart total vs. a set threshold.
  • Messages that change from "You're $X away from free shipping!" to "You've unlocked free shipping!".
  • Real-time updates without a page reload.
  • Automatic currency formatting.

Community Insights: Yes, It's Possible Without an App!

The good news, as several community members like New_Dev, websensepro, and devcoders pointed out, is that this is absolutely achievable with custom code, no extra app needed! The key is understanding Horizon's modern architecture.

websensepro wisely advised against blindly following older tutorials, emphasizing that Horizon uses a newer theme structure and cart-update approach. They highlighted the importance of using Shopify's native shopify:cart:lines-update event for dynamic updates, ensuring a smooth user experience without unnecessary page reloads.

The Solution: A Clean Liquid Snippet for Horizon

The real gem in the thread came from Ploqo, who shared a fantastic, clean implementation. What makes this solution particularly elegant, as LDA2 pointed out, is that it leverages Liquid's native re-rendering capabilities within cart-products.liquid, avoiding the need for complex JavaScript fetch/polling loops that can add unnecessary overhead.

Here’s how to implement it, based on Ploqo’s instructions:

Step 1: Create the Free Shipping Bar Snippet

This snippet contains all the logic and styling for your progress bar.

  • Go to your Shopify Admin > Online Store > Themes.
  • Find your current theme (Horizon) and click … > Edit code.
  • Under the Snippets directory, click Add a new snippet.
  • Name it free-shipping-bar and paste the following code.
  • Important: Change 100 to your desired free shipping amount.
{% comment %} Free shipping progress bar. Change 100 to your free-shipping amount. {% endcomment %}
{% liquid
  assign threshold = 100
  assign threshold_cents = threshold | times: 100
  assign current = cart.total_price
  assign remaining = threshold_cents | minus: current
  assign percent = 0
  if threshold_cents > 0
    assign percent = current | times: 100.0 | divided_by: threshold_cents
  endif
  if percent > 100
    assign percent = 100
  endif
%}
{%- if cart.item_count > 0 -%}
  

{%- if remaining > 0 -%} You're {{ remaining | money }} away from free shipping {%- else -%} You've unlocked free shipping! {%- endif -%}

{%- endif -%}

Create the free-shipping-bar snippet and paste the code

Step 2: Display the Bar in Your Cart

Now, you need to tell your theme where to show this shiny new progress bar.

  • In the same Edit code section, open Snippets > cart-products.liquid.
  • Locate the line {%- else -%}.
  • Right after that line, add this single line of code, then Save:
{% render 'free-shipping-bar' %}

Add the one render line after {%- else -%} in cart-products.liquid

This single insertion point works because cart-products.liquid is often responsible for rendering both the cart drawer and the full cart page on Horizon themes.

Here's a peek at the result:

Cart drawer: how much more to spend for free shipping

Cart drawer: unlocked free shipping at the threshold

Crucial Caveats and Expert Tips

Now, while this solution is fantastic, there are a couple of really important points that LDA2 highlighted, which are absolutely vital for anyone implementing this:

  • Theme Specificity is Key: The file name cart-products.liquid and the exact insertion point {%- else -%} are specific to the Horizon theme. If you're on Dawn or an older/customized theme, you'll need to confirm your cart drawer template's actual file name and structure. Pasting this into the wrong place might not throw an error, but it simply won't work, which can be frustrating to debug! Always double-check your theme's documentation or structure.
  • Cart Total vs. Subtotal: The snippet uses cart.total_price by default, which means it calculates the amount after any discounts have been applied. If your store frequently runs high-value discount codes, this could mean customers unlock free shipping faster than you intended. If you prefer to base free shipping on the *original* subtotal before discounts, simply change cart.total_price to cart.items_subtotal_price in the snippet. Make this a deliberate business decision!

Customization and Alternatives

A few other handy notes from the thread:

  • Recoloring: You can easily change the bar's fill color by adjusting the --fsb-fill CSS variable in the snippet.
  • Real-time Updates: The beauty of this implementation is that it recalculates instantly when items are added or removed, without needing a full page reload, thanks to how Horizon re-renders the snippet.
  • Apps as an Alternative: If you're not comfortable diving into theme code, Ploqo also mentioned that there are plenty of free shipping bar apps like Hextom Free Shipping Bar, Essential Free Shipping Upsell, or Progressive Bar that do the same job without requiring any code edits. These can be a great option for those who prefer a no-code solution.

So, there you have it! A solid, community-tested way to add a dynamic free shipping progress bar to your Shopify Horizon store. It's a small change that can have a big impact on your customer's journey and your bottom line. Just remember those crucial theme-specific details and the discount considerations, and you'll be all set to encourage those extra sales!

Share:

Use cases

Explore use cases

Agencies, store owners, enterprise — find the migration path that fits.

Explore use cases