Quick summary
Shopify Liquid is the template language that controls how your store renders. For most customisations (colours, fonts, section layout), the theme editor is sufficient without touching code. For structural changes (new section types, custom metafield display, conditional logic), Liquid code edits are required and are best handled by a Shopify developer unless you are comfortable with HTML and templating logic.
You have a Shopify store and it almost looks how you want it. Almost. The font on your product title is not quite right. There is a section that needs a line of conditional text that only shows for products in a certain collection. You want to display a metafield value below the add-to-cart button.
You open the theme code editor and are met with files ending in .liquid. If you have never seen these before, the combination of HTML, strange curly brackets, and percent signs can feel like a foreign language. It is, in a sense. It is called Liquid, and understanding even the basics will change how you think about your store.
This guide does not turn you into a developer. It gives you a clear mental model of what Liquid is, what it can do, and where the sensible limits are for a merchant making their own changes.
What is Liquid and why does Shopify use it?
Liquid is a templating language created by Shopify and open-sourced in 2006. It sits between your store's data (products, collections, customers, cart) and the HTML that gets sent to a customer's browser.
When a customer visits your product page, Shopify does not serve a static HTML file. It runs your Liquid template, fills in the product data (title, price, images, variants, metafields), and outputs the final HTML. Liquid is the instruction set that tells Shopify how to do that.
The syntax has three components:
Objects — output data. Wrapped in double curly brackets.
{{ product.title }} outputs the product title. {{ cart.total_price | money }} outputs the cart total formatted as currency.
Filters — modify output. Added after a pipe character inside curly brackets.
{{ product.title | upcase }} outputs the title in uppercase. {{ article.published_at | date: "%B %d, %Y" }} formats a date.
Tags — control logic and flow. Wrapped in curly bracket and percent sign pairs.
{% if product.available %} starts a conditional block. {% for variant in product.variants %} starts a loop.
That is essentially the whole grammar. The complexity comes from knowing what data is available, which filters exist, and how to structure logic correctly.
What is the difference between theme editor changes and code changes?
This distinction matters a lot for understanding what is safe to touch.
Theme editor changes are made via the Shopify admin at Online Store, Themes, Customise. You click on sections, change settings, drag and drop, add or remove content blocks. No code is written. You are changing configuration values that Liquid reads, not the Liquid itself. These changes are reversible, show a live preview, and will not break your store.
Code changes are made via the theme code editor (Online Store, Themes, Actions, Edit code). You are directly modifying Liquid, CSS, JavaScript, and JSON files. A missing curly bracket or a wrong character can cause a section or an entire page to stop rendering. These changes do not have an undo button beyond reverting to a theme backup.
The rule of thumb: always attempt a theme editor solution first. Most merchants are surprised by how much is configurable without touching a single line of code.
If you do need to edit code, always duplicate your theme first (Themes, Actions, Duplicate). Edit the duplicate. Test it. Only publish when satisfied. This takes 30 seconds and has saved countless merchants from a broken storefront.
What can merchants realistically customise themselves?
Conditional text based on product data. The most common merchant request is showing different text for different products or variants. For example, showing a "Pre-order" badge when a variant's inventory is zero. This requires a basic {% if %} tag, which most merchants can handle with a template and careful copy-paste.
Displaying metafield values. If you have set up a product metafield (for example, a "Material" field), displaying it on the product page is a single line of Liquid: {{ product.metafields.custom.material.value }}. Adding this to the right place in your product template is usually achievable without deep Liquid knowledge.
Adding a simple HTML element to a section. If you want to add a trust badge image or a paragraph of text to a specific section, and you know roughly where in the file it should go, this is a safe small edit.
Adjusting CSS. If you are comfortable with CSS, editing your theme's CSS file (usually assets/base.css or similar) to change colours, spacing, or typography is low-risk as long as you are not removing existing rules blindly.
What gets harder: anything involving loops across multiple objects, conditional logic with multiple variables, rendering metaobject data, custom section schemas (the JSON that powers theme editor settings), and passing data between sections via JavaScript.
When should you use an app instead of code?
Apps are the right choice when:
- The feature is complex and an app already solves it reliably (product reviews, loyalty programmes, subscription billing, size guides with images)
- You need a non-technical team member to manage the feature ongoing
- The app costs less than developer time to build it from scratch
- The feature needs ongoing maintenance (updates, Shopify API compatibility)
Code is the right choice when:
- An app exists but adds too much page weight or you are already paying for too many apps
- The change is small and contained (a few lines of Liquid)
- You need precise control over design and placement
- An app adds features you do not need and the cost is not justified
A useful benchmark: Shopify stores with more than 10 installed apps see average page load times increase by 0.8 to 1.2 seconds compared to stores with 5 or fewer apps, according to Littledata's 2025 benchmark report. Every app you add has a performance cost. For simple display changes, a small code edit often beats an app.
When should you hire a developer instead of attempting it yourself?
Stop and get a developer when:
- You are modifying core template files (product-template.liquid, collection-template.liquid) without understanding the full structure
- You want to add custom section logic that requires a new schema
- You need to create a new section type from scratch
- You are integrating with a third-party API directly in Liquid or JavaScript
- The change involves your checkout (which requires Shopify Plus for customisation beyond the theme editor)
- You have already made a change and something looks broken
A good Shopify developer should quote a fixed price for a clearly scoped small customisation. A conditional metafield display, a badge based on a tag, or a simple custom section typically costs £100 to £300. If a quote feels high for what sounds like a small change, get a second opinion — but also ask whether you have fully explained the scope.
How to avoid breaking your theme
The most important habit: always duplicate before editing. Beyond that:
- Make one change at a time. If something breaks, you will know exactly what caused it.
- Use the code editor's preview function before publishing.
- Keep a note of exactly which file and line number you changed.
- Do not copy code from unverified sources without reading what it does. Random code snippets from Reddit or YouTube can introduce security issues or conflicts with your theme version.
- Avoid editing
theme.liquid(the master layout file) unless you are confident. A syntax error here breaks every page on your store.
If you use a version control system like GitHub via Shopify's GitHub integration, you get proper version history and can revert cleanly. This is worth setting up if you make regular code changes.
Key actions to take now
- Before touching any code, spend 30 minutes in your theme editor to understand what is already configurable without code changes. You may find what you need is already there.
- Duplicate your live theme before making any code edits. Do this every time, without exception.
- If you want to display a product metafield on your product page, try the single-line approach first:
{{ product.metafields.custom.your_field_key.value }}placed in the product description area of your template. - Audit your installed apps. If any are doing simple display tasks that could be handled with five lines of Liquid, investigate removing the app and replacing with code.
- For any change that involves modifying a core template file, get a developer quote. The cost of a professional fix is almost always less than the cost of a broken store.
- Set up Shopify's GitHub integration if you make regular code changes, to give yourself proper version history and rollback capability.
Frequently Asked Questions
Can I learn enough Liquid to handle most store customisations myself?
For simple changes, yes. The Liquid documentation is clear and Shopify's developer resources are extensive. The realistic limit for a merchant without a coding background is: outputting data with {{ }}, simple {% if %} conditionals, and looping over a small list with {% for %}. Beyond that, the risk of errors starts to outweigh the time saved by not hiring a developer.
Will Shopify theme updates break my custom code?
Automatic Shopify theme updates do not overwrite your code changes because Shopify does not push updates to your live theme. When Shopify releases a new version of Dawn or another official theme, you download the new version as a separate theme and have to re-apply your customisations manually. This is another reason to keep your code changes minimal and well-documented.
What is the difference between Liquid and JSON in theme files?
Modern Shopify themes (Online Store 2.0 and later) use JSON template files alongside Liquid. The JSON files define the section structure and settings for the theme editor, while Liquid files define how sections render. When you customise via the theme editor, you are editing the JSON. When you write conditional logic or output product data, you are working with Liquid. Both live in the same code editor and often complement each other.
Is there a way to test Liquid code without affecting my live store?
Yes. The Shopify Liquid Playground (at shopify.dev/tools/playground) lets you test Liquid syntax against sample data. For changes to your actual theme, always use a duplicated theme for testing before publishing to your live store.
