Every LaunchMyStore theme is a folder of plain text files laid out in a fixed,
Liquid-compatible directory structure. When you upload a theme ZIP, the
installer unpacks it, builds a schema index, then serves it to merchants
of that store.This page is the canonical reference for that directory tree.
LaunchMyStore is 100% Liquid-compatible. Existing Liquid themes work as-is
when zipped and uploaded. New themes may use the .aqua extension for
template files, but the two are interchangeable — themes can mix .liquid and
.aqua files freely.
Each directory has a specific role and a strict naming convention. The
storefront’s renderer caches every file in this tree, so edits only take
effect when the theme is republished.
Translation files for storefront copy and schema strings
.json
There is no partials/, views/, or components/. Anything reusable lives
under snippets/ or blocks/. The renderer ignores any files or directories
not listed above.
The assets/ folder holds all static files that the browser fetches
directly: stylesheets, JavaScript bundles, web fonts, images, SVG icons, and
anything else that isn’t a Liquid template.
CSS / JS: served as-is with the correct MIME type.
Images (.png, .jpg, .webp, .avif, .svg): served raw. For
responsive images, prefer image_url / img_url on uploaded images
rather than asset images, because the platform’s image optimization only
runs on uploaded resources.
Fonts (.woff, .woff2, .ttf): served with long-lived cache
headers. Reference via @font-face or use font_face filter on
font_picker settings.
Theme blocks are reusable, schema-driven content units that a merchant can
drop into any section that accepts them. They are the building blocks of the
new JSON section model.Each file is a single Aqua/Liquid template plus an optional {% schema %}
tag.
Blocks can also be nested. Inside a section block loop, {% content_for 'blocks' %} renders the merchant’s configured children in order. See
Templates and sections for the full block
composition model.
Sections are the largest reusable unit in a theme. Each .aqua / .liquid
file under sections/ is one section that can be referenced from a JSON
template, a section group, or a layout’s {% sections '...' %} tag.
A section group JSON file declares an ordered list of sections that render
together — typically the header bar, announcement bar, and meganav for the
top of every page; or the footer columns and copyright row for the bottom.
Every section file may include a {% schema %} block defining its settings,
block whitelist, presets, and template restrictions. See
Section Schema for the full reference.The schema is parsed once at install time, cached, and reused for every
render.
When apps are installed, their snippets/ directory is mounted into the
storefront’s snippet lookup path. A {% render 'app-snippet-name' %} call in
a theme will resolve to the app’s snippet if the theme doesn’t provide its
own with the same name — theme files always win over app files.
A theme can also provide a plain Liquid/Aqua template (e.g.
templates/gift_card.aqua). The renderer treats the whole file as one
template, evaluates it with the page’s global object in scope, and wraps
the result in the layout (unless {% layout none %} is present).
Schema for the Theme settings screen (colors, typography, layout).
settings_data.json
Merchant-chosen values for the above schema. Updated by the theme editor.
schema-index.json
Computed index of every section/block schema in the theme. Generated at install.
installation-manifest.json
(Optional) Diagnostic record of the install process. Safe to delete.
settings_schema.json follows the same input-setting format as section
schemas — see Input Settings. Merchant values are
exposed in Aqua as the global {{ settings.* }}:
schema-index.json is a build artifact — do not edit by hand. The
storefront uses it to find sections and blocks by type without scanning
the filesystem on every render.