Skip to main content

Getting Started

Custom themes give you full control over the storefront by writing Liquid templates, CSS, and JavaScript from scratch. Unlike CSS-only themes that override an existing skeleton, a custom theme defines every visual section independently.

How It Works

  1. You write .liquid section files, optional home-sections/ blocks, a style.css, a script.js, schema.json, and optionally product-data-schema.json.
  2. You develop locally with the Easy Orders CLI (easyorders create / easyorders start) or upload through the admin panel (folder or individual files).
  3. The storefront renders each section using LiquidJS, injecting store data (products, categories, merchant settings) as template variables.
  4. Your CSS and JS are loaded globally on every page.

Theme Folder Structure

Every custom theme follows this exact folder layout:

my-theme/
├── sections/ ← 20 built-in section templates
│ ├── header.liquid
│ ├── footer.liquid
│ ├── gallery.liquid
│ ├── product-details.liquid
│ ├── product-description.liquid
│ ├── featured-products.liquid
│ ├── list-products.liquid
│ ├── home-products-grid.liquid
│ ├── products-grid.liquid
│ ├── related-products.liquid
│ ├── slider.liquid
│ ├── categories.liquid
│ ├── reviews.liquid
│ ├── fake-visitor.liquid
│ ├── fake-stock.liquid
│ ├── fake-counter.liquid
│ ├── breadcrumbs.liquid
│ ├── fixed-buy-button.liquid
│ ├── thanks.liquid
│ └── order-invoice.liquid
├── home-sections/ ← optional custom homepage blocks (see Home sections)
│ └── category-mosaic/
│ ├── config.json
│ └── template.liquid
├── style.css
├── script.js
├── schema.json ← global theme_data schema
└── product-data-schema.json ← per-product theme_data schema (optional)

When using the CLI, the theme/ folder also includes config.json (preview defaults for header, footer, announcement, palette) and theme-data.json (preview defaults for theme_data). Those two files are not part of the production upload map below.

File Map Reference

When you upload a theme folder, each file maps to a specific field:

File PathFieldTypeDescription
sections/header.liquidheaderSectionStore header with nav, cart, language
sections/footer.liquidfooterSectionStore footer with links, newsletter
sections/gallery.liquidgallerySectionProduct image gallery
sections/product-details.liquidproduct_detailsSectionProduct name, price, rating
sections/product-description.liquidproduct_descriptionSectionProduct description block
sections/featured-products.liquidfeatured_productsSectionFeatured products grid
sections/list-products.liquidlist_productsSectionProducts in list layout
sections/home-products-grid.liquidhome_products_gridSectionHomepage product grid with hero
sections/products-grid.liquidproducts_gridSectionProduct grid for search & collections
sections/related-products.liquidrelated_productsSectionRelated products on product page
sections/slider.liquidsliderSectionHero/image slider
sections/categories.liquidcategoriesSectionCategory listing
sections/reviews.liquidreviewsSectionProduct reviews
sections/fake-visitor.liquidfake_visitorSectionFake visitor counter
sections/fake-stock.liquidfake_stockSectionFake stock indicator
sections/fake-counter.liquidfake_counterSectionCountdown timer
sections/breadcrumbs.liquidbreadcrumbsSectionBreadcrumb navigation
sections/fixed-buy-button.liquidfixed_buy_buttonSectionSticky buy bar
sections/thanks.liquidthanksSectionThank-you page
sections/order-invoice.liquidorder_invoiceSectionOrder invoice view
style.csstheme_styleAssetGlobal CSS (minified on upload)
script.jstheme_scriptAssetGlobal JS (minified on upload)
schema.jsontheme_data_schemaSchemaGlobal dynamic settings schema
product-data-schema.jsonproduct_theme_schemaSchemaPer-product dynamic settings schema
home-sections/<name>/config.jsonhome_sectionsHomeCustom block metadata + section_schema
home-sections/<name>/template.liquidhome_sectionsHomeCustom block Liquid template

Folder names under home-sections/ become section keys with hyphens converted to underscores (e.g. category-mosaiccategory_mosaic). Each folder must contain both config.json and template.liquid.

Uploading Your Theme

You can upload your theme through the admin panel in two ways:

Folder Upload

Zip or select your entire theme folder. The system automatically maps each file to the correct field based on the folder structure above.

Individual Editing

Each section can also be edited individually through the built-in code editor in the admin panel. This is useful for quick fixes without re-uploading the entire theme.

Quick Start

  1. Scaffold with the CLIeasyorders create my-theme then easyorders start for live preview on your dev store (see CLI development).
  2. Edit the Liquid templates — each section receives specific variables (documented under Layout sections and Product sections).
  3. Write your CSS — use palette CSS variables for merchant-configurable colors.
  4. Define your schemasschema.json for global dynamic settings and optional product-data-schema.json for per-product settings.
  5. Upload and test — upload through the admin panel or keep using the CLI tunnel until you publish.

What's Next

TopicDescription
CLI developmentLocal dev server, tunnel preview, and config.json
Theme settingsHeader, footer, announcement bar, and palette config
PaletteMerchant-configurable colors as CSS variables (--hd-bg, etc.)
Dynamic theme dataschema.json, product-data-schema.json, and section_schema
Liquid referenceTemplate syntax, filters, and rendering
Layout sections · Product sections · Home sectionsBuilt-in sections + custom home-sections/ blocks
Events referenceCustom DOM events, link interception, and data attributes