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-barand paste the following code. - Important: Change
100to 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 -%}

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' %}

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:


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.liquidand 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_priceby 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 changecart.total_pricetocart.items_subtotal_pricein 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-fillCSS 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!