A bill of materials is the recipe for a product you make: the components it is built from and how much of each one unit takes. It lives in Build in the Stockroom menu, on the Bills of materials view. Nothing moves when you save one - it is the definition. Builds (see Builds: plan, record and finish) are what consume components and add finished goods.
Create one
Click New bill of materials, pick the product (or variant) it builds, then add components with their quantity per unit. Quantities take decimals - 0.25 m of webbing, 12.5 g of wax - so a recipe can be exact. A component can be any product or variant in your catalog, including a material with a stock unit (see Materials with stock units), and including another product that has its own bill of materials - a sub-assembly you build first.
Counts toward buildable - on by default per component. Turn it off for things you never want to gate a build on (thank-you cards, packaging you always have) - the cost still rolls up, but they stop limiting Can build.
Active / Inactive - an inactive recipe is kept but offered nowhere.
Duplicate copies a recipe onto another product - the fastest way to set up a family of kits.
What the list tells you
Assembled cost - the components' current costs times their quantities, rolled up live. If any component has no cost yet it says so rather than showing a number that is too low.
Can build - how many units your stock covers right now, across your locations: the tightest component wins. Only tracked components that count toward buildable limit it.
Open a recipe and Print bill of materials prints it as a PDF with the costs; Export CSV on the list exports every recipe one row per component.
Import recipes by CSV
Import CSV takes one row per component: output_sku, component_sku, quantity, buildable. SKUs are matched first, then barcodes; a code that matches more than one product is refused so a recipe never lands on the wrong item. Re-importing an output SKU replaces its components, so you can fix a recipe by uploading it again. If any row for a product has a problem, that whole product is skipped and the report says why - you never get half a recipe.
Good to know
A product that is a Shopify bundle cannot have a bill of materials here and cannot be a component - Shopify works its inventory out from its own components, so there is nothing for Stockroom to move.
Recipes can nest up to 8 levels and cannot loop back on themselves - Stockroom checks when you save.
Deleting a recipe never touches inventory. Builds already created from it keep their own snapshot of the components.
Builds and bills of materials carry an Early access label. Purchase orders and receiving are free and stay free - that is the core of Stockroom; as it grows into deeper inventory management, the advanced end of that will be paid.

