Skip to content

Non-essential materials

A raw material can be marked non-essential. The flag does one specific thing: it excludes the material from the dynamic-adjustmentDynamic adjustmentA per-BOM toggle that recalculates the BOM's Shopify-displayed quantity from current component availability after every order. The displayed quantity is the bottleneck-resource count plus pre-assembled stock — your storefront never sells more than you can build. Read more → bottleneck calculationBottleneck resourceThe component with the lowest available-to-required ratio in a BOM. Determines the BOM's displayed Shopify quantity under dynamic adjustment: the BOM can build at most as many units as the bottleneck allows. Non-essential materials are excluded from this calculation. Read more → . The material is still consumed normally during BOM execution — it just doesn’t gate the displayed Shopify quantity.

  • What the flag does
  • What it does NOT do
  • A worked example
  • When to use it
  • Variant metafield exposure

When a BOM with dynamic adjustment on recomputes its displayed quantity, the bottleneck rule looks at every essential component and finds the minimum buildable count. The displayed quantity is that minimum (plus pre-assembled).

A non-essential component is skipped during this calculation. Its availability doesn’t constrain the displayed quantity.

The flag is only a hint for the bottleneck calc. It does not affect:

  • BOM execution at order time. The material is still consumed normally.
  • Refund/cancel restoration. Restored normally per the cascade rule.
  • Work-order picking or QC.
  • Pre-assembled drawdown.

In other words, marking a material non-essential is purely an optimism setting for the dynamic-adjustment recompute. You’re saying: “I have plenty of this; don’t let it cap how many of the BOM I can sell.”

A BOM has these components:

ComponentRequired per unitAvailableNon-essential?Build count contribution
RM-1 (wax)0.25100No400
RM-2 (wick)135No35
RM-3 (label)15Yes(skipped)
RM-4 (jar)190No90

Without the flag on RM-3: bottleneck is RM-3 at 5. BOM displays 5.

With the flag on RM-3: RM-3 is skipped. Bottleneck is RM-2 (wick) at 35. BOM displays 35.

The actual consumption at execution still decrements RM-3 by 1 per unit. The seller might run out of RM-3 mid-execution; that’s their accepted risk for marking it non-essential.

Mark a material non-essential when:

  • It’s plentiful and very rarely the bottleneck (labels, generic packaging, paper inserts).
  • Running out would be embarrassing but not blocking — you can substitute or reorder quickly.
  • You want the BOM’s displayed Shopify quantity to track the important components.

Don’t mark something non-essential if:

  • It’s a critical component you can’t easily substitute.
  • It has long lead times — you need the bottleneck calc to throttle sales.
  • You’re using it as a workaround for a recipe issue (better to fix the recipe).

Assemblified writes a metafield to the BOM’s Shopify variant during execution. For each component, the metafield includes an isEssential boolean — the inverse of isNonEssentialMaterial.

Storefronts can read this metafield to display “essential components” lists or otherwise reason about availability. This is opt-in for the storefront to use; Assemblified just writes the data.

  • Raw material detail page — there’s a checkbox or toggle for “non-essential”. The action saves it to the database.
  • Bulk spreadsheet (/app/raw-materials/spreadsheet) — set across many rows in one go.
  • The flag is a hint, not a constraint. A non-essential material running out doesn’t fail orders or block execution. It just means the dynamic adjustment was overly optimistic.
  • All-non-essential BOM is a corner case. A BOM whose components are all non-essential has no bottleneck — the recompute will fall through to a default (typically a high cap or skip-write). Avoid this configuration unless you really mean “ignore raw availability for this BOM” (in which case maybe disable dynamic adjustment instead).
  • Setting the flag late doesn’t reprocess past orders. Past dynamic-adjustment recomputes used whatever flag was set at the time. The current displayed quantity is based on the most recent recompute.