Home/Documentation/Modifier Sets
MENU & CUSTOMIZATION

Modifier Sets, Selection Rules & Option Behaviors

Create flexible modifier groups (Sizes, Milks, Sweetness, Toppings), configure required vs. optional rules, and choose how inventory and pricing are managed.

Interactive Customizer Simulator & Live Bundle Output

Interactive Simulator

Select options below to observe how the system calculates totals in real time and bundles lines for checkout:

1. Cup Size * Required (BASE_VARIANT)
2. Milk Choice • Single-select
3. Add-on Toppings (Multi-select)
4. Sweetness Level: 50%
CART TRANSFORM BUNDLE RESULT
1x Roasted Oolong Milk Tea
• Size: Size M
• Milk: Oat Milk (+$0.80)
• Sweetness: 50% Sweetness
• Toppings: Golden Boba (+$0.75)
Bundle Total:$6.80

3 Supported Option Behaviors

OPTIONStandard

Simple Option Surcharge

Directly adds an amount to the parent line (e.g. Extra sauce +$0.50, Light Ice +$0.00). No Shopify variant needed behind the option.

BASE_VARIANTBest for Sizes

Native Variant Mapping

Maps each choice directly to a real Shopify Product Variant (Sizes S/M/L) for accurate inventory depletion and sales reporting by SKU.

COMMERCE_COMPONENTChild Inventory

Nested Component Line

Each modifier is backed by an independent Shopify inventory item. Automatically deducts raw ingredient or retail stock upon order placement.

Branch-Level Sold Out Overrides

When Branch A runs out of Oat Milk or Boba Pearls while Branch B still has stock:

Go to Settings > Locations > Menu Overrides, pick the location, and toggle Sold Out for that modifier. The option is immediately disabled on that location's Shopify POS terminals and dine-in QR menus without affecting other stores.

How Modifier Sets Connect to Your Shopify Products

Three separate links decide which options a product shows, which variant is charged, and what price the customer pays. The key point: links are stored by ID, not by name — so you can rename things freely without breaking your menu.

LINK 1

Product → Modifier Set

Each product lists the modifier sets it uses (e.g. Size, Milk, Toppings). Stored by set ID. Renaming a set never breaks the link.

LINK 2

Option → Shopify Variant

BASE_VARIANT and COMMERCE_COMPONENT options store the exact variant ID they charge. The option name and the Shopify variant title can be completely different.

LINK 3

Option → Price & Inventory

The linked variant supplies the price, sold-out status, and inventory. The option name is only what customers see on screen.

How an option gets linked the first time

When you create a BASE_VARIANT option (e.g. "Large") and assign it to a product, the system tries to auto-link it every time the menu loads:

1
It checks for a manual mapping
If you explicitly picked a variant for this option, that variant wins.
2
Otherwise it auto-matches by name
It compares the option name to the product's variant titles — ignoring spaces and letter case. On this first link, the name must match exactly. If it matches, the option automatically gets that variant's ID, price, and sold-out status.
3
If nothing matches
The option has no variant behind it, and the order falls back to the product's default variant. The price shown may not match what is charged.
First-time rule: for a BASE_VARIANT option to auto-link, its name should be exactly the same as the Shopify variant title (e.g. option "Large" ↔ variant "Large"). If you want a different display name (e.g. "Lớn" ↔ variant "Large"), set the mapping manually so the two stay linked.

What happens in each situation

SAFE
You rename a modifier set (e.g. "Cup Size" → "Size").
The product still shows the same options because the link is by ID. No re-assignment needed.
SAFE
You change the option name after it was linked (option "Lớn" → variant "Large").
Once a variant is already linked, the name no longer matters — the stored ID drives the charge. Important: keep the mapping when you rename, otherwise the auto-match may break.
AUTO
First time: the option name matches the variant title (e.g. option "Large" ↔ variant "Large").
The system links it automatically — correct variant, price, and inventory with zero manual setup.
CAREFUL
First time: the option name differs from the variant title (option "Lớn" ↔ variant "Large").
No auto-link — the option has no variant, so the order falls back to the product's default variant. Set the mapping manually to fix the price.
SAFE
You move an option to a different modifier set.
The system searches all sets and still finds the option. Orders keep working.
CAREFUL
You add a new option but forget to link a variant.
The system falls back to the product's default variant — the price may not match what the option shows. Always link a variant for size / base choices.
AVOID
Only the set name differs in letter case between screens (e.g. "Milk" vs "milk").
Set names are matched exactly, so case differences can break recognition in rare fallback paths. Keep set names consistent.
Merchant rule of thumb: the first time you create a size / base option, its name should match the Shopify variant title so the system can auto-link it. After that, the ID is what matters — you can rename freely as long as the option stays linked to its variant. When creating options, always pick the correct variant so prices are accurate.