Theme settings
Every theme settings group, how many settings it holds, and which code reads it.
Theme settings
Theme settings are defined in config/settings_schema.json and their saved values live in config/settings_data.json.
A merchandiser edits them through the theme editor, under Theme settings in the left sidebar.
Never hand-edit config/settings_data.json. Shopify writes it, and the next theme editor save or theme pull overwrites
your change.
Regenerate this page
python3 -c "
import json
for s in json.load(open('config/settings_schema.json')):
n = s.get('name', s.get('theme_name', 'theme_info'))
ids = [x.get('id') for x in s.get('settings', []) if x.get('id')]
print(f'{n} :: {len(ids)} settings')
for i in ids: print(' ', i)
"Groups
The schema has 30 groups holding around 300 settings between them.
| Group | Settings | Read by | Documented in |
|---|---|---|---|
| SEO - Page Titles | 20 | Plug in SEO Plus | SEO and tracking |
| SEO - Meta Descriptions | 17 | Plug in SEO Plus | SEO and tracking |
| SEO - Exclusions | 1 | layout/theme.liquid | SEO and tracking |
| SEO - Structured Data | 4 | Plug in SEO Plus | SEO and tracking |
| Brand | 4 | Layouts and header | |
| Color Settings | 21 | Theme stylesheets | |
| Typography | 6 | Theme stylesheets | |
| Animation | 4 | window.theme animation switches | |
| Search | 1 | Search behaviour | |
| Rewards Tiers | 36 | Progress bar, reward banners | Cart rewards and free gifts |
| Products grid | 6 | Collection and product grids | |
| Products | 40 | Product pages | |
| Cart | 13 | Cart page and drawer | |
| Social media | 11 | Footer and social meta tags | |
| Favicon | 1 | layout/theme.liquid | |
| Development Mode | 1 | BrowserSync access switch | |
| GTM Tracking | 2 | snippets/gtm.liquid | SEO and tracking |
| Klaviyo | 13 | Offer popups, back in stock | Popups and forms |
| Medispa | 20 | Booking availability, toasts, form IDs | MediSpa booking |
| Medispa - Call Us Popup | 10 | MediSpa call popup | |
| Medispa - Terms & Conditions Popup | 2 | MediSpa terms popup | |
| Medispa Deposit | 6 | Booking calendar, cart line labels | MediSpa booking |
| Medispa PDP - Meet our team | 2 | MediSpa product page | |
| PDP - Two Up Section - General Settings | 2 | Product page two-up block | |
| PDP - Two Up Section - First | 6 | Product page two-up block | |
| PDP - Two Up Section - Second | 6 | Product page two-up block | |
| Popup Manager | 2 | snippets/popup-logic.liquid | Popups and forms |
| Need Help Finding Something Popup | 15 | Need Help popup | Popups and forms |
| Swym Wishlist Plus - Custom Element Settings | 5 | Swym wishlist |
Rewards Tiers
The group holds four tiers with eight settings each, all following the same naming pattern.
| Setting | Type | Purpose |
|---|---|---|
tier_N_price_threshold | number | Cart subtotal in dollars that unlocks the tier |
tier_N_title | text | Tier name on the homepage banner |
tier_N_cart_title | text | Tier name in the cart drawer |
tier_N_image | image_picker | Tier thumbnail |
tier_N_subtitle_desktop | text | Desktop supporting line |
tier_N_subtitle_mobile | text | Mobile supporting line |
tier_N_encouragement_message | text | Homepage prompt before the tier unlocks |
tier_N_cart_encouragement_message | text | Cart drawer prompt before the tier unlocks |
The group also has four settings for the Unlock Free Bonus section: unlock_free_bonus_title,
unlock_free_bonus_description, unlock_free_bonus_cta and unlock_free_bonus_link.
Encouragement messages accept {remaining_amount} and {threshold_money} placeholders.
A tier with a blank tier_N_price_threshold is skipped. A tier with a blank tier_N_title is not pushed into
window.theme.cartRewardBanner.rewardTiers.
Medispa
| Setting | Type | Purpose |
|---|---|---|
show_booking_availability | checkbox | Master switch for remaining-slots messaging |
booking_availability_operating_mode | select | Real data or simulated on a timer |
booking_availability_demo_tick_timer_secs_minimum | number | Simulated decrement minimum |
booking_availability_demo_tick_timer_secs_maximum | number | Simulated decrement maximum |
booking_timeframe_days | number | Days ahead the calendar offers |
start_date_type | select | What the timeframe is relative to |
booking_availability_low_threshold | number | When to show the low-availability line |
booking_availability_low_copy | text | Low-availability text |
booking_availability_anon_name | text | Anonymous booker name |
booking_availability_user_name | text | Named booker name |
show_booking_toasts | checkbox | Master switch for recent-booking toasts |
booking_toasts_lifespan_seconds | number | How long a toast stays |
booking_toasts_timestamp_interval_seconds | number | Timestamp refresh interval |
booking_toasts_visible_count | number | Toasts visible at once |
booking_toasts_just_now_label | text | Label for a very recent booking |
booking_toasts_copy | textarea | Toast text |
booking_toasts_custom_css | textarea | Extra CSS for toasts |
medispa_booking_form_id | text | Klaviyo booking form, desktop |
medispa_booking_form_id_mobile | text | Klaviyo booking form, mobile |
medispa_zapier_webhook_url | url | Where booking intent is posted |
booking_availability_operating_mode decides whether the numbers customers see reflect real bookings. Confirm which
mode the live theme uses before describing them as real.
Medispa Deposit
| Setting | Type | Purpose |
|---|---|---|
medispa_deposit_message | text | Cart message against a booking |
medispa_remaining_amount_line_item_label | text | Balance owing label |
medispa_remaining_amount_line_item_value_template | text | Balance owing template |
medispa_deposit_amount | number | Default deposit in dollars |
medispa_pay_in_store_label_price | number | Fallback Pay In Clinic total |
medispa_deposit_timezone | select | Timezone for appointment times |
Both money settings are in dollars. The calendar prefers the selected product's own metafields and falls back to these.
Popup Manager
| Setting | Type | Purpose |
|---|---|---|
enable_popup_manager | checkbox | Whether the manager runs |
popup_manager_blacklist | textarea | One selector,type per line |
GTM Tracking
| Setting | Type | Purpose |
|---|---|---|
gtm_enabled | checkbox | Whether the container renders |
gtm_id | text | Container ID, GTM-XXXXXXX |
SEO - Exclusions
| Setting | Type | Purpose |
|---|---|---|
seo_noindex_pages | textarea | One path per line, matched exactly against request.path |
Two further noindex rules are hard-coded in layout/theme.liquid and cannot be edited here. Products tagged no-index
are excluded, and any page showing a tag filter is excluded.
Adding a setting
- Add it to the right group in
config/settings_schema.json. - Read it in Liquid as
settings.your_setting_id. - If JavaScript needs it, write it to
window.themeand declare it insrc/@types/global.ts. - Add a row here and to the relevant Operations page.
Choose theme settings only for values that describe presentation across the store. A value describing one product belongs on the product as a metafield. A value describing one instance of a section belongs in that section's own schema.