Skip to content

Sub-Assemblies

A sub-assemblySub-AssemblyA reusable assembly block that composes into bigger BOMs. Define it once, include it in any BOM. At execution time, Assemblified expands the sub-assembly into its own components recursively. Read more → is a reusable bundle of components. Define it once, drop it into any number of BOMs. When a BOM that contains the sub-assembly executes, the sub-assembly is recursively expanded into its own components.

Sub-assemblies sit between raw materials (the leaves) and BOMs (the finished goods you sell). They have no Shopify variant of their own, so they don’t appear in your storefront — they’re pure recipe.

  • When to use a sub-assembly vs a flat BOM
  • How sub-assemblies relate to BOMs and raw materials
  • Pre-assembled stock at the sub-assembly level
  • Capability snapshot — every page in this section

Reach for a sub-assembly when:

  • Multiple BOMs share the same component group. If 20 of your candle BOMs all use the same wick + wax + jar, define a “Candle base” sub-assembly once and reference it in every BOM.
  • You build the bundle ahead of orders. A sub-assembly can carry its own pre-assembled stockPre-Assembled InventoryStock of finished sub-assemblies and BOM items that have already been built and are sitting on the shelf. When a work order needs a sub-assembly, it draws from pre-assembled inventory first and only builds fresh ones if the shelf comes up short. Read more → . Builds you finish ahead of time go on the shelf; the next BOM that needs the sub-assembly draws from the shelf first.
  • You want to model a step in your assembly process. Sub-assemblies don’t have to map to a sellable product. They can represent any stage that you complete and stock separately.
  • The recipe is shared but the finished product varies. 20 different candle scents share the same physical assembly recipe but have different scent-oil components. A “candle base” sub-assembly + per-scent oil component reduces duplication dramatically.

You don’t need a sub-assembly when each BOM has unique components — flat BOMs are fine.

BOM (sells one finished good)
├── Raw material X (qty 2)
├── Sub-assembly Y (qty 1)
│ ├── Raw material A (qty 3)
│ ├── Raw material B (qty 5)
│ └── Sub-assembly Z (qty 1) ← nesting
│ └── Raw material C (qty 1)
└── Raw material V (qty 1) ← virtual material possible too

When the BOM executes, this whole tree is walked, multiplying the parent quantity through each layer.

Sub-assemblies have their own pre-assembled shelves with the same dual-storage as BOMs (an aggregate count + per-location entries). When a parent BOM expands the sub-assembly during execution:

  1. The sub-assembly’s pre-assembled stock is consumed first.
  2. Only the remainder pulls the sub-assembly’s own components.

This drawdown is per-layer, recursively. A BOM with two layers of nested sub-assemblies has two opportunities for pre-assembled stock to absorb the requirement before raw materials are touched.

See Sub-Assemblies → Pre-assembled stock.

  • New to sub-assemblies? Read creating a sub-assembly to walk through your first one.
  • Already have BOMs and want to factor out shared components? Build the sub-assembly first, then update the BOMs to reference it.
  • Curious about cancel/refund behavior? Jump to keep-assembled cascade for the table.