Shopify theme development: the complete developer's guide
What theme development on Shopify involves end to end — the architecture, the tooling and the decisions that separate a good theme from an unmaintainable one.
11 min read · Themes & storefront ·
Shopify theme development is building the storefront layer of a store: the templates that render pages, the Liquid that pulls data out of Shopify, and the settings that let a merchant change things without calling you. It is not front-end development with a Shopify logo on it — the constraints are specific, and the difference between a theme that works and one that becomes a liability is almost entirely in how the configurable parts are designed.
This is the pillar for everything theme-related on this site.
What a theme actually is
A Shopify theme is a folder of files that Shopify renders server-side. There's no build step required, no server to run, and no database — Shopify holds the data and your templates decide how it appears. The pieces:
- Liquid templates that render each page type. Liquid basics covers the language.
- Sections and blocks — reusable, merchant-configurable pieces of a page. Sections and blocks explained.
- JSON templates that say which sections a page uses and in what order. JSON templates.
- Settings schema that defines what a merchant can change. Theme settings and schema.
- Assets — CSS, JavaScript, images and fonts.
- Locales — every user-facing string, so the theme can be translated. Localisation explains why this matters more than it looks.
The theme file structure walks through the folders.
The part that determines whether the theme is good
Not the design. The section architecture.
A theme is a product used by a person who isn't you. Before writing markup, decide which parts of each page a merchant will change, how often, and what shape those changes take. That produces a map of sections — what's configurable, what's fixed, what needs to repeat.
Get this wrong in either direction and the theme fails. Too rigid and every banner change is a developer ticket. Too flexible and the editor becomes two hundred settings nobody understands, which produces the same result for a different reason. How a custom theme is actually built goes through the process I use with clients.
The workflow
Modern theme work happens locally, in version control, with the Shopify CLI syncing to a development theme. The admin code editor is for emergencies.
That means: pull the theme into a repository, run the CLI's dev server for hot reloading against real store data, commit as you go, push to an unpublished theme for review, and publish when it's approved. The CLI workflow has the commands; development stores and staging covers where each stage should happen.
Building from scratch or on a base
Three legitimate starting points:
| Start from | When |
|---|---|
| Shopify's Dawn theme | Most custom builds. Modern, fast, well-structured, actively maintained. Customising Dawn. |
| A purchased theme | When the design is close and the budget is tight. Layer changes properly — custom vs bought. |
| Empty folder | Rare. Justified for unusual requirements or when you need total control of the output. From scratch. |
Starting from Dawn is the default answer for a reason: you inherit a sound architecture and accessibility baseline rather than reinventing both.
Performance is architecture, not polish
A theme is fast because it was built to be, or it isn't. Retrofitting speed onto a heavy theme is expensive and only partly effective. The decisions that matter are made early: how much JavaScript ships, whether CSS is split or monolithic, how images are sized and lazy-loaded, whether Liquid loops are bounded, and how many third-party requests the theme itself introduces. The theme performance checklist is the working list, and the speed audit is what happens when nobody followed it.
Apps and themes
Apps inject code into themes, and modern apps do it through theme app extensions — app blocks a merchant places in a section, isolated from your theme's own code. This is a significant improvement over the old model of editing theme files directly, and building your theme so app blocks have somewhere sensible to go is part of the job. Theme app extensions covers it.
Shipping it
A theme handover includes the repository, a short document of what each section does and where things are configured, and a walkthrough. Without those you've delivered a dependency rather than an asset — a point worth insisting on whether you're building it or commissioning it.
Then it has to stay maintainable: base themes update, and a theme modified without discipline can't take those updates. Updating a theme without losing your changes is the discipline.
The measure of a theme isn't how it looks on launch day. It's whether the merchant still enjoys using it in a year, and whether another developer can open it without swearing.
Everything in this guide
14 articles that go deeper on each part.
- How a custom Shopify theme is actually built
- Custom Shopify theme vs a bought theme: how to choose
- Shopify Liquid basics: the template language explained
- Shopify sections and blocks explained
- Shopify theme file structure: what every folder does
- How to build a Shopify theme from scratch
- Shopify CLI theme workflow: local development done properly
- Shopify JSON templates: how page layouts are assembled
- Shopify theme settings and settings_schema.json
- Customising Dawn: how far you can take Shopify's base theme
- Shopify theme app extensions: app blocks in themes
- Shopify theme performance checklist for developers
- Updating a Shopify theme without losing your customisations
- Shopify theme accessibility: what to build and what to check
Is this the problem you’re looking at?
Send me the link to your store and a line about what is going wrong. You get a straight answer within one business day — no pitch, no obligation.
[email protected]Or see what I do around Shopify: services, work beyond the theme, selected work.