What happens
On Dawn-family themes, Shopify.actions.updateCart() saves the product to the cart, but the header cart count and the cart drawer (or cart popup) do not update. A full page refresh is needed before they show the new item.
Horizon-family themes on the same store do update the cart count.
Dawn’s own Add to cart button still works. The problem is only the default updateCart refresh.
What I expected
The official docs say that if a theme does not configure updateCart, Shopify writes the cart, then refreshes Dawn or Horizon in place. On other themes it reloads the page.
After a successful updateCart on Dawn, the header count and the cart drawer should show the new item.
What I actually see
- The cart save works. Cart total quantity is 1. There are no user errors.
- Shopify then asks for theme pieces with a request like:
- Dawn: GET /cart.js?sections=cart-icon-bubble
- Some Dawn-family themes: GET /cart.js?sections=cart-notification-button,cart-icon-bubble
- The response is only cart JSON. It does not include the HTML for those pieces.
- The page does not reload.
- The header cart icon still looks empty.
- Opening the cart can still say the cart is empty, even if the total already shows the product price.
Themes I tried
| Theme | Result |
|---|---|
| Dawn | Fail. Count and drawer stay old. |
| custom Dawn | Fail. Same kind of request, no HTML in the response. |
| Taste | Fail. Same pattern. |
| Colorblock | Fail. Same pattern. |
| Horizon | Pass. Count updates to 1. |
| Tinker | Pass. Count updates to 1. |
I did not call updateCart.configure(). Shopify’s default handler was still on for Dawn.
How to reproduce on any store
- Use a Dawn-family theme (live or preview). Horizon is useful as a comparison.
- Open any product page.
- Empty the cart.
- In Chrome, press F12, open Console, and run the script below. Replace VARIANT_GID with a real variant from that store (from the product page, or from /products/HANDLE.js).
(async () => {
await fetch('/cart/clear.js', { method: 'POST', credentials: 'same-origin' });
const result = await Shopify.actions.updateCart({
lines: [{
merchandiseId: 'VARIANT_GID',
quantity: 1
}]
});
console.log(result);
await new Promise(r => setTimeout(r, 2000));
console.log('item_count', (await fetch('/cart.js').then(r => r.json())).item_count);
console.log('badge', document.querySelector('.cart-count-bubble')?.innerText || 'none');
})();