Conditional Logic

Conditional logic lets you create rules that automatically show, hide, enable, or disable option blocks based on the user's current selections. This creates a guided, intelligent configuration experience.

How It Works

A conditional logic rule consists of three parts:

IF

Condition

When a specific option has a specific value selected...

THEN

Action

...perform an action on another option block.

ELSE

Fallback (Optional)

...otherwise, do something else.

Creating a Rule

  1. 1In the project editor, switch to Options mode.
  2. 2Click the "Conditional Logic" button (or lightning bolt icon) in the toolbar.
  3. 3Click "Add Rule".
  4. 4Set the IF condition: choose the source option block, the comparison operator (equals, not equals, contains, etc.), and the trigger value.
  5. 5Set the THEN action: choose the target option block and what should happen (show, hide, enable, disable, set value).
  6. 6Optionally, set an ELSE action for when the condition is not met.
  7. 7Save the rule. It takes effect immediately in the configurator.

Available Actions

ActionEffect
ShowMakes the target option block visible.
HideHides the target option block from the user.
EnableMakes the target option block interactive (clickable).
DisableGreys out the target option block so it cannot be changed.
Set ValueAutomatically sets the target option to a specific value.

Target Scopes

When creating a rule, you choose a target scope that determines what the rule affects. There are four scopes:

ScopeWhat It TargetsUse Case
Entire BlockThe whole option block UI panelHide an entire section (e.g. hide "Armrest Colour" when armrests are off).
Specific VariantsIndividual variant options within a blockHide indoor-only fabric options when "Outdoor" is selected.
MaterialsMaterial assignments on 3D objectsSwap the material applied to a part based on another selection (e.g. apply "Outdoor Paint" material when "Outdoor" is chosen). When a block becomes visible via a conditional rule, the default material is auto-applied to the viewport.
3D ObjectsWhole 3D objects in the viewport (UI stays visible)Hide the headrest mesh when "Minimal" style is chosen, while keeping the option block visible.
3D PartsIndividual mesh parts (sub-meshes) in the viewportHide stitching detail or logo embossing on a plain finish without affecting the parent object.
3D Objects vs 3D Parts: Use 3D Objects to target whole objects by their targetObjectName (e.g. "headrest_mesh") or via targetObjectIds in visibilityConfig. Use 3D Parts to target individual mesh parts by their targetPartName / targetPartNames (e.g. "logo_emboss", "stitching_detail"). Both 3D scopes affect only the viewport — the UI option block remains visible.
Multiple 3D objects in one 3D Parts rule (Enterprise · Modular): On Enterprise accounts, in a Modular project's Modular option block, the 3D Parts picker lets you select several 3D objects at once in Step 1 — Step 2 then shows a separate parts list for each selected object. This is ideal when the same rule has to hide/show matching parts across multiple module models (e.g. the ridge caps on every snapped roof variant). Everyone else sees the standard single-object picker. Each object only ever affects the parts you pick under it, so identically-named meshes in other models stay untouched.

Disable Snap Sides (Modular)

Modular blocks have a third THEN action — Disable — that restricts which faces of a host module a guest module is allowed to snap onto, without hiding anything. The module stays selectable and placeable; only the chosen snap sides become unavailable for that specific pairing. It is a connection rule, not a show/hide rule: it ignores the WHEN selection conditions and never affects pricing or visibility.

  1. 1Open the Modular block's Conditional Logic and click "Add Rule".
  2. 2Set the THEN action to "Disable" (only shown on Modular blocks).
  3. 3Under "Restrict module", pick the Modular block being restricted (the modules consumers drag) and optionally specific variants — leaving variants unchecked applies to all of them.
  4. 4Under "When connecting to (host)", pick the host Modular block (the module being snapped onto) and optionally specific host variants.
  5. 5Under "Disable these snap sides", tick the host's faces you want to block. A ticked side is blocked; everything else still snaps.
The sides are the host's faces. "Disable Front + Back" with host = Main Roof means an Extra Roof can no longer attach to the Main Roof's front or back faces. Blocks you don't reference in the rule are never restricted, and the restriction is enforced identically in the Preview modal and the public Share view.

Example: Roof System Snap Restriction

A roof builder with three Modular blocks — Main Roof, Extra Roof, and Side Walls. Extra Roofs should only extend a Main Roof sideways (left/right), never off its front or back, while Side Walls keep all their valid sides.

DISABLE snap sides for "Extra Roof" variants

HOST "Main Roof" — block Front, Back

Result: Extra Roofs snap to the Main Roof's left/right faces only. Side Walls (a separate, unreferenced block) still snap on all their valid sides.

Example: 3D Part Visibility

A sofa configurator where the decorative stitching and button cap details are hidden when the user selects a "Plain" finish, but the finish selector block remains visible.

IF "Finish Style" equals "Plain"

THEN Hide 3D Parts: "stitching_detail", "button_caps", "logo_emboss"

The option block UI stays fully interactive — only the mesh parts are hidden in the 3D viewport.

Examples

Example 1: Material-Dependent Colour Options

A sofa configurator has a "Material Type" dropdown (Leather, Fabric). Show different colour options depending on the selection.

IF "Material Type" equals "Leather"

THEN Show "Leather Colours"

ELSE Hide "Leather Colours"

IF "Material Type" equals "Fabric"

THEN Show "Fabric Colours"

ELSE Hide "Fabric Colours"

Automatic 3D material switching: When a block becomes visible because a conditional rule is triggered, the 3D viewport automatically applies the default (or previously-selected) material from that block to the model. For example, if you have separate "Leather Colours" and "Fabric Colours" blocks that show/hide based on "Material Type", switching from Leather to Fabric will automatically apply the first colour from "Fabric Colours" to the 3D object — the end user does not need to manually click a colour for the viewport to update.

Example 2: Size-Dependent Add-ons

A table configurator where "Extension Leaf" is only available for tables with length > 180cm.

IF "Table Length" greater than 180

THEN Show "Extension Leaf Option"

ELSE Hide "Extension Leaf Option"

Example 3: Cascading Selections

A bicycle configurator where choosing "Road Bike" frame type automatically sets tyre width to "23mm" and hides the "Suspension" option.

IF "Frame Type" equals "Road Bike"

THEN Set Value "Tyre Width" = "23mm"

IF "Frame Type" equals "Road Bike"

THEN Hide "Suspension Type"

ELSE Show "Suspension Type"

Advanced: AND / OR Multi-Conditions

For more complex scenarios, you can combine multiple conditions using AND (all must be true) and OR (any can be true) operators. This lets you build sophisticated configuration logic.

OperatorMeaningUse Case
ANDAll conditions must be true for the action to trigger.Show "Premium Engraving" only when BOTH "Material = Gold" AND "Size = Large".
ORAny one condition being true triggers the action.Show "Warranty" option when "Material = Steel" OR "Material = Aluminium".
NOTInverts a condition.Show "Paint Colour" only when material is NOT "Natural Wood".

Example 4: AND — Multiple Conditions Required

A laptop configurator where "4K Display Upgrade" is only shown when the user selects a high-end processor AND at least 16GB RAM.

IF "Processor" equals "Intel i9" AND "RAM" greater than or equals "16GB"

THEN Show "4K Display Upgrade"

ELSE Hide "4K Display Upgrade"

Example 5: OR — Any Condition Triggers

A kitchen configurator where the "Handle Style" option should appear when the user chooses any cabinet type that has handles (as opposed to push-to-open).

IF "Cabinet Type" equals "Shaker" OR "Cabinet Type" equals "Traditional" OR "Cabinet Type" equals "Country"

THEN Show "Handle Style"

ELSE Hide "Handle Style"

Example 6: Nested AND + OR — Complex Logic

A furniture configurator where a "Premium Fabric Protection" add-on is only available when the material is fabric (not leather/wood) AND the size is either Medium or Large.

IF (

"Material Type" equals "Fabric"

AND

( "Size" equals "Medium" OR "Size" equals "Large" )

)

THEN Show "Premium Fabric Protection" + Set Value "Protection Price" = "$49"

Modular Self-Snap Rules (Per-Instance)

In Modular projects, a Modular option block can reference itself in the WHEN clause. This lets you author rules that hide or show parts of a placed module only when another instance of the same module snaps onto it. By default the hide/show effect applies only to the host — the module that was already there (the previously-placed one) and gets snapped onto; the newly-added module that the customer just dropped to trigger the rule is not affected. If you instead want every connected module affected, switch the rule's "Apply to" control to Both modules or, for L/U-shaped runs, Whole chain (see below).

Example 6: Hide a side panel when another module connects on that side

A pergola configurator with an "Extension Roof" modular block. When two extension-roof modules are connected, the shared wall between them should disappear from the host module so the roofs read as one continuous piece.

THEN Hide 3D Parts on "Extension Roof" → skeleton_extra_side

WHEN "Extension Roof" (this block · self-snap) has selected, snapped on side Left

Result: only the host's skeleton_extra_side meshes hide — that's the roof that was already placed and got connected onto. The roof the customer just dropped to make the connection keeps all its parts. Other placed extension-roof instances that have nothing snapped on their Left side also keep every part visible.

How it evaluates per-instance: the rule runs once per placed module of the target block. For each host instance, only sibling modules whose snappedTo.moduleId equals that host (and that match the chosen side) are considered. Hide/show effects are written to a per-instance map and applied to that host's clone alone — never to the global model.
"Apply to": Connected module, Both modules, or Whole chain. Each self-snap rule that targets 3D Objects or 3D Parts shows an "Apply to" control in the THEN section:
  • Connected module (default) — affects only the existing module another one snapped onto. Because nothing has snapped onto the last module you added yet, that newest module keeps its parts. Adding the module 4 times (Module 1 ← Module 2 ← Module 3 ← Module 4) hides on Modules 1, 2, and 3 but not the 4th.
  • Both modules — also affects the module that was just snapped on, so every module in the chain is affected, including the last one you added. Use this when each connection in the run is made on the same side that the rule watches.
  • Whole chain — affects every module joined to the host in one continuous run of the same module, in both directions, stopping at a different module (e.g. the Main piece). Use this for L and U shapes, where a corner module snaps on a different side than the run was built on. Example: a straight run made by snapping extra roofs left-to-left, then a corner roof snapped onto the last one's front — "Both modules" would only reach the corner and the piece it touched, but "Whole chain" hides/shows the parts on the entire straight run as well.
All three only add modules to the effect — the host is always included — so changing the setting never makes the rule fire on the wrong piece. "Whole chain" is a superset of "Both modules", and because it re-evaluates whenever modules change, extending a run after a corner already exists still covers the new pieces.
Show rules work the same way: use a self-snap WHEN clause with action "Show" to reveal extra parts on the host only when another module connects to it (e.g. show a connector cap, decorative joint, or wiring channel that should only appear at junctions). The same "Apply to" control — including Whole chain — applies to Show rules, so a single connection can reveal parts across the entire run.
A Show rule can bring back a part a Hide rule hid. A Show rule reveals its target even if another rule hid the same part — including a part on a different module (e.g. an Extra Roof connection that hid a Main Roof corner). So you can build a reversible chain: connecting one module hides the corner, and completing the shape with a second connected module shows it again. How far the reveal reaches follows the "Apply to" setting: with Connected module or Both modules it reaches only the connected module and the one it's directly snapped onto (one hop), so it never spills onto unrelated modules deeper in the chain; with Whole chain it deliberately reaches every module in the continuous same-module run.
Target several modules in one rule (Enterprise): in a Modular project, an Enterprise account's 3D Parts rule can select multiple 3D objects at once — pick every module model the rule applies to in Step 1, then choose the parts to hide/show in each. A single rule can, for example, hide the connecting seam on both the Main Roof and the Extra Roof at the same time, with each object scoped to its own parts.
How far a connection reaches (direct snap-neighbour): when a global modular rule reacts to modules snapping together, it only looks at modules that are directly snapped to the module the rule belongs to. So if four modules are connected in a line (Module 1 → Module 2 → Module 3 → Module 4) and the rule hides parts on Module 1, then Module 2 (one snap away) can trigger it, but Module 3 and Module 4 never affect Module 1. A module snapped onto Module 2 is Module 2's connection, not Module 1's.

Creating Multi-Condition Rules

  1. 1Open the Conditional Logic panel and click "Add Rule".
  2. 2Set your first IF condition as normal.
  3. 3Click the "+ Add Condition" button below the first condition.
  4. 4Choose "AND" or "OR" to connect the new condition to the first.
  5. 5Set the second condition's source option block, operator, and value.
  6. 6Repeat to add more conditions as needed. You can mix AND and OR operators.
  7. 7Set the THEN and optional ELSE actions.
  8. 8Save the rule and test it in the Share preview.
Evaluation order: AND conditions are evaluated before OR conditions (standard boolean precedence). If you need different grouping, create separate rules — one per OR branch — each with its own AND conditions.
Testing tip: After creating rules, test them in the Share view preview. Switch between options to verify that conditional blocks appear and disappear as expected. For multi-condition rules, test all possible combinations to ensure they behave correctly.

More in Projects