Data
Themes & environments
The ignore list, seeding, and store passwords.
shopify.theme.toml defines five environments: development,
development-seed, staging, production and bootstrap. Set the store
domains and theme IDs before first use.
shopify theme dev -e developmentshopify theme push -e productionThe ignore list
Every environment ignores four things:
templates/*.jsontemplates/customers/*.jsonsections/*.json # section groupsconfig/settings_data.jsonThese belong to the merchant. The theme editor rewrites them whenever anyone adds a section or changes a setting, so pushing your copies would wipe their work.
development needs this too: shopify theme dev replaces the dev theme with
your local files on every run, so without the ignore list every editor change
is gone the next time you start.
The catch
Files nobody pushes are also files nobody initialises. A fresh theme has none of them, and fails in confusing ways:
| Symptom | Missing | Fix |
|---|---|---|
| Every page 404s | templates/*.json | npm run shopify:dev:seed |
| Header or footer isn't there | sections/*-group.json | npm run shopify:push:groups |
| "No colour schemes defined" | config/settings_data.json | npm run shopify:push:settings |
npm run shopify:dev:seed does all three at once against a new theme. Use
npm run shopify:bootstrap for a brand new store.
Going the other way, npm run shopify:pull brings editor changes back into
src/ so you can commit them.
⚠️ Pushing
settings_data.jsonoverwrites everything the merchant set — fonts, colours, logo. Runnpm run shopify:pullfirst if there's anything worth keeping.
⚠️ A misspelled
-eis not an error. The CLI silently falls back to defaults, which means no ignore list. If a push starts asking which theme to overwrite, check your spelling.
Password-protected stores
Development stores are always password protected. Put the password in
.env.local:
export SHOPIFY_FLAG_STORE_PASSWORD='your-storefront-password'shopify:dev and shopify:console source it automatically. Nothing else needs
it — push, pull and check go through the Admin API.
You can put store-password in shopify.theme.toml, but don't: that file is
committed, and the CLI prints every value from it to your terminal on every run.