Install Shopify CLI, run shopify theme init to clone the Skeleton starter theme, then shopify theme dev --store your-store to preview it at http://127.0.0.1:9292 with hot reload in Chrome. Edit Liquid, CSS and JSON templates locally, run shopify theme check for errors, and shopify theme push to upload.
| Command | What Shopify says it does |
|---|---|
| shopify theme init | Clones a Git repository to use as the starting point for building a theme |
| shopify theme dev | Uploads the theme as a development theme so you can preview it |
| shopify theme pull | Retrieves theme files from Shopify |
| shopify theme push | Uploads your local theme files to Shopify |
| shopify theme check | Runs Theme Check to analyze your theme code for errors |
| shopify theme share | Uploads your theme as a new, unpublished theme |
| shopify theme publish | Publishes an unpublished theme from your library |
Updated
Theme development means editing a store's design as real files on your computer, with your own editor and version control, instead of inside the admin. Click through the folder explorer below to learn what lives where, then copy the commands to get a preview running.
Each folder in a standard theme and what it holds. Pick one to highlight it.
Replace my-store with your store's myshopify name. Run them from an empty folder.
init clones the Skeleton starter; dev prints a local address that reloads your CSS and section edits.
shopify theme init my-theme
cd my-theme
shopify theme dev --store my-store
# open http://127.0.0.1:9292 in ChromeRun check before every upload. share creates a new unpublished copy, which is safest for client review.
shopify theme check
shopify theme share
shopify theme listOutput tags print values, logic tags decide what renders, and filters reshape a value.
The if tag hides the compare-at line when there is no sale; the money filter formats the price for the store's currency.
<h1>{{ product.title }}</h1>
<p>{{ product.price | money }}</p>
{% if product.compare_at_price > product.price %}
<p>Was {{ product.compare_at_price | money }}</p>
{% endif %}
A layout file wraps every page with the shared shell, such as the head tag and the header. A JSON template then picks which sections fill the page, and each section is a Liquid file that can contain blocks and snippets.
Store owners rearrange those sections in the theme editor. Your job as the developer is to make sections flexible with settings, so the owner never has to call you for a small change.
Pull before you start if anyone edited the theme in the admin, otherwise your push can overwrite their changes. The push command overwrites the remote version when you target an existing theme.
Use share to hand a client a preview: it uploads the theme as a new, unpublished copy in their library that they can look at before anything goes live.
Liquid is Shopify's template language. Double curly braces output a value, such as a product title, and curly brace percent tags hold logic like if statements and loops. Filters change how a value is shown.
Developers usually build on a development store created from a Shopify Partner account. Check the current terms in the Partner dashboard, as they can change.
A data file that lists the sections a page renders and their settings. It needs a sections object with at least one section and an order array of section IDs.
Shopify's getting-started guide says the hot reload preview works in Google Chrome only. In other browsers, refresh by hand.
The CLI's init command clones Skeleton, a minimal base for a theme built from scratch. Start from a full free theme if you mostly want to adjust an existing design.
Related: How to edit a Shopify theme, Shopify pricing, Free Shopify themes, Find which theme a store uses.
Start for free or see all free tools. We.Inc is free to start, with no card needed. AI building is on paid plans from $20 a month.
We.Inc is an AI-powered website builder you can resell under your own brand. Launch a branded client dashboard, bill on Stripe Connect, and deliver AI-generated websites in minutes. White-label plans start at $99 a month for 25 client sites, with a 7-day free trial and no per-site fees.