- i only speak liquid
- Posts
- "i only speak liquid" #91: Debugging Liquid
"i only speak liquid" #91: Debugging Liquid
Written by Georgie (a Storetasker Expert)
Hey everyone,
This is Georgie’s 3rd edit of “i_only_speak_liquid”. Georgie is a developer based between Lisbon and NY. She’s contributed to projects for leading brands including John Frieda, Bioré and Bio Oil. Her expertise spans front-end development, Shopify e-commerce, EDM creation, and digital consulting.
Ofc: She’s an expert on Storetasker 😉 apply here.
Let’s dive in 🤿
—
But wait before we do: I want to give a shout out to our partners at Hookdeck. Their team has built a tool for Shopify developers like y’all. Here’s what it’s all about:
Losing webhooks? Reclaim your sanity with Hookdeck
Webhook issues led to customer complaints. Don’t let the next flash sale or bulk operation from your biggest merchant take down your app. Sound familiar?
Hookdeck Event Gateway acts as a middleware between Shopify webhooks and your app. It automatically queues webhooks, managing spikes and warning you of issues.
With a persistent event log, you can inspect, retry, and debug any webhooks.
Best of all, no code changes or background jobs required; just update your webhook URLs to get up to 10k free events per month.
What I’ve been thinking about:
Debugging in Liquid is one of those skills you only really appreciate once you’re deep in a build and something should be working… but isn’t. No console, no helpful errors. Just a page refusing to render what you want.
This might sound incredibly basic but it has been super helpful for me recently. Where I’ve found debugging useful lately is when I’m using metafields and metaobjects. I use them a lot, but I almost never remember the exact namespace, key, or structure off the top of my head, especially with metaobjects. Instead of trying multiple options, I’ve started leaning on debugging to tell me what’s actually available in that context. Although it’s quite messy, I find it’s faster, and way less frustrating.
How I debug metafields & metaobjects in Liquid
Just print the whole thing on the page
When I’m unsure about names, structure, or relationships, I dump the object immediately:
{{ product.metafields.custom.product_callout | json }}
{{ metaobject | json }}This is hands-down the easiest way to see:
Exact namespaces and keys
Whether a field is a reference, list, or text
How deeply things are nested
I find this much easier than trying to remember the correct dot notation from memory especially for metaobjects.
Inspect the specific thing you’re looping over
If I’m inside a loop and something isn’t showing up:
{% for item in shop.metaobjects.product_callouts.values %}
{{ item | json }}
{% endfor %}
Seeing the raw structure makes it immediately obvious whether:
The field exists
The name is wrong
I’m dealing with a reference vs a value
This has saved me so much time with metaobjects.
Use debugging instead of memorising patterns
With metaobjects especially, I’ve stopped trying to memorise patterns like:
shop.metaobjects.type.values
or remembering whether it’s .value, .values, or .reference.
I just print it once, confirm the shape, and then write the logic properly, it’s sooo much quicker!
Common metafield & metaobject gotchas
Forgetting to access .value on metafields
Treating references like plain text
Mixing up handles vs IDs
Using the wrong metaobject definition name
Pros and cons of this approach
Pros
Way faster than guessing
Makes metaobjects feel much less “magical”
Helps you actually understand the data model
Cons
Ugly output while debugging
Don’t forget to remove the debug before moving on!
Can be overwhelming on large objects
3 links you can’t miss:
For website inspiration, I love to check out these sites:
- Site Inspire
- Readymag.com
This one I found helpful when I started out with Liquid, they have some great short course available and a great community: www.superhi.com/
One learning as a freelancer:
I’ve learned to stop treating “I don’t remember the exact field name” as a failure. Debugging is the workflow. The faster I accept that Liquid is about inspection rather than recall, the faster I move and the less mental energy I waste trying to be perfect.


