Setting types reference
Every input setting shares these attributes: type, id (unique within the
schema), label, plus optional default and info (help text shown under the
input). Each type also has its own required and optional attributes — supplying
the wrong ones, or a default the type can’t store, makes the theme fail
validation on save or import.
label, info, content, and option labels can all use the t: convention
to point at a key in your schema locale files (for example
"label": "t:settings.heading"). The renderer resolves t: strings to the
shopper’s locale before rendering — see
Locales and translation.
Text
| Type | Editor input |
|---|---|
text | Single-line text |
textarea | Multi-line plain text |
inline_richtext | Bold/italic/link, no block elements |
richtext | Full rich text — default may only use <p> or <ul> as top-level tags |
html | Raw HTML with a code editor |
liquid | Liquid code with a code editor — the only type whose value is evaluated as Liquid |
{ "type": "text", "id": "heading", "label": "Heading", "default": "Hello" }All of these accept a string default (a liquid default can’t be blank).
Numbers, toggles & choices
| Type | Editor input | Required attributes |
|---|---|---|
number | Number field | — |
range | Slider | min, max, default; step optional; unit optional |
checkbox | On/off toggle | — |
select | Dropdown | options: [{ "value", "label" }] |
radio | Radio buttons | options: [{ "value", "label" }] |
text_alignment | Left/center/right icon picker | — |
{ "type": "range", "id": "speed", "label": "Speed", "min": 1, "max": 10, "step": 1, "unit": "s", "default": 5 }Color & typography
| Type | Editor input | Notes |
|---|---|---|
color | Color picker (with alpha) | default must be a hex string |
color_background | CSS background value | Solid colors and gradients only — no url() / images |
color_scheme | Pick one of the theme’s color schemes | |
color_scheme_group | Defines the scheme palette itself | Theme settings only |
font_picker | Font from the platform library | Requires a default font handle; use with the font filters |
Media & links
| Type | Editor input | Notes |
|---|---|---|
image_picker | Image from the media library | Can’t carry a default |
video | Video from the media library | Can’t carry a default |
video_url | A YouTube or Vimeo URL | Requires accept |
url | Any URL or internal resource link | |
link_list | A navigation menu | default may be main-menu or footer |
{ "type": "video_url", "id": "promo", "label": "Promo video", "accept": ["youtube", "vimeo"] }Resources
| Type | Value in Liquid |
|---|---|
product / product_list | A product / array of products |
collection / collection_list | A collection / array of collections |
article / article_list | An article / array of articles |
blog | A blog |
page | A page |
metaobject / metaobject_list | A metaobject entry / array of entries |
{ "type": "collection", "id": "featured", "label": "Collection to feature" }The single-resource pickers article, blog, collection, page, and
product (along with image_picker and video) can’t define a default —
they resolve to whatever the merchant selects in the editor, and to a blank
value when nothing is selected. The _list types return an array; you set a
limit (max 50) and an optional array default. Each metaobject /
metaobject_list setting must declare its metaobject_type.
Sidebar elements (no value)
header and paragraph add a heading or a block of explanatory text between
inputs in the editor. They take a content attribute (which may be a t: key)
instead of id/label, hold no value, and can’t define an id:
{ "type": "header", "content": "t:settings.layout_heading" }Next steps
- Section schema reference — where these settings live, plus
blocks,presets, and targeting. - Dynamic sources — bind text and resource settings to product fields and metafields.
- Locales and translation — how
t:keys resolve to the shopper’s language. - Theme blocks and the visual editor guide.