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, a style.css, a script.js, and a schema.json.
  2. You upload them through the admin panel (either individually or as a folder).
  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/
│ ├── header.liquid
│ ├── footer.liquid
│ ├── gallery.liquid
│ ├── product-details.liquid
│ ├── product-description.liquid
│ ├── featured-products.liquid
│ ├── list-products.liquid
│ ├── grid-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
├── style.css
├── script.js
└── schema.json

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/grid-products.liquidgrid_productsSectionProducts in grid layout
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_schemaSchemaDynamic settings schema

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. Copy the Allbirds example as a starting point — it implements all 17 sections with a clean, modern design.
  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 schema — add dynamic settings so merchants can customize the theme without touching code.
  5. Upload and test — upload through the admin panel and preview on a test store.

What's Next

TopicDescription
PaletteMerchant-configurable colors as CSS variables (--hd-bg, etc.)
Dynamic Theme DataMerchant-configurable settings via schema.json
Liquid ReferenceTemplate syntax, filters, and rendering
Layout sections · Product sectionsAll 17 section templates with variables, events, and examples
Events ReferenceCustom DOM events, link interception, and section data attributes