# Orderkraft > Orderkraft is a Shopify embedded app for merchants who sell made-to-order products. It adds a production layer that Shopify doesn't have: manufacturing orders, bills of materials, production lead times, and fulfillment coordination for brands that build products after the order comes in. Shopify handles inventory and transactions well. It doesn't know what still needs to be produced. Orderkraft sits between the sale and the shipment, turning each made-to-order line item into a trackable manufacturing order with its materials, lead time, and place in the production queue. When production is complete, fulfillment is released — without anyone chasing a spreadsheet to make it happen. Built by Codeture (Enschede, Netherlands), a small software and consulting company that has spent years working inside ERPs, fulfillment systems, and Shopify stores that needed production tooling and didn't have it. Stefan Vermaas is the founder. ## Who Orderkraft is for Orderkraft is built for Shopify merchants whose products are built when sold, not pulled from a shelf. Common fits: - Custom furniture and upholstery brands - Made-to-spec apparel (e.g. print-on-demand, sewn-to-order) - Brands with product configurators (options that change what gets built) - Equipment manufacturers with build options - Any catalog that mixes stocked items with made-to-order items If you're currently bridging the gap between Shopify and your production floor with spreadsheets, Airtable, Zapier automations, or a person who just knows how the system works, Orderkraft is likely worth a look. ## Core concepts **Made-to-order product**: A Shopify product flagged as made-to-order in Orderkraft. Flagging it attaches a bill of materials, production time ranges, and a dock-to-stock time range. Orderkraft writes this data back to Shopify as metafields and metaobjects, so it's portable and visible to other apps. **Bill of materials (BOM)**: Connects a Shopify product to the raw materials and components needed to build it. Components can have their own BOMs, so Orderkraft can model multi-level assemblies — not just flat parts lists. **Manufacturing order (MO)**: Created automatically when a made-to-order item is sold. Carries the materials needed, the lead time, the Shopify order reference, and a status that moves through the production queue. **Production lead time**: Stored as a range (min and max), split into production time and dock-to-stock time. The total drives the delivery promise shown on the product page. Updating the BOM in Orderkraft updates the storefront on the next page load. **Split shipments**: A Shopify fulfillment constraint (implemented as a Shopify Function) that ships stocked items immediately and made-to-order items once production is complete. Prevents a two-week wait on a chair from holding up a t-shirt in the same order. **Production location**: A Shopify location designated as where production happens. Orderkraft uses it to route made-to-order items to the right facility and keep them separate from fulfillment inventory until they're ready. ## What Orderkraft does today - Marks Shopify products as made-to-order, with BOMs, production times, and dock-to-stock times - Maintains a catalog of raw materials and components inside Orderkraft (separate from Shopify inventory) - Automatically creates manufacturing orders from made-to-order Shopify sales - Tracks MTO revenue, MTO order counts, and average lead time over rolling 30-day windows - Shows a live lead time block on the Shopify product page ("Made to order / ships in 5–7 days") - Enables split shipments so stocked and made-to-order items in the same order fulfill separately - Writes portable data back to Shopify (metafields, metaobjects, fulfillment constraints) Advanced production planning, capacity scheduling, and machine-level work routing are not features today. ## How an order flows through Orderkraft 1. A customer checks out on Shopify. The order lands. 2. Orderkraft receives the `orders/create` webhook and pulls the order from Shopify's Admin GraphQL API. 3. It checks whether any line item is made-to-order. Stocked line items are ignored. 4. For each made-to-order line item, Orderkraft resolves the bill of materials and creates a manufacturing order. 5. Required components and raw materials are reserved against on-hand stock. Shortfalls surface before they reach the warehouse. 6. If split shipments are enabled, stocked items are released for fulfillment immediately. Made-to-order items wait for production. 7. The manufacturing order moves through production stages in Orderkraft. Storefront lead times stay in sync. 8. When production is complete, Orderkraft releases the remaining items for fulfillment on Shopify. ## What Orderkraft reads from and writes to Shopify Reads: - Orders (via `orders/create` webhook and Admin GraphQL API) - Products (to flag made-to-order, read variants and options) - Locations (to sync and classify production vs. fulfillment facilities) Writes: - `Made to Order` metafield on products (boolean) - `Production Lead Time` metaobject on products (time ranges, total calculated lead time) - `Location Type` metafield on locations (fulfillment / production / fulfillment & production) - `Split Shipments` fulfillment constraint (Shopify Function) - `Lead Time Block` theme app extension (renders on the product page) If Orderkraft is uninstalled, it cleans up the metafields and metaobjects it created. Products, orders, and locations are not touched. ## Installation Install from the Shopify App Store. Orderkraft is an embedded app — it runs inside your Shopify Admin and doesn't require a separate login or account. It doesn't replace any existing apps, products, orders, or locations. During install, Orderkraft asks for read/write access to orders, products, locations, metaobjects, metaobject definitions, and fulfillment constraint rules. These are the minimum permissions needed to do the work described above. After install, your Shopify locations sync automatically (usually within a minute) and three metafield definitions are created on your store. ## Pricing There is one plan, **Everything**, and every feature is in it. No add-ons, no support tiers, no per-user charge. It includes a 14-day free trial with no charge at all during the trial, usage included. Billing runs through Shopify every 30 days in USD. Two parts: - **Base fee**: $29/month, the same on every account. - **Usage**: a graduated fee per completed manufacturing order, like tax brackets — crossing a threshold only changes the rate on the orders above it. | Manufacturing orders per month | Rate each | | --- | --- | | 1 – 200 | $0.75 | | 201 – 1,000 | $0.55 | | 1,001 – 3,000 | $0.40 | | 3,001 – 10,000 | $0.22 | | 10,001 and up | $0.12 | Worked examples (base plus graduated usage): 200 = $179. 1,000 = $619. 3,000 = $1,419. 10,000 = $2,959. The unit is the manufacturing order, not the Shopify order. One Shopify order with 50 engraved recipients creates 50 manufacturing orders and bills as 50. Usage is charged when a manufacturing order reaches completed. Cancelled production is never charged. Stocked items that ship from inventory never create a manufacturing order, and neither does production run to replenish stock with no sales order behind it. ## Marketing pages - [Homepage](https://www.orderkraft.com/): What Orderkraft is, who it's for, how it works, and pricing summary. - [About](https://www.orderkraft.com/about/): The story behind Orderkraft — why Codeture built it, what they kept seeing in production-heavy Shopify stores, and what they're working toward. - [Pricing](https://www.orderkraft.com/pricing/): The single plan, the graduated rate card, an interactive calculator, what counts as a manufacturing order, and the billing FAQ. - [Integrations](https://www.orderkraft.com/integrations/): The Shopify product option apps, personalizers, and payment partners Orderkraft works with. Any app that stores customer choices as line item properties can be read by Orderkraft. ## Features https://www.orderkraft.com/features/ lists all of them; the ones below link directly to each page. - [Manufacturing orders](https://www.orderkraft.com/features/manufacturing-orders/): Every order that needs production becomes a manufacturing order automatically, carrying the materials, customisation, and lead time your floor needs. - [Bill of materials](https://www.orderkraft.com/features/bill-of-materials/): Build a bill of materials for any product so Orderkraft knows exactly what to allocate and produce, for furniture, bikes, or anything assembled from parts. - [Raw materials catalog](https://www.orderkraft.com/features/raw-materials-catalog/): Keep the materials and components that go into your made-to-order products in one catalog, ready to attach to a bill of materials. - [Manufacturing plans](https://www.orderkraft.com/features/manufacturing-plans/): Create reusable production workflows that define the steps, order, and dependencies for building your products. Standardize your manufacturing process. - [Customisations](https://www.orderkraft.com/features/customisations/): Engraving, embroidery, or a gift message on an otherwise stocked product still becomes a customisation your production team can actually read. - [Production and dock-to-stock time](https://www.orderkraft.com/features/production-time-settings/): Set how long a product actually takes to build and how long it takes to arrive once it's built, the two numbers your storefront lead time is made from. - [Customisation previews](https://www.orderkraft.com/features/customisation-previews/): See what a customer actually chose for their engraving, embroidery, or personalisation before it reaches the production floor. - [Built-on-the-fly products](https://www.orderkraft.com/features/built-on-the-fly/): When a customer builds their own product from components picked at checkout, like a charm bracelet, Orderkraft knows exactly what needs assembling. - [Manufacturing order holds](https://www.orderkraft.com/features/manufacturing-order-holds/): Pause a manufacturing order with a reason, and lift it later. A full audit trail of why production stopped and when it resumed. - [Bulk hold actions](https://www.orderkraft.com/features/bulk-hold-actions/): Place or lift holds on many manufacturing orders at once, instead of clicking into each one during a busy week. - [Production locations](https://www.orderkraft.com/features/production-locations/): Mark a Shopify location as a production location so Orderkraft knows where made-to-order items actually get built, separate from locations that only fulfill. - [Multi-location production](https://www.orderkraft.com/features/multi-location-production/): Run production across more than one location, some building, some only fulfilling, and have manufacturing orders route to the right one. - [Storefront lead times](https://www.orderkraft.com/features/lead-times/): Show a real made-to-order lead time on the product page, calculated from your production and dock-to-stock time, not a marketing guess. - [Lead time storefront block](https://www.orderkraft.com/features/lead-time-theme-block/): A theme app extension block that shows the calculated lead time on the product page, without a custom theme change. - [Split shipments](https://www.orderkraft.com/features/split-shipments/): A native Shopify fulfillment constraint that ships stocked items immediately while holding made-to-order items back until production completes. - [Production status on the order page](https://www.orderkraft.com/features/order-page-status/): See where a made-to-order or personalised line item actually stands in production, right on the Shopify order page. No separate system to check. - [Customer account production tracking](https://www.orderkraft.com/features/customer-account-tracking/): Let customers see the production status of their made-to-order or personalised item in their Shopify customer account, without emailing to ask. - [Shopify Flow triggers](https://www.orderkraft.com/features/shopify-flow-triggers/): Manufacturing order status changes fire events into Shopify Flow, so you can automate what happens next without a custom integration. - [Works with your product-options app](https://www.orderkraft.com/features/product-options-compatibility/): Orderkraft isn't a product-options app. It reads what your existing one already captures, whether that's Infinite Options, Bold, Easify, Hulk, or another. ## Documentation - [Introduction](https://www.orderkraft.com/docs/getting-started/introduction/): What Orderkraft is, what it does today, and who it's for. - [How Orderkraft fits in](https://www.orderkraft.com/docs/getting-started/how-it-fits/): What Orderkraft reads from Shopify, what it writes back, and what lives only inside Orderkraft. - [Install Orderkraft on Shopify](https://www.orderkraft.com/docs/setup/install-the-app/): What happens when you install Orderkraft, what permissions it asks for, and what it sets up automatically on your store. - [Set up your first made-to-order product](https://www.orderkraft.com/docs/setup/your-first-product/): How to mark a Shopify product as made-to-order and set the production times that drive its delivery promise. - [Set up manufacturing plans](https://www.orderkraft.com/docs/setup/set-up-manufacturing-plans/): Step-by-step guide to creating reusable manufacturing plans in Orderkraft that automatically generate work orders for matching manufacturing orders. - [Set a production location](https://www.orderkraft.com/docs/setup/set-a-production-location/): How to designate a Shopify location as a production facility so made-to-order items get fulfilled from the right place. - [Enable split shipments](https://www.orderkraft.com/docs/setup/enable-split-shipments/): Turn on the made-to-order fulfillment constraint so stocked items don't sit around waiting for production to finish. - [Show lead times on your storefront](https://www.orderkraft.com/docs/setup/show-lead-times-on-your-storefront/): Add the Orderkraft lead time block to your product pages so customers see the delivery promise before they check out. - [Track production on the Shopify order page](https://www.orderkraft.com/docs/setup/track-production-on-the-order-page/): See the manufacturing orders behind a customer's order, and their full production history, without leaving Shopify Admin. - [Show production status to customers](https://www.orderkraft.com/docs/setup/show-production-status-to-customers/): Add the Orderkraft manufacturing status block to customer accounts so customers can see what's being built on their own order page. - [Set up product customisations](https://www.orderkraft.com/docs/setup/set-up-product-customisations/): Mark a product customisable, define the intents that recognise personalisation, and test them with a real order. - [Set up built on the fly](https://www.orderkraft.com/docs/setup/set-up-built-on-the-fly/): Tell Orderkraft which storefront convention groups a product's picked parts, set the built on the fly strategy, and decide whether missing parts become materials. - [Made-to-order in Orderkraft](https://www.orderkraft.com/docs/concepts/made-to-order/): How Orderkraft models a made-to-order product: bill of materials, time ranges, raw materials, and components. - [Made-to-order orders](https://www.orderkraft.com/docs/concepts/made-to-order-orders/): What Orderkraft does when a customer buys a made-to-order item, and how that flows into the dashboard. - [Manufacturing orders](https://www.orderkraft.com/docs/concepts/manufacturing-orders/): What a manufacturing order is, the statuses it moves through, when it has to ship, and how those statuses roll up to the order line a customer sees. - [Manufacturing plans](https://www.orderkraft.com/docs/concepts/manufacturing-plans/): Standardize your production workflows with reusable manufacturing plans that define the steps, dependencies, and order for building your products consistently. - [Customisations](https://www.orderkraft.com/docs/concepts/customisations/): How Orderkraft turns personalisation on an order line into named customisations on a manufacturing order. - [Built on the fly](https://www.orderkraft.com/docs/concepts/built-on-the-fly/): How Orderkraft handles products assembled from parts the customer picks in the cart, and how to tell it which convention your store uses. - [Ship-by dates](https://www.orderkraft.com/docs/concepts/ship-by-dates/): How Orderkraft snapshots the date a made-to-order manufacturing order has to leave the building, and what the urgency badges on production mean. - [Automate with Shopify Flow](https://www.orderkraft.com/docs/automation/shopify-flow/): How Orderkraft's production events reach Shopify Flow, when they fire, and what you can build on top of them. - [Flow trigger reference](https://www.orderkraft.com/docs/automation/flow-triggers/): Every Orderkraft trigger available in Shopify Flow, when it fires, and the fields it passes to your workflow. ## Changelog - [Manufacturing plans](https://www.orderkraft.com/changelog/manufacturing-plans/) (2026-10-09): Standardize production with reusable manufacturing plans that define steps, dependencies, and sequencing for consistent, error-free builds. - [Sorting on the manufacturing queue](https://www.orderkraft.com/changelog/sorting-on-manufacturing-orders/) (2026-09-11): A sort button next to the filters picks order date or ship-by date, looks through the pagination, and stays put as you switch tabs and locations. - [Bulk actions across production](https://www.orderkraft.com/changelog/bulk-actions/) (2026-09-08): Select any rows on the products, variants, or manufacturing orders tables and the shared action bar opens up, so a slipped delivery doesn't have to be clicked through order by order. - [Ship-by dates on manufacturing orders](https://www.orderkraft.com/changelog/ship-by-dates/) (2026-09-04): Every made-to-order manufacturing order now carries a snapshot ship-by date, with badges that tell production what's urgent before the promise breaks. - [Built on the fly](https://www.orderkraft.com/changelog/built-on-the-fly/) (2026-09-03): Products assembled from parts the customer picks now get their own manufacturing order, instead of leaving production to guess what goes together. - [Customisations on regular products](https://www.orderkraft.com/changelog/customisations-on-regular-products/) (2026-08-19): Mark a product you stock as customisable, and an engraving or monogram on an order line produces a manufacturing order with the instruction on it. - [Production status inside Shopify](https://www.orderkraft.com/changelog/production-status-in-shopify/) (2026-08-05): Production status now shows on the Shopify order page and in customer accounts, so nobody has to open Orderkraft to see where an order stands. - [Production events in Shopify Flow](https://www.orderkraft.com/changelog/shopify-flow-triggers/) (2026-07-21): Orderkraft now publishes seven Shopify Flow triggers, so a manufacturing order changing status can tag an order, email a customer, or ping Slack. --- Source: https://www.orderkraft.com/features/manufacturing-orders/ Last updated: 2026-09-09 # Manufacturing orders Shopify knows what got sold. It doesn't know what still needs to be built. That gap is where a manufacturing order lives. When a made-to-order, personalised, or built-on-the-fly line item sells, Orderkraft creates a manufacturing order for it. That record carries whatever your floor actually needs: the bill of materials for a furniture piece, the engraving text for a stocked towel, the components a customer picked for their own bracelet. One object, whichever shape the order takes. From there it moves through a real status: draft, waiting, in progress, on hold, completed. Anyone can see what's queued without opening a spreadsheet or asking ops directly. When it completes, fulfillment releases. Not before. This is the core object everything else in Orderkraft hangs off. Lead times read from it, the order page shows its status, Shopify Flow fires on its transitions, and it's what you're billed for, never the stocked items that ship straight from inventory. **What creates a manufacturing order?** Any sale of a made-to-order product, a personalised stocked item, or a built-on-the-fly product. Regular stocked items with nothing to build never create one. **Can one manufacturing order cover more than one product?** No. Each manufacturing order carries a single output, the same way most production-planning tools work. If an order has three made-to-order line items, that's three manufacturing orders. **What happens to the order line before production starts?** It sits in the queue with a status of draft or waiting. Nothing about how you sell changes. The manufacturing order is what happens after the sale, not instead of it. --- Source: https://www.orderkraft.com/features/bill-of-materials/ Last updated: 2026-09-09 # Bill of materials A bill of materials is the answer to "what does this actually take to build?" Set once per product, then read automatically every time it sells. For a furniture piece or a bike, that might be a frame, a set of legs, hardware, and a finish. Orderkraft explodes that list into the manufacturing order the moment the order lands, in the right quantities, so nothing gets allocated by hand and nothing gets forgotten. Production time and dock-to-stock time live on the bill of materials too, which is what makes the lead time on your product page real instead of a guess. Change the BOM, and every lead time reading from it updates with it. It's built for real assemblies, not a flat parts list: an input on a bill of materials can itself be a component with its own bill of materials, so a sub-assembly gets defined once and reused across every finished good that needs it. **What can a bill of materials be made from?** Raw materials, components, or even other products and their variants. A BOM can nest, so a finished piece of furniture can be built from sub-assemblies that each have their own bill of materials. **Does this replace an inventory system?** No. It tracks what a made-to-order product consumes to get built, not general warehouse stock. Orderkraft is deliberately not a WMS. **What happens if I change a product's bill of materials?** New orders use the updated version. Manufacturing orders already in progress keep the materials they were created with, so a mid-week spec change doesn't rewrite work that's already underway. --- Source: https://www.orderkraft.com/features/raw-materials-catalog/ Last updated: 2026-09-09 # Raw materials catalog Every bill of materials points at entries in this catalog: the fabric, hardware, or sub-assemblies that get consumed when a manufacturing order is built. Materials get created as you go, including automatically from a matched SKU on an incoming sales line, so the catalog grows with your actual product setup instead of needing to be populated up front. **What's the difference between a raw material and a component?** A raw material is bought as-is, like fabric, hardware, or a blank. A component is itself built from a bill of materials, so it can nest inside a larger assembly. --- Source: https://www.orderkraft.com/features/manufacturing-plans/ Last updated: 2026-09-09 # Manufacturing plans A manufacturing plan standardizes your production workflow. Define the sequence of steps once—cut, sew, finish, pack—and apply it automatically to every matching manufacturing order. Some products always need the same build process. Others have a fixed order that can't be changed on the fly. A manufacturing plan captures that workflow and reuses it, so your team starts every job with a proven workflow instead of a blank sheet. ## How manufacturing plans work A manufacturing plan is a list of steps with explicit dependencies. Fabric cutting must finish before sewing starts. Packing waits for finishing and quality check. The plan makes these relationships crystal clear, so there's no ambiguity about what runs next. Steps are built from reusable work order templates. Create "Final QC" once, and every plan that needs it can pick that same template. ## Assigning plans to products Plans connect to products through targets. Assign a plan to: - A specific product variant (for unique builds) - An entire product (for standard builds) - A collection (for shared workflows) - Or set it as your shop's default plan (for a one-size-fits-all workflow) A made-to-order sofa might have its own dedicated plan. Every furniture variant in a collection might share one. Or your entire workshop might run off a single default plan. ## From plan to work orders When a manufacturing order arrives, Orderkraft matches it to the most specific available plan and copies that plan's steps into the order as work orders, preserving all dependencies between them. The manufacturing order then picks up production where the plan left off—with nothing to set up by hand, and no risk of missing steps or wrong sequencing. It's the difference between starting every job with a blank sheet and starting every job with a proven plan. The plan gets refined over time; the individual orders just follow it. **What is a manufacturing plan?** A manufacturing plan is a reusable workflow that defines the sequence of steps required to build a product, including dependencies between steps. Think of it as a recipe card for your production floor. **How does a manufacturing order get its plan?** Automatically. Orderkraft matches each manufacturing order to the most specific plan based on this hierarchy: product variant first, then the product itself, then its collections, and finally the shop default plan. **Can I reuse steps across different plans?** Yes. Each step is built from a reusable work order template. Create "Final QC" once, and every plan that needs it can use the same template. **What happens when I change a plan?** New manufacturing orders get the updated version. Orders already in production keep the steps they were created with, so mid-week changes don't disrupt work already underway. **What does the auto-complete setting do?** When enabled, completing the last work order on a manufacturing order automatically completes the entire manufacturing order itself, removing an extra click from your floor's workflow. --- Source: https://www.orderkraft.com/features/customisations/ Last updated: 2026-09-09 # Customisations Not every order that needs work is made-to-order. A towel that already exists still needs someone to embroider a name on it before it ships. Orderkraft reads the line item attribute your customer filled in, maps it through a customisation intent to a name your production team recognises, and attaches it to a manufacturing order. Regular, stocked product. Real production step. Both true at once. This is what closes a gap that swallows a lot of personalisation apps. They capture the customer's choice beautifully on the storefront, then dump it, unlabelled, onto the order line for someone to decode by hand. Orderkraft picks it up from there and gives it a name your floor already understands. Multiple customisations on one line item work the same way. Each one lands as its own record, so a corporate gifting order with a different name per recipient doesn't collapse into a single unreadable string. **Does the product need to be made-to-order for this to work?** No. A regular, stocked product still triggers a manufacturing order the moment it carries a matched customisation. That's the whole point. The towel exists; the embroidery on it is what needs building. **Where does the customisation data come from?** Line item attributes, Shopify's only mechanism for carrying personalisation on an order line, whichever app your customers used to enter it. **What if the same attribute means different things across products?** Customisation intents map a specific attribute key to a name your team reads, per product. The same raw attribute can mean different things on different products without your floor having to guess. --- Source: https://www.orderkraft.com/features/production-time-settings/ Last updated: 2026-09-09 # Production and dock-to-stock time Production time is how long it takes to build. Dock-to-stock time is how long it takes to arrive and become ready to ship once it's built. Both live on the bill of materials, in whatever unit makes sense: minutes, hours, days, weeks, or months. Add them together and that's the lead time your product page shows. Change either one and every lead time built from that bill of materials updates immediately. **Why two numbers instead of one lead time?** Building something and getting it from the supplier to your shelf are different clocks, often with different bottlenecks. Keeping them separate makes each one easier to fix when it's wrong. --- Source: https://www.orderkraft.com/features/customisation-previews/ Last updated: 2026-09-09 # Customisation previews A customisation intent maps raw checkout data to a name your team recognises. A preview goes one step further and shows what that data actually resolves to for a specific order, before anyone picks up the piece. That's the difference between "custom_field_3: yes" sitting on a line item and someone on the floor actually knowing what to engrave. **Why does a preview matter if the text is already on the order?** Raw line item attributes are built for checkout, not for a bench. A preview presents the same data the way someone building it actually needs to read it. --- Source: https://www.orderkraft.com/features/built-on-the-fly/ Last updated: 2026-09-09 # Built-on-the-fly products Some products don't exist until the customer builds them. A charm bracelet where they pick every charm. A bundle assembled from whatever they added to their own cart. Nobody's holding a finished version in stock, because there isn't a single finished version. Orderkraft reads what the customer actually chose and turns it into a manufacturing order carrying the exact components picked. Not a generic "custom order" line, but the specific parts that need to be put together. It works with your storefront's actual data shape rather than forcing a specific configurator. Some tools write the customer's choices as a single Shopify bundle, others as several cart lines linked together. Orderkraft decomposes either one back into a real build. Once it's a manufacturing order, it behaves like any other. It gets a lead time, it can be held, it shows its status on the order page, and fulfillment waits until it's actually assembled. **How is this different from a made-to-order product?** Made-to-order starts from a bill of materials you define. Built-on-the-fly starts from components the customer picks at checkout, like a charm bracelet where they choose each charm. **Does my storefront need to work a specific way for this to work?** No. Orderkraft supports two ways a configurator can hand off the customer's choices, as a single Shopify bundle or as several linked cart lines, and reads whichever one your storefront actually produces. **Can a built-on-the-fly product also be personalised?** Yes. A customer-configured bracelet can still carry an engraving on top of the components they picked. The two capabilities stack. --- Source: https://www.orderkraft.com/features/manufacturing-order-holds/ Last updated: 2026-09-09 # Manufacturing order holds Production stops for real reasons: a materials shortage, a quality problem, a customer change request. A hold records why, not just that. Every hold carries a reason and a timestamp, and stays visible on the manufacturing order through the order page and anywhere else its status shows up, so nobody has to ask why something stalled. **What happens to a held manufacturing order?** It stops moving through production, and fulfillment stays blocked, until the hold is lifted. The reason and timing stay on record. --- Source: https://www.orderkraft.com/features/bulk-hold-actions/ Last updated: 2026-09-09 # Bulk hold actions When one problem affects a batch of manufacturing orders, a delayed material shipment or a supplier issue, holding them one at a time doesn't scale. Select the affected orders and place or lift the hold across all of them together. The reason and timestamp still get recorded the same way as an individual hold, so the audit trail doesn't get thinner just because the action was faster. **When does this actually matter?** A materials shortage or a supplier delay rarely affects just one order. Bulk actions mean one delay doesn't turn into fifty individual clicks. --- Source: https://www.orderkraft.com/features/production-locations/ Last updated: 2026-09-09 # Production locations Not every Shopify location does the same job. Some hold stock and fulfill orders. Others are where made-to-order items actually get built. Marking a location as a production location tells Orderkraft which is which. That distinction is what makes split shipments and the fulfillment constraint work correctly. Orderkraft needs to know where production happens to hold the right items back until it's done. **What's the difference between a production location and a regular one?** A production location is where made-to-order items get built. A regular location can still stock and fulfill; it just isn't where manufacturing happens. --- Source: https://www.orderkraft.com/features/multi-location-production/ Last updated: 2026-09-09 # Multi-location production A second production location, a new manufacturer or a second workshop, is one of the moments a manual setup tends to break, because now someone has to track which location is building what. Orderkraft's production locations sync with Shopify's own locations, so a manufacturing order routes to wherever it's actually being built without a parallel system to keep in sync by hand. **Is this the trigger for most brands who eventually need this?** Often, yes. Adding a second manufacturer or production site is one of the more common reasons a spreadsheet-based setup stops working. --- Source: https://www.orderkraft.com/features/lead-times/ Last updated: 2026-09-09 # Storefront lead times A customer deciding whether to buy a made-to-order product wants one thing before they add it to cart: when will this actually ship? Most Shopify stores answer that with a static line someone in marketing wrote once and never revisited. Orderkraft answers it from the same data the production floor works off: the production time and dock-to-stock time set on the product's bill of materials. Change how long something actually takes to build, and the number on the product page changes with it, automatically. There's no second place to update, which means there's no way for the storefront promise and the production reality to quietly drift apart. It shows up as a block on the product page, not a theme rewrite. Add it where it makes sense for your store, and it reads straight from production. **What is a lead time actually made of?** Production time plus dock-to-stock time. How long it takes to build, plus how long it takes to arrive and be ready to ship once it's built. **What happens when I change my production time?** Every lead time reading from that bill of materials updates immediately. There's no separate place to keep a storefront promise in sync with reality; it's the same number. **Does this need a theme change?** It ships as a theme app extension block you add to the product page. No custom theme code. --- Source: https://www.orderkraft.com/features/lead-time-theme-block/ Last updated: 2026-09-09 # Lead time storefront block The lead time calculation lives on the bill of materials; this is what actually puts it in front of a customer. A theme app extension block you place on the product page, same as any other Shopify app block. No theme code to write or maintain. It reads the same number the rest of Orderkraft uses, and updates when that number changes. **Do I need a developer to add this?** No. It's a theme app extension block, added through the theme editor the same way you'd add any other Shopify app block. --- Source: https://www.orderkraft.com/features/split-shipments/ Last updated: 2026-09-09 # Split shipments A customer orders a stocked candle and a made-to-order side table in the same cart. Left alone, Shopify holds both until the table is finished. The candle waits for something it has nothing to do with. Orderkraft's fulfillment constraint splits that order at the source. Stocked items release for fulfillment immediately. Made-to-order and customised items stay held until their manufacturing order actually completes. It reads the same production locations and manufacturing order status as everything else in Orderkraft, so there's no separate rule engine to configure and no risk of it drifting out of sync with what production actually says is done. The same mechanism keeps unfinished made-to-order items out of your warehouse or 3PL entirely until they're ready, useful if your WMS shouldn't see an order before there's actually something to pick. **What happens without this turned on?** Shopify holds the entire order until every line item can ship, so a single made-to-order item delays the in-stock items sitting right next to it in the same cart. **Does this need a 3PL or WMS integration?** No. It's a Shopify fulfillment constraint tied to your production locations, and it works with whatever fulfillment setup you already have. **Can I hold made-to-order items out of my warehouse system entirely until they're produced?** Yes. That's the same mechanism, applied to keep unfinished items from ever reaching a workflow built for things that are already done. --- Source: https://www.orderkraft.com/features/order-page-status/ Last updated: 2026-09-09 # Production status on the order page Someone asks "where's my order?" and the answer used to mean opening a second tool, or asking ops directly. Now it's on the order page you already have open. Every line item that created a manufacturing order shows its status right there: draft, waiting, in progress, on hold, or completed, with the reason attached if it's on hold. One screen, the same one you were already using. This is the same status a manufacturing order carries everywhere else in Orderkraft, so what a support agent sees on the order page is exactly what's true on the production floor. Not a synced copy. The same record. It works the same way regardless of which of the three shapes created the manufacturing order. Furniture built from a bill of materials, an embroidered towel, and a customer-configured bracelet all show up the same way. **Do I need to leave Shopify admin to check production status?** No. It shows directly on the order page, next to everything else you already look at for that order. **Does this only work for bill-of-materials products?** No. Any line item with a manufacturing order shows its status here, whether it's made-to-order, personalised, or built-on-the-fly. Same view either way. **What statuses will I see?** Draft, waiting, in progress, on hold, and completed, the same status a manufacturing order carries everywhere else in Orderkraft, including holds with their reason. --- Source: https://www.orderkraft.com/features/customer-account-tracking/ Last updated: 2026-09-09 # Customer account production tracking "Where's my order?" is a support ticket every made-to-order brand gets, because the customer has no way to check for themselves. This puts the same production status your team already sees in the customer's own account. It's not a separate tracking system to maintain. It reads the same manufacturing order status as everything else, just presented for the customer rather than for ops. **Is this the same status support sees on the order page?** Yes. The same manufacturing order status, shown in a form built for the customer rather than your team. --- Source: https://www.orderkraft.com/features/shopify-flow-triggers/ Last updated: 2026-09-09 # Shopify Flow triggers A manufacturing order starting, going on hold, or completing are all real moments worth automating around: notifying a team, updating an external system, sending a customer a heads-up. Orderkraft publishes those transitions as Shopify Flow triggers, so automation is something you build in Flow directly rather than something that needs custom code or a webhook you maintain yourself. Subscribe to the events you actually care about. The rest keep firing quietly in the background for anyone who does. **What triggers a Flow event?** Manufacturing order lifecycle changes, like starting, being put on hold, or completing, the same transitions that show up on the order page. **Do I have to react to every event this fires?** No. Subscribe to the specific transitions you actually want to build automation around, usually completion and holds, and ignore the rest. --- Source: https://www.orderkraft.com/features/product-options-compatibility/ Last updated: 2026-09-09 # Works with your product-options app A lot of made-to-order and personalised brands already run a product-options app to let customers pick an engraving, a finish, or a dimension. Orderkraft isn't trying to replace it. When a customer makes a choice through your existing product-options app, it lands on the order as a line item attribute. Orderkraft reads that attribute and surfaces it on the manufacturing order. No migration, no re-platforming a storefront that already works. If your storefront captures it, your production floor sees it. **Do I need to switch product-options apps to use Orderkraft?** No. Orderkraft reads the line item attributes your existing app already writes to the order. It doesn't replace it. **Which product-options apps does this work with?** Any of them, in principle. Infinite Options, Bold, Easify, and Hulk are commonly seen, but the mechanism is Shopify's own line item attributes, not an integration built for one specific app. --- Source: https://www.orderkraft.com/docs/getting-started/introduction/ # Introduction Orderkraft is a Shopify app for merchants who sell made-to-order products: things that get built when a customer buys, not pulled off a shelf. It connects the production side of your business to the storefront, so the delivery date a customer sees on the product page is one your shop floor can actually hit. ## What Orderkraft does today Orderkraft adds these things to a Shopify store: - A way to mark Shopify products as made-to-order, with a bill of materials, a production time, and a dock-to-stock time - A catalog of raw materials and components inside Orderkraft, which become the inputs to a bill of materials - A theme app block that shows the lead time on the product page so customers see the realistic shipping window before they check out - A Shopify fulfillment constraint that ships stocked items immediately and made-to-order items once production wraps - [Manufacturing plans](/docs/concepts/manufacturing-plans/) that define your production workflow as reusable templates of steps - [Manufacturing orders](/docs/concepts/manufacturing-orders/) that track what's actually being built, with statuses, holds, and a production history - Production status where the questions get asked: [on the Shopify order page](/docs/setup/track-production-on-the-order-page/), [in customer accounts](/docs/setup/show-production-status-to-customers/), and [in Shopify Flow](/docs/automation/shopify-flow/) There's also a dashboard with MTO revenue, MTO orders, and average lead time over the last 30 days, with comparison against the previous 30. ## Who Orderkraft is for Orderkraft fits Shopify merchants whose products are built per order: furniture, apparel made to spec, equipment with build options, anything where the unit being sold doesn't exist when the order is placed. If your inventory is stable and you ship from stock, Orderkraft won't add much. If you're patching Shopify with spreadsheets, automations, and someone in ops who knows what to do when, it's likely worth a look. ## What's not in here yet These docs cover what Orderkraft is, how it fits with Shopify, and how to set it up. They don't cover advanced production planning, capacity, or scheduling, because those aren't features today. The docs will grow with the app. --- Source: https://www.orderkraft.com/docs/getting-started/how-it-fits/ # How Orderkraft fits in Orderkraft is a Shopify embedded app. You install it from the App Store and it runs inside your Shopify Admin like any other app, with its own pages under the Apps menu. It doesn't replace anything you already have. It adds a layer for the production side of made-to-order. ## What Orderkraft reads from Shopify Orderkraft reads from your store rather than maintaining duplicate copies: - Orders, via the `orders/create` webhook, so it knows when a made-to-order item has been sold - Products, so you can pick which ones are made-to-order - Locations, so you can mark which ones produce versus fulfill Most data stays in Shopify. Orderkraft only stores what it needs locally (the bill of materials, the materials catalog, and made-to-order orders for reporting) and reads the rest live. ## What Orderkraft writes to Shopify When you set up a made-to-order product, Orderkraft writes a few things back to your store: - A *Made to Order* metafield on the product, so other apps and themes can see it - A *Production Lead Time* metaobject linked to the product, holding the time ranges and the calculated lead time - A *Location Type* metafield on each location (fulfillment, production, or both) - A *Split Shipments* fulfillment constraint, once you turn it on - A theme app block called *Lead Time Block* that renders the lead time on the product page - A `manufacturing_statuses` metafield on orders with made-to-order items, holding the production status of each line so [customer accounts can show it](/docs/setup/show-production-status-to-customers/) Because these are stored on Shopify itself, your data stays portable. If you ever uninstall, Orderkraft cleans up the metafields and metaobjects it created, but your products, orders, and locations remain untouched. ## What lives only in Orderkraft A few things only make sense inside the app: - The bill of materials for each made-to-order product - The catalog of raw materials and components that go into a bill of materials - Your [customisation intents](/docs/concepts/customisations/): which line item attributes count as production work, and what to call them - [Manufacturing orders](/docs/concepts/manufacturing-orders/), their holds, and the production timeline behind each one - The local copies of made-to-order orders that power the dashboard - Your subscription state Shopify gets the parts that are useful outside the app: the status of each order line, and an event on every status change. The detail behind it stays in Orderkraft, like who put an order on hold and why, or which location is building it. ## How Orderkraft reaches the rest of your stack Production events are published to Shopify Flow as triggers: a manufacturing order created, started, put on hold, cancelled, or completed. From there you can tag orders, notify customers, or hand off to any other app that Flow talks to, without an integration to build or maintain. See [Automate with Shopify Flow](/docs/automation/shopify-flow/). Production status also shows up in the two places people already look for it. Shopify Admin gets a [block on the order page](/docs/setup/track-production-on-the-order-page/) listing what's being built for that order, with the full timeline a click away. Customers get a [status badge on their own order page](/docs/setup/show-production-status-to-customers/), once you add the block in the customer account editor. ## What Orderkraft doesn't do It's not a warehouse management system, and it doesn't replace your accounting, shipping, or POS apps. It doesn't manage inventory for finished goods (Shopify does that). It doesn't talk to your machines or schedule work on the production floor. If you need any of that, you'll keep using the tools you already have. Orderkraft fits next to them. --- Source: https://www.orderkraft.com/docs/setup/install-the-app/ # Install Orderkraft on Shopify Installing Orderkraft from the Shopify App Store is the first step. Most of the work after that happens in the background, but it helps to know what's being set up so the rest of the steps make sense. ## How to install 1. Open the Orderkraft listing in the Shopify App Store. 2. Click **Add app**. 3. Approve the permissions Shopify asks for. 4. Orderkraft opens inside your Shopify Admin and lands you on the setup checklist. You need to be a store owner or have the *Apps and channels* permission to install apps on your store. ## What Orderkraft asks for Orderkraft requests read or write access to a few things on your store: - Orders (read), so it knows when a made-to-order item has been sold - Products (read and write), to flag products as made-to-order and store production data on them - Locations (read and write), to mirror your locations and let you mark one as a production facility - Metaobjects and metaobject definitions (read and write), to define the production lead time structure - Fulfillment constraint rules (write), for the split-shipments rule you turn on later If you change your mind, you can uninstall the app from Settings → Apps and sales channels in your Shopify Admin. Orderkraft removes the metafields and metaobjects it created when it's uninstalled. ## What happens automatically Two things happen without any input from you. Your locations sync. Orderkraft pulls your Shopify locations and stores them, usually within a minute. They appear in the Locations tab once they're done. Three metafield definitions are added: Made to Order (a boolean on products), Production Lead Time (a reference on products), and Location Type on locations (fulfillment, production, or both). You won't need to touch these directly. Orderkraft writes to them when you configure a product or designate a production location. ## What's next Once your locations are synced, the setup checklist asks you to subscribe. There's one plan, and the [pricing page](/pricing/) covers the rate card, worked examples, and the billing FAQ. The trial is 14 days, and you won't be billed until it ends. --- Source: https://www.orderkraft.com/docs/setup/your-first-product/ # Set up your first made-to-order product This is where Orderkraft starts being useful. You pick a Shopify product, tell Orderkraft how long it takes to make, and from then on the product is treated as made-to-order: its delivery date is calculated rather than guessed. ## What you're actually setting up A made-to-order product in Orderkraft has two times attached to it: **Production time** is how long it takes to actually make the item. From starting production to finishing it. Not including packaging or prep for shipping. Most merchants set this to match their typical turnaround. **Dock-to-stock time** is the gap between "it's made" and "it's ready to ship." Quality checks, packaging, labeling, anything else that happens after production wraps but before it leaves your facility. Both are set as ranges (min and max), in the unit that makes sense for your workflow: minutes, hours, days, weeks, or months. If production usually takes 5 days but sometimes 7, set a range of 5-7 days. Customers see the total lead time on the product page, computed from both ranges. ## Steps 1. Open Orderkraft and go to **Products**. 2. Click **Add product**. A Shopify product picker opens. 3. Pick the product you want to set up as made-to-order. 4. Set the production time range and unit. 5. Set the dock-to-stock time range and unit. 6. Click **Save**. That's it. Orderkraft does the rest: - The product is flagged as made-to-order on your Shopify store - A production lead time metaobject is created and linked to the product - The lead time becomes available to the storefront so customers can see it ## Ranges versus single numbers You can set min and max to the same number if your turnaround is consistent. Most production isn't, though, and a tight range (5-7 days) sets a more honest expectation than a single number that's secretly the average of a wider band. ## Changing or removing it later To change the times, open the product in Orderkraft and edit the bill of materials. The metaobject on Shopify updates automatically, and the storefront reflects the new range on the next page load. A product's production strategy is what makes it made-to-order in the first place. Every product in Orderkraft has one: *Regular*, *Made to order*, or *Built on the fly*. Regular is ordinary Shopify stock. Made to order is what this page sets up. [Built on the fly](/docs/concepts/built-on-the-fly/) is for products assembled from parts the customer picks in the cart. Moving a product away from *Made to order* deletes the bill of materials on its variants, and that can't be undone, so the app asks before it does it. To remove the made-to-order flag entirely, open the product and archive it. The metafield and metaobject are removed from Shopify and the product goes back to behaving like regular inventory. ## Setting up many products at once Once a few products are in, editing them one at a time gets old. The products list and a product's variants list both let you select rows and change them together: - On **Products**, *Change production strategy* moves several products between regular, made-to-order, and built on the fly in one go. The same warning applies in bulk: moving made-to-order products to another strategy deletes their bills of materials. - On a product's **variants**, *Update lead times* overwrites the production and dock-to-stock times on every selected variant, which is the fast way to bring a whole size run onto a new turnaround. ## What's next The basics are done. The remaining setup steps are optional but worth doing: - [Designate a production location](/docs/setup/set-a-production-location/) if you make and stock items in different places - [Enable split shipments](/docs/setup/enable-split-shipments/) so made-to-order items don't hold up the rest of an order - [Show lead times on your storefront](/docs/setup/show-lead-times-on-your-storefront/) so customers see the delivery promise before they check out - [Set up product customisations](/docs/setup/set-up-product-customisations/) if you also engrave, embroider, or personalise products you stock rather than build --- Source: https://www.orderkraft.com/docs/setup/set-up-manufacturing-plans/ # Set up manufacturing plans **A manufacturing plan standardizes your production workflow.** Create it once, and every matching manufacturing order automatically receives the same sequence of work orders—no manual setup, no missed steps, every time. ## What you're setting up A manufacturing plan consists of four key components: | Component | Purpose | Example | |-----------|---------|---------| | **Steps** | Individual units of work | Cut fabric, Sew panels, Assemble frame, Final QC | | **Dependencies** | Define sequencing between steps | Cut must finish before Sew; Pack waits for Finish AND QC | | **Targets** | Assign plan to specific products | Product variant, entire product, or collection | | **Settings** | Control plan behavior | Auto-complete on/off, default plan flag | Each component plays a role in transforming a generic manufacturing order into a specific, actionable set of work orders. ## Prerequisites Before creating manufacturing plans, make sure you have **at least one made-to-order product** in Orderkraft. Plans match to made-to-order products, so without one a plan has nothing to apply to. Haven't set this up? See [Set up your first made-to-order product](/docs/setup/your-first-product/). You don't need to prepare anything else. The work order templates your steps are built from get created while you add steps, in Step 2. ## Step 1: Create the plan 1. In Orderkraft, navigate to **Manufacturing → Plans** 2. Click **Add plan** 3. Enter a descriptive name: - Good: "Standard dining table build" or "Apparel production workflow" - Avoid: "Plan 1" or "My plan" 4. (Optional) Add a description for internal reference 5. Click **Save** ⚠️ **Note**: The plan is now created but empty. It won't match any manufacturing orders until you add steps and targets. ## Step 2: Add steps to the plan With your plan open: 1. Click **Add step** 2. Under **Work order template**, pick an existing template, or choose **New work order template…** and give it a name. The step takes its name from the template. 3. **Set dependencies**: Under **Runs after**, pick the steps that must finish before this one can start. Under **Runs before**, pick the steps that wait for this one. - Example: "Cut fabric" must finish before "Sew panels" - Or: "Pack" must wait for both "Finish" AND "QC" 4. Click **Add step** Repeat this for every step in your production workflow. Work order templates are shared by all your plans. Once you've created "Final QC", it's in the list every time you add a step, in any plan. When a manufacturing order picks up the plan, each step becomes a work order. ## Step 3: Set targets ⚠️ **Important**: A plan with no targets won't match any manufacturing orders. To assign your plan to products: 1. In the plan detail view, locate the **Targets** section 2. Click **Add target** 3. Search for and select: - A specific **product variant** (most specific) - An entire **product** - A **collection** 4. Repeat for every product the plan should apply to **Matching hierarchy**: When a manufacturing order arrives, Orderkraft checks in this order: 1. Variant-specific plan 2. Product-level plan 3. Collection-level plan 4. Shop default plan (if set) The most specific match always wins. ## Step 4: Configure plan settings (optional) ### Set as default plan If most of your products share the same workflow: 1. In the plan detail view, find the **Settings** section 2. Toggle **Default plan** to ON 3. Click **Save** ⚠️ **Only one plan can be the default per shop.** New products with no specific plan will automatically use this default. ### Enable auto-complete Remove one click from your team's workflow: 1. In the plan detail view, find the **Settings** section 2. Toggle **Auto-complete** to ON 3. Click **Save** When enabled, completing the last work order automatically completes the entire manufacturing order. **When to disable**: If you want someone to physically inspect or sign off on finished products before marking orders complete. ## Step 5: Test your plan Before going live, verify your plan works correctly: 1. Create a **test order** for a product that matches your plan 2. In Orderkraft, open the manufacturing order 3. Verify the following: - ✅ All expected steps appear as work orders - ✅ Dependencies between work orders match your plan settings - ✅ Work orders become startable only after their dependencies complete - ✅ Completing work orders in sequence allows progress through the order - ✅ Completing the last work order finishes the manufacturing order (if auto-complete is ON) - ✅ Or you must manually complete the manufacturing order (if auto-complete is OFF) **Fix any issues** before using the plan for real customer orders. ## Best practices for multiple plans As your product catalog grows, you'll likely need multiple plans. Follow these best practices: ✅ **Reuse work order templates** — Create "Final QC" once, then pick it in every plan that needs it. ✅ **Be specific with targets** — If a product has a unique workflow, give it its own dedicated plan rather than forcing it into a shared plan. ✅ **Start with a default plan** — This acts as a safety net, catching any product that doesn't have a specific plan assigned yet. ✅ **Name plans descriptively** — "Dining table build - oak" is better than "Plan 2" ✅ **Document plan purpose** — Add descriptions to remind your team what each plan is for ❌ **Don't over-share plans** — A plan that tries to cover too many products becomes unwieldy ## Edit a plan **Important**: Editing a plan only affects **new** manufacturing orders. Orders already in production keep the steps they were created with. This prevents mid-production changes from disrupting work already underway. ## Archive or delete a plan - **Archive**: Recommended for cleanup. Hides the plan from the list but preserves it. Manufacturing orders already using it continue to work normally. - **Delete**: Removes the plan from the list entirely. Manufacturing orders already using it keep their steps, but the plan definition is gone. To archive or delete: Open the plan, click the three-dot menu, and select your option. ## What's next With manufacturing plans set up, your production workflow is standardized. Next, consider setting up: - **[Track production on the order page](/docs/setup/track-production-on-the-order-page/)** — See work orders directly in Shopify Admin for full visibility - **[Show production status to customers](/docs/setup/show-production-status-to-customers/)** — Let customers track their order progress in real-time - **[Set up Shopify Flow triggers](/docs/automation/shopify-flow/)** — Automate actions (notifications, tags, etc.) when manufacturing orders change status - **[Enable split shipments](/docs/setup/enable-split-shipments/)** — Ship stocked items immediately while production completes - **[Set up bill of materials](/docs/setup/your-first-product/)** — Define what raw materials and components each product requires --- Source: https://www.orderkraft.com/docs/setup/set-a-production-location/ # Set a production location This step is optional, but most merchants want it. Telling Orderkraft where production happens keeps made-to-order items from getting tangled up with regular stock, and it's what makes [split shipments](/docs/setup/enable-split-shipments/) work the way you'd expect. ## Why it matters Orderkraft needs to know where your made-to-order items are produced. Without it, every order goes through the same fulfillment path as your stocked inventory. With it: - Made-to-order items can be assigned to your production facility instead of your warehouse - Your 3PL or WMS doesn't see the order until production is complete - You can run separate KPIs for production locations versus retail or fulfillment ones If you ship from the same place you produce, that's fine too. You just mark the location as Fulfillment & Production. ## Three location types Every location in Orderkraft has a type: - **Fulfillment** is a regular Shopify location that ships stocked inventory. This is the default for every location after install. - **Production** is a production-only facility. It doesn't ship stocked inventory. - **Fulfillment & Production** is both. You produce here and you also ship from here. The type is stored as a metafield on the Shopify location, so it's visible to any other app that respects metafields. ## Steps If you already have a Shopify location for production: 1. Open Orderkraft and go to **Locations**. 2. Find the location and click **Edit**. 3. Pick the location type (Production or Fulfillment & Production). 4. Click **Save**. If you don't have a Shopify location for production yet: 1. Add the location in Shopify first (Settings → Locations → Add location). If you produce out of an existing warehouse, duplicate it and add "(Production)" to the name so it's distinct. 2. Wait a moment for it to sync to Orderkraft, then follow the steps above. You can mark more than one location as Production. Orderkraft will choose between them based on the rules you set for each made-to-order product. ## What's next If you'd like made-to-order items to ship separately from the rest of an order, [enable split shipments](/docs/setup/enable-split-shipments/). --- Source: https://www.orderkraft.com/docs/setup/enable-split-shipments/ # Enable split shipments This step is optional but solves a real annoyance: when a customer buys both regular stock and a made-to-order item in the same order, Shopify normally holds the whole order until everything is ready. That means the t-shirt waits two weeks for the made-to-order chair before either of them ships. Split shipments fixes that. Regular items go out immediately. Made-to-order items ship when production is complete. ## How it works under the hood Orderkraft adds a Shopify fulfillment constraint called *Split Shipments*. It tells Shopify to fulfill made-to-order line items separately from regular ones. The constraint is implemented as a Shopify Function, so it runs inside Shopify rather than calling out to Orderkraft. No extra latency at checkout. The customer ends up with two shipments instead of one. They get tracking for each as it's dispatched. ## Why you might not want it A few reasons to leave it off: - You ship everything from a single location and don't mind holding the order - Your shipping rates make double-shipping too expensive - You'd rather batch made-to-order items with regular orders for packing efficiency There's no right answer. Try it, see how it feels for a few orders, turn it off if it doesn't fit how you actually pack and ship. ## How to enable it 1. Open Orderkraft and go to **Settings**. 2. Find the **Fulfillment constraints** section. 3. Toggle on the **Made-to-order constraint**. 4. Approve the constraint when Shopify asks. That's it. The constraint applies to all future orders. Existing orders aren't retroactively split. ## How to disable it Same place. Toggle it off and the constraint is removed from your store. Orders go back to Shopify's default behavior, where everything in an order ships together. ## What's next The last optional step is showing customers your production lead times before they buy: [add the lead time block to your theme](/docs/setup/show-lead-times-on-your-storefront/). --- Source: https://www.orderkraft.com/docs/setup/show-lead-times-on-your-storefront/ # Show lead times on your storefront The last optional setup step is the most customer-facing one. Once a product has a production time, you can show that on the product page so customers see the realistic shipping window before they buy. It's not glamorous, but it cuts down on "where's my order" emails a lot. ## What customers see A line near the product price that reads like one of these: > Made to order / ships in 5 days > > Made to order / ships in 5 - 7 days The text uses your product's production time range. If min and max are the same, it shows a single number. Otherwise it shows the range. The block only renders for products that you've flagged as made-to-order in Orderkraft. Regular products show nothing, so you don't have to manage two versions of your product page. ## How to add it Orderkraft links you straight to the Shopify theme editor with the block ready to drop in: 1. Open Orderkraft and finish the setup checklist down to the **Activate the theme UI extension** step. 2. Click **Add to theme**. This opens your theme editor with the lead time block pre-selected. 3. Drag the block to wherever it makes sense on the product page. Most merchants put it right under the price or near the Buy button. 4. Click **Save** in the theme editor. If you'd rather add it manually: 1. In your Shopify Admin, go to **Online Store → Themes**. 2. Click **Customize** on the theme you want to edit. 3. Open a product template. 4. Click **Add block** in the main product section. 5. Pick **Lead Time Block** from the Orderkraft section. 6. Save. ## Where it can go The block targets the product page only. You can place it anywhere inside the main product section: under the title, near the price, below the variant picker, wherever it fits your design. It's a Shopify theme app block, so it respects your theme's typography and spacing. You can wrap it in your own styling if you want it to look different from your theme defaults. ## Multiple themes You'll need to add the block once per theme. If you switch themes or duplicate one for a sale, the block doesn't come along automatically. Re-add it on the new theme. ## You're done That's the last setup step. From here you're using Orderkraft. New made-to-order products you set up will pick up everything you've configured automatically, including the lead time block on the storefront and the split-shipment behavior at checkout. If you want to come back and change settings later, everything lives in the **Settings** section in Orderkraft. --- Source: https://www.orderkraft.com/docs/setup/track-production-on-the-order-page/ # Track production on the Shopify order page Most questions about production start in Shopify: someone opens an order because a customer asked where it is. Orderkraft puts the answer on that page, so support and ops don't have to switch apps to give it. There's nothing to turn on. The block appears on your order pages once Orderkraft is installed. ## The manufacturing orders block Open any order in Shopify Admin that contains a made-to-order item. Orderkraft adds a *Manufacturing orders* block to the order page listing the production behind it. Each row shows: - The manufacturing order number - The product being built, with its image and SKU - The quantity - The current [status](/docs/concepts/manufacturing-orders/#statuses) - The [ship-by date](/docs/concepts/manufacturing-orders/#the-ship-by-date), highlighted when it's overdue, due today, or due soon Below the rows, the block reads out the one date support usually reaches for: *Expected to ship on*, the latest ship-by date across the order's still-open manufacturing orders. That's the honest answer to "when does it leave," because the order is only fully produced when its last item is. ![The Manufacturing orders block on a Shopify order page, showing one row: manufacturing order MO-FU1F2M9CG for a signet ring, quantity one, with a green Completed status badge.](../../../assets/screenshots/manufacturing-orders-block.png) *One signet ring, built and done.* Orders with several items in production get several rows, and the block pages through them a few at a time so it stays a sensible height. Rows are newest first. If nothing is being built for the order, the block says so rather than disappearing. Only made-to-order production shows up here. Build-to-stock manufacturing orders aren't tied to a customer's order, so you'll find those in Orderkraft. ## The detail view Click a row and the manufacturing order opens in a panel over the order page. It shows: - The status, with the ship-by date beside it, and the production location it's being built at - A warning banner with any active holds, including the note explaining each one - The product and quantity being produced - The full timeline: every status change, when it happened, and who made it ![The manufacturing order detail view open over a Shopify order page. A Completed badge sits next to the EU Warehouse and Production location, above the signet ring being built. The timeline below runs from Entered the queue, through Production started, to Put on hold with the note that the engraving machine is broken, then back into the queue, production started again, and Completed.](../../../assets/screenshots/manufacturing-order-detail.png) *Six weeks in production, then a broken engraving machine on the very last day.* This is the view to open when a customer asks why their order is late. If production is stopped, the reason is right there in the banner, in the words of whoever stopped it. Holds that have already been released stay in the timeline rather than the banner, so you can see that something was blocked and got resolved. The order above finished, so its hold sits in the history instead of at the top. ## Read, not write Both the block and the detail view are read-only. Statuses change in Orderkraft, where the production queue and the actions that move orders through it live. That keeps one source of truth for what the floor is doing, rather than two places that can disagree. ## What customers see The same production status can be shown to customers on their own order page. See [Show production status to customers](/docs/setup/show-production-status-to-customers/). --- Source: https://www.orderkraft.com/docs/setup/show-production-status-to-customers/ # Show production status to customers A customer who can see that their table is in production doesn't email you to ask. Orderkraft can put a small production badge next to each item on the customer's order page, so the answer is already there when they look. ## What the customer sees On the order status page in their customer account, each item that's being built gets a badge under it: | Badge | Behind it | | --- | --- | | Draft | The manufacturing order exists but production hasn't been committed | | Waiting | Queued, waiting on capacity or materials | | In progress | Being built | | On hold | Production is stopped | | Complete | Built | | Cancelled | Won't be built | When an item is being produced by more than one manufacturing order, the badge reports the one furthest along and says so: *Partially in progress*, *Partially complete*. See [how statuses roll up to an order line](/docs/concepts/manufacturing-orders/#how-statuses-roll-up-to-an-order-line). Only the status is shown. Manufacturing order numbers, locations, hold reasons, and the production timeline stay internal. A customer sees that their item is on hold, not why. Regular stocked items in the same order get no badge at all, so the badge itself signals "this one is being made for you." ## Turn it on The badge is a block, and blocks have to be added once in the customer account editor: 1. In Shopify Admin, go to **Settings → Customer accounts**. 2. Click **Customize** to open the customer account editor. 3. Open the **Order status** page. 4. Add the Orderkraft **Manufacturing status** block to the line items section. 5. Save. Check it against a real order that has made-to-order items in production. An order with nothing in production won't show badges, which looks the same as the block not being installed. ## How it stays current Orderkraft writes the production status of each line to a `manufacturing_statuses` metafield on the Shopify order, and the block reads it from there. The metafield is rewritten whenever a manufacturing order for that order is created or changes status, so the badge follows the shop floor within a few minutes of the change. If you want production status somewhere other than the customer's order page, like a tag on the order or an email when production finishes, use [Shopify Flow](/docs/automation/shopify-flow/). It fires on the status change itself. --- Source: https://www.orderkraft.com/docs/setup/set-up-product-customisations/ # Set up product customisations Use this when a product isn't built from scratch but still needs work before it ships. Engraving, embroidery, monogramming, a gift message that has to be printed and tucked in the box. The item exists; someone has to do something to it. Setup has two halves that you can do in either order: telling Orderkraft which products can be personalised, and telling it which line item attributes count as personalisation. ## Before you start Find the exact attribute key your storefront sends. Open a past Shopify order that had personalisation on it and look at the line item properties. You want the key, not the value: `Engraving`, `Embroidery Text`, `custom_message`, whatever it happens to be. Get this from a real order rather than from your options app's settings screen. What the app displays and what it writes to the line aren't always the same string, and Orderkraft matches on the string. ## Mark the product as customisable 1. In Orderkraft, go to **Products**. 2. Open the product, or click **Add product** and pick it from the Shopify picker if it isn't there yet. 3. In the product summary on the right, a badge under the product name reads either *Customisable* or *Not customisable*. Click the pencil beside it. 4. Turn the switch on and save. The badge turns green. ![The Orderkraft product page for a Beach Towel. The right-hand summary shows the product name with a green Customisable badge and a pencil icon beside it. Under it, a Production lead time card reads one day of production and same day dock-to-stock, noting the times are calculated and can't be edited here. The main column lists three variants, all at one day.](../../../assets/screenshots/product-customisable-badge.png) *Customisable, and still carrying the one-day lead time it was created with.* You don't need a bill of materials. A product with an empty one is fine, and that's the normal shape for something you stock and then personalise. Leave the materials out unless you're actually consuming them. Turn the switch off for products where the attributes on the line are always internal plumbing rather than something a person has to act on. ## Create a customisation intent 1. Go to **Settings → Customisation intents**. 2. Click **Add customisation intent**. 3. Set the **name** to what your production team should read: *Engraving*, *Embroidery*, *Gift message*. 4. Set the **code** to the attribute key from the order, exactly as it appears. 5. Add a description if the intent needs explaining to whoever picks it up next. 6. Save. Intents are shop-wide. You need one per kind of personalisation, not one per product. The code has to match exactly. `Engraving` and `engraving` are two different keys as far as matching goes, and a trailing space counts. This is the part that goes wrong, which is why the next step exists. ## Test it with a real order Open an intent and there's a *Test with a real order* panel beside the form. Type an order number from your store and Orderkraft lists every line on that order, every attribute each line carries, and ticks the one your code matched. ![The customisation intent edit page in Orderkraft. On the left, a form with Name and Code both set to Embroidery Text. On the right, a Test with a real order panel where order CODE-1262 has been searched. A green banner confirms the match, and the table below lists the Beach Towel - Blue line with two attributes: _has_gpo plainly, and Embroidery Text, Happiness, ticked.](../../../assets/screenshots/customisation-intent-preview.png) *The tick is on the attribute that matters. The `_has_gpo` above it is exactly the noise that never reaches production.* Two things worth knowing about it: It tests the code currently in the form, not the one that's saved. Paste a key in, watch it match, and only then save. When it doesn't match, the panel still lists every attribute on the line, which is usually enough to spot the stray capital or the trailing space. It looks for the order in Orderkraft first and only asks Shopify if it hasn't seen it. Any order in your store works, including ones from before you installed Orderkraft. Use the order number as Shopify shows it. ## Check that it works end to end Place a test order for the product with the personalisation filled in, or wait for a real one. Then open **Manufacturing orders** in Orderkraft. You should see a new order for that line, with the customisation listed under the name you gave the intent and the value the customer entered. If nothing appeared, work through the three conditions in order: - Is the product marked customisable? - Did the order line actually carry the attribute? The test panel above answers this against the real order. - Does the intent code match the key character for character? Matching happens when the order arrives, so an intent only applies going forward. Orders that came in before you set it up aren't reprocessed. ## What happens to the rest of the order Adding a product to Orderkraft flags it as made-to-order on your Shopify store, which is what [split shipments](/docs/setup/enable-split-shipments/) and the [lead time block](/docs/setup/show-lead-times-on-your-storefront/) both read. If split shipments are on, that product is held back from the rest of the order and fulfilled from a production location. For something being engraved, that's correct. Check that your production locations are set up, or the constraint has nowhere to send it. If the lead time block is on your product page, the customer sees a lead time for that product. A new variant starts at one day of production and same-day dock-to-stock, which is what the screenshot above is showing, and almost certainly not your engraving turnaround. The product's own lead time is calculated from its variants and can't be edited directly, so open each variant and set the times there before the product page starts making promises on your behalf. ## What's next - [Customisations](/docs/concepts/customisations/) for how matching works and what happens when you delete an intent - [Track production on the Shopify order page](/docs/setup/track-production-on-the-order-page/) to see the customisations from Shopify Admin - [Automate with Shopify Flow](/docs/automation/shopify-flow/) to tag or route orders once the customisation work is done --- Source: https://www.orderkraft.com/docs/setup/set-up-built-on-the-fly/ # Set up built on the fly Use this when a product isn't built from a fixed recipe but is assembled from parts the customer picks in the cart. A necklace and its charms. A gift box and whatever went into it. The product stays the same; what it's made of changes with every order. Setup has two parts: turning the strategy on for the product, and telling Orderkraft how your storefront says which lines belong together. ## Before you start Built on the fly runs on the parts' SKUs matching your materials catalog. When a picked part's SKU matches a material in Orderkraft, it shows up on the manufacturing order. When it doesn't, it's either skipped or added to your catalog, depending on how you set the switch below. Check your materials catalog covers the parts customers actually pick, or turn on the switch and let Orderkraft create them as orders come in. ## Turn the strategy on for the product 1. In Orderkraft, go to **Products**. 2. Open the product, or click **Add product** and pick it from the Shopify picker if it isn't there yet. 3. In the product summary on the right, the badge under the product name reads either *Regular*, *Made to order*, or *Built on the fly*. Click the pencil beside it. 4. Pick *Built on the fly* and save. Moving a product away from *Made to order* deletes the bills of materials on its variants, and that can't be undone. The app asks before it does it. If your built-on-the-fly product really does have a recipe behind it, the necklace chain that every necklace gets, set *Made to order* instead and use built on the fly only for the parts the customer picks. A single manufacturing order can carry both kinds of input. ## Tell Orderkraft how the parts group 1. Go to **Settings → Built-on-the-fly configuration**. 2. Under *How they appear on the order*, pick the option that matches your storefront: | Option | When it's yours | | --- | --- | | Don't group | Customers don't pick parts in the cart, or you're not sure yet | | Bundle app | You're using a bundle app on Shopify | | Custom theme | A Shopify developer or agency built your theme | *Don't group* is the default and the safe one. Orderkraft reads every line on its own and ignores grouping, which is correct for any store that doesn't sell pick-your-parts products. Pick it and nothing else on this page matters. *Bundle app* covers stores where a Shopify bundle app assembles the parts. Those apps mark every line of the bundle, parent included, with the same group identifier, and Orderkraft uses that to keep them together. *Custom theme* covers stores where a developer built the picking into the theme itself. Custom themes tend to mark only the parts, not the parent. Orderkraft then finds the parent among the ungrouped lines, using the group's attributes to tell two of the same product apart, like two necklaces with different engravings. Picking wrong means parts end up as their own production work instead of belonging to the parent. There's a *Contact us* link on the page for exactly the case where you're not sure. ## Decide what happens to a part you've never seen The *Create missing materials* switch on the same page controls what happens when an order carries a part whose SKU isn't a material in your catalog yet. Turn it on and Orderkraft adds that part as a material the first time it shows up on an order. Turn it off and the part is skipped: it shows up on the manufacturing order as a missing input rather than blocking the import. On is the right choice for most stores. Off is for stores whose parts catalog changes constantly and who'd rather match SKUs to materials themselves. ## Check that it works end to end Place a test order for the product with the parts picked, or wait for a real one. Then open **Manufacturing orders** in Orderkraft. You should see a new order for the parent line, with each picked part listed under *Material list*, tagged *Customer's choice*. If the parts didn't come through, work backwards: - Is the product set to *Built on the fly*? - Does the grouping option match your storefront? - Do the parts carry SKUs that match your materials catalog, and is the create switch on if they don't? Grouping is read when the order arrives, so the setting only applies going forward. Orders that came in before you set it aren't reprocessed. ## What's next - [Built on the fly](/docs/concepts/built-on-the-fly/) for how the strategy plays with made-to-order and what stays the same - [Manufacturing orders](/docs/concepts/manufacturing-orders/) for the *Customer's choice* and *From bill of materials* tags - [Show lead times on your storefront](/docs/setup/show-lead-times-on-your-storefront/) to promise a realistic ship window, which a built-on-the-fly product needs just like a made-to-order one --- Source: https://www.orderkraft.com/docs/concepts/made-to-order/ # Made-to-order in Orderkraft In Orderkraft, "made-to-order" is a property of a Shopify product. A product is made-to-order when it has a bill of materials attached to it. That's the unit of setup, and that's what flips the product from "inventory we count" into "thing we build when sold." This page is about products you build. If yours is stocked and only needs work when a customer personalises it, that's a [customisation](/docs/concepts/customisations/) instead, and it doesn't need a bill of materials. ## The bill of materials A bill of materials connects a Shopify product to: - The raw materials and components used to build it - A production time range (min and max), in minutes, hours, days, weeks, or months - A dock-to-stock time range (min and max), in the same set of units The production time is how long it takes to actually make the item. The dock-to-stock time is everything that happens after production but before the item leaves your facility: quality checks, packaging, labeling. Both are stored as ranges, because most production isn't perfectly consistent, and ranges make for more honest promises than averages. Adding a bill of materials to a product does three things: 1. Marks the product as made-to-order via the Made to Order metafield 2. Creates a Production Lead Time metaobject on the product with the time ranges and a calculated total lead time 3. Makes the product visible in Orderkraft's Products list Removing the bill of materials reverses all three. The product goes back to behaving like normal Shopify inventory. ## Raw materials and components Orderkraft has two terms for inputs to a bill of materials: *raw materials* and *components*. Raw materials are the basic things you build with, like fabric, wood, metal, or fasteners. Components are intermediate things you assemble from raw materials, like a frame, a cushion, or a chassis. Components can have their own bills of materials, so a finished product can be made of components which are themselves made of raw materials. Most builds aren't flat lists of parts, and the component layer is what lets Orderkraft model the actual structure. You maintain the raw materials and components catalog yourself, inside Orderkraft. Shopify doesn't know about them. ## What the customer sees If you've added the [lead time block](/docs/setup/show-lead-times-on-your-storefront/) to your theme, the lead time shows up on the product page as a line like "Made to order / ships in 5 - 7 days." The number comes from the bill of materials, so updating the lead time on Orderkraft updates the storefront on the next page load. If you've enabled [split shipments](/docs/setup/enable-split-shipments/), made-to-order items ship separately from regular stock in the same order, so the customer's stocked items aren't held up while production runs. --- Source: https://www.orderkraft.com/docs/concepts/made-to-order-orders/ # Made-to-order orders When a customer buys a made-to-order item, Orderkraft records the order so it can show up in the dashboard. This is the only place Orderkraft stores order data, and it only stores orders that contain at least one made-to-order line item. ## What happens when an order comes in Shopify fires an `orders/create` webhook to Orderkraft whenever a new order is placed. From there: 1. Orderkraft pulls the order details from Shopify's Admin GraphQL API, including every line item. 2. It checks whether any line item points to a product you've set up as made-to-order. 3. If yes, it stores the order locally with its line items, quantities, prices, SKUs, and any custom attributes the customer added at checkout. 4. If no, the order is ignored. It stays in Shopify and Orderkraft never copies it. This keeps Orderkraft's database small and focused on the work it actually has to do. Regular Shopify orders pass through without leaving a trace. ## What the dashboard shows The Orderkraft dashboard runs against the orders stored locally. It shows three numbers for the last 30 days, each compared against the 30 days before: - The MTO Revenue tile sums every made-to-order line item in the period. - The MTO Orders tile counts orders that contained at least one made-to-order item. - The Avg. Lead Time tile averages the calculated lead times of the made-to-order products in those orders. The 30-day window is fixed for now. The comparison gives you a percentage change against the previous 30 days, so you can see whether made-to-order is trending up or down without doing the math yourself. ## What the dashboard doesn't answer The dashboard answers "how much made-to-order business did we do" rather than "where is this order right now." The second question belongs to [manufacturing orders](/docs/concepts/manufacturing-orders/), which track each thing being built through its statuses and holds, and report where it stands [on the Shopify order page](/docs/setup/track-production-on-the-order-page/) and [to the customer](/docs/setup/show-production-status-to-customers/). Orderkraft still doesn't track fulfillment state or post-purchase events. Shipping, returns, and delivery stay with Shopify and the tools you already use for them. --- Source: https://www.orderkraft.com/docs/concepts/manufacturing-orders/ # Manufacturing orders A manufacturing order is one unit of production: build this much of this thing, at this location. Where a [bill of materials](/docs/concepts/made-to-order/) says *how* something is built, a manufacturing order says *this one is being built now*. ## Where they come from Most manufacturing orders are *made-to-order*. They're attached to a line on a customer's Shopify order, because something has to be produced before that line can be fulfilled. Two things cause that: - Someone bought a made-to-order product, and it has to be built from its [bill of materials](/docs/concepts/made-to-order/) - Someone bought a customisable product and personalised it, so the line carries an attribute that matched one of your [customisation intents](/docs/concepts/customisations/) The second kind has no materials to consume. The work is the engraving or the embroidery, not the assembly, so the order carries the instruction instead of a list of inputs. The rest are *build-to-stock*, attached to no customer order at all. You're building ahead, usually a component that goes into something else later. Only made-to-order production reaches back into Shopify. [Flow triggers](/docs/automation/flow-triggers/), the block on the order page, and the badge in customer accounts all report against a customer's order, and a build-to-stock order doesn't have one to report against. Those stay inside Orderkraft. One order line can have more than one manufacturing order. That happens when production is split, for example across two locations. The combined output of those orders can't exceed what the customer actually bought. ## Statuses A manufacturing order is always in exactly one of six statuses: | Status | What it means | | --- | --- | | Draft | Created, but not yet committed to production | | Waiting | Queued and ready, waiting on capacity or materials | | In progress | Being built | | On hold | Stopped for a reason someone recorded | | Completed | Built and done | | Cancelled | Won't be built | Status changes are made in Orderkraft. The Shopify order page, customer accounts, and Flow only read them. ## The ship-by date Every made-to-order manufacturing order gets a ship-by date the moment it's created: the date it should be finished and handed to the carrier. It's the order date plus the product's maximum lead time, so it's the worst case of the promise the customer saw on the product page, not the average. The date is fixed once, at creation. Editing the product's lead time later doesn't move it, because the promise to this customer was already made. Build-to-stock orders have no ship-by date at all, since there's no customer waiting on them. How close a ship-by date is shows up as an urgency state: | State | What it means | | --- | --- | | Overdue | The ship-by date has already passed | | Due today | The ship-by date is today | | Due soon | The ship-by date is within the next two days | An order that's on track shows no urgency at all, and neither does one that's completed or cancelled. If an order does finish after its ship-by date, the detail page says so with a *This order shipped late* banner, so a late delivery is visible in the history rather than only in the customer's inbox. The full picture — what the date depends on, what the badges mean everywhere they show up, and how sorting plays with urgency — lives on [Ship-by dates](/docs/concepts/ship-by-dates/). ## Holds Putting an order on hold records a note explaining why: waiting on a fabric delivery, a machine down, a customer changing their mind mid-build. An order can carry several holds at once, and each one is released separately. The order goes back to production when the hold is lifted. Holds are the part of production that support usually has to chase, so the note travels with the status. It shows on the [manufacturing order detail view in Shopify](/docs/setup/track-production-on-the-order-page/), which means whoever answers the customer can read the reason without asking the floor. ## The timeline Every status change is recorded as an event with a timestamp and, where there was one, the person who made it. Read top to bottom, the timeline is the production history of that order: when it was created, when it started, every hold and release, and when it finished. ## The material list A manufacturing order's inputs are the materials production consumes. Each one is tagged with where it came from. *From bill of materials* means it's part of the product's recipe. *Customer's choice* means it came from the order itself: a part the customer picked in the cart on a [built-on-the-fly](/docs/concepts/built-on-the-fly/) product, with the material name linking back to that line on the Shopify order. One order can carry both kinds, the recipe and the picks side by side. ## The production queue In Orderkraft, the manufacturing orders index is the queue the floor works from. Above the list, three tiles count what's urgent: *Overdue*, *Due today*, and *Due soon*. They count across the whole shop or the selected location, regardless of any filter you've set, so a filtered view never hides a late order. Clicking a tile filters the list to just those orders. The list sorts by order date, most recent first, or by ship-by date, soonest due first. Sorting by ship-by turns the queue into a work order: whatever has to leave next sits at the top. Orders can also be handled in bulk. Selecting rows opens an action bar with *Place on hold* and *Lift holds*, for the moments a material delivery slips and forty orders have to pause at once. A bulk hold asks for one reason, which lands on every selected order. Orders that can't take the action, like one already on hold, are skipped and named rather than failing the whole batch. ## How statuses roll up to an order line Customers don't see manufacturing orders. They see the item they bought. So when a line has manufacturing orders behind it, Orderkraft reduces them to a single status for that line. If there's only one manufacturing order, the line reports its status. If there are several and they disagree, the line reports the one furthest along, labelled as partial: a line with one order still queued and one already in production reads as *Partially in progress*. The order of progress is: 1. Cancelled 2. Draft 3. Waiting 4. In progress 5. On hold 6. Completed Cancelled ranks lowest on purpose. A cancelled manufacturing order alongside a live one shouldn't make the line look cancelled when something is still being built for it. Lines with no manufacturing orders behind them don't report a status at all. That's every stocked item that nobody has to touch before it ships. A stocked item that was engraved does report one, because [something is being produced for it](/docs/concepts/customisations/). ## Where you see them - In Orderkraft, as the production queue with the urgency tiles, sorting, and the actions that change status - On the Shopify order page, as a [block listing the manufacturing orders for that order](/docs/setup/track-production-on-the-order-page/), with their ship-by dates - In customer accounts, as a [status badge on each line item](/docs/setup/show-production-status-to-customers/) - In Shopify Flow, as [triggers that fire on each status change](/docs/automation/flow-triggers/) --- Source: https://www.orderkraft.com/docs/concepts/manufacturing-plans/ # Manufacturing plans **A manufacturing plan saves your production workflow so you can reuse it.** Define the sequence of steps once, set their dependencies, and every matching manufacturing order automatically receives those steps as work orders. Think of a plan as the recipe card for your production floor: how we build this product, in this order, with these dependencies. Cut must finish before sew. Sew must finish before finish. Finish and QC must both complete before pack. The plan makes these relationships explicit. ## What a plan contains ### Steps Each step in a plan is a unit of work: Cut fabric, Sew panels, Assemble frame, Final QC. Each step has a name that appears on the manufacturing order as a work order, so your production team knows exactly what to do and when. ### Work order templates Every step is built from a *work order template*, a reusable kind of work like "Final QC". Create it once and you can pick it in every plan that needs quality checking. A step takes its name from its template when you add it. ### Dependencies Steps can depend on each other. Common patterns: - **Sequential**: Cutting must finish before sewing starts - **Parallel**: Sewing and assembly can run simultaneously - **Convergent**: Packing waits for both finishing AND quality check The plan keeps these relationships explicit, so there's no ambiguity about what runs next or what can run in parallel. ### Targets A plan needs to know which products it applies to. Set targets to assign the plan to: - Specific product variants (most specific match) - Entire products - Product collections - Or set it as your shop's default plan (least specific match) Orderkraft matches each manufacturing order to the most specific plan that fits. ## How a plan becomes work orders When a made-to-order, personalised, or built-on-the-fly line item sells, Orderkraft creates a manufacturing order. That order then gets matched to a plan using this hierarchy: 1. **Variant-level plan**: The exact product variant 2. **Product-level plan**: The product itself 3. **Collection-level plan**: One of the product's collections 4. **Shop default plan**: Your fallback plan Once matched, the plan's steps are **copied** into the manufacturing order as work orders, preserving all dependencies between them. This is important: work orders are copies, not live references. Editing a plan later doesn't retroactively change orders already in production. The manufacturing order then starts at the first work order with no unfinished dependencies. As work orders complete, dependent ones become startable. When the last work order finishes (or auto-complete is enabled), the manufacturing order itself completes. ## Auto-complete setting Each plan has an auto-complete toggle. When enabled, completing the last work order on a manufacturing order automatically completes the manufacturing order itself. This removes one click from your production team's workflow. Disable auto-complete if you want someone to review the finished product or sign off before marking the order complete. ## Default plan Your shop can have **one default manufacturing plan**. This is your safety net: new products with no specific plan automatically match the default, so you can start using plans immediately without setting up targets for every single product. **Important**: Only one plan can be the default per shop. If a product has: - No plan targeting it specifically, AND - No default plan set Then the manufacturing order is created without any work orders (same as before plans existed). ## When to use manufacturing plans Use plans when you have **repeated production workflows**: | Scenario | Use Plans? | Why | |----------|-----------|-----| | Products with consistent build process | ✅ Yes | Standardize and save setup time | | Steps with strict sequencing requirements | ✅ Yes | Prevent errors from wrong order | | Multi-person teams | ✅ Yes | Everyone follows the same process | | Every product is unique, one-off | ❌ No | Plans add overhead, not value | | Frequently creating same work order sequences | ✅ Yes | Plans automate this repetition | **Rule of thumb**: If you've created the same sequence of work orders three times, it's worth creating a plan. The time saved on the fourth order pays for the plan setup. ## Practical example **Furniture workshop scenario:** A furniture workshop has a standard dining table build process with these steps and dependencies: ``` Cut → Sand → Assemble → Finish → QC → Pack ↑ (Sand and Assemble run in parallel) ``` **The process:** 1. Create a manufacturing plan with all six steps 2. Set dependencies: Cut before Sand, Sand and Assemble in parallel, Finish after Assemble, QC after Finish, Pack after QC 3. Assign the plan to the "Dining Tables" collection **Result:** Every dining table order automatically receives those six work orders in the correct sequence, with the correct dependencies. No manual setup. No sequencing mistakes. Every time. ## See also - **[Made-to-order in Orderkraft](/docs/concepts/made-to-order/)** — how products are marked as buildable and connect to bills of materials - **[Manufacturing orders](/docs/concepts/manufacturing-orders/)** — the production orders that plans populate with work orders - **[Bill of materials](/docs/concepts/made-to-order/#the-bill-of-materials)** — the raw materials and components that go into a made-to-order product - **[Work order templates](/docs/concepts/manufacturing-plans/#work-order-templates)** — reusable kinds of work that plan steps are built from - **[Set up manufacturing plans](/docs/setup/set-up-manufacturing-plans/)** — step-by-step guide to creating your first plan --- Source: https://www.orderkraft.com/docs/concepts/customisations/ # Customisations Plenty of production work isn't made-to-order in the strict sense. The ring already exists in a drawer; someone still has to engrave it before it ships. The hoodie is stocked in four sizes; the embroidery on the back is what takes two days. Customisations are how Orderkraft handles that. A product you'd otherwise call regular stock gets a manufacturing order when, and only when, a customer actually personalises it. This page covers how that works; [Set up product customisations](/docs/setup/set-up-product-customisations/) is the step-by-step. ## Where the data comes from When a customer personalises something on your storefront, the choice ends up as a line item attribute on the order: a key and a value, like `Engraving` and `Anna & Tom, 2026`. Your product options app writes it, or your theme does, or a bundle builder does. Orderkraft doesn't collect that data and doesn't care which app produced it. It reads what's on the line. The problem is that line item attributes are a junk drawer. A real order line carries the engraving text the customer typed, and also `_has_gpo`, `_bundle_id`, and whatever else the apps in your stack decided to stash there. Production needs the first one. Nobody on the floor needs the rest. ## Customisation intents A customisation intent is you telling Orderkraft which attributes are real. It has two parts. The code has to match the line item attribute key exactly, character for character, capitals and spaces included. The name is what your production team reads. The name is the point of the whole thing. Storefront apps produce keys like `custom_engraving_1` or `Personalisation-Line-1`, because they were named by whoever built the form rather than by whoever has to read them six months later. Your intent turns that into *Engraving*, and that's the label that shows up on the manufacturing order. There's an optional description as well. It's for your own notes and never leaves Orderkraft. Intents live at **Settings → Customisation intents** and apply to the whole shop, not to individual products. One intent named *Engraving* covers every product you engrave. ## How a match happens Three things have to line up before Orderkraft records a customisation: 1. The product is in Orderkraft, and marked customisable on its product page 2. The order line carries a custom attribute 3. That attribute's key is identical to an intent's code Miss any one and nothing happens. That's deliberate. Match on the key alone and every stray `_bundle_id` becomes production work. Drop the customisable flag and one typo'd intent code starts pulling in lines from products you never meant to touch. Matching only looks at the key. The value is whatever the customer typed, and Orderkraft records it as-is. ## What a match does Orderkraft creates a manufacturing order for that line and records the customisations on it, each one labelled with its intent's name and carrying the value from the order. That manufacturing order is a normal one. It has a number, a status, a location, holds, and a timeline. It shows up in the production queue, in the [block on the Shopify order page](/docs/setup/track-production-on-the-order-page/), on the [customer's order status page](/docs/setup/show-production-status-to-customers/), and in [Flow triggers](/docs/automation/flow-triggers/). Nothing about it is second-class because the product wasn't built from raw materials. The difference is what's inside it. A made-to-order manufacturing order lists the materials to consume. A customisation-only one has no inputs, because there's nothing to consume. It carries the instruction instead. A line can have several customisations if it matched several intents. Each attribute is recorded once per manufacturing order, listed under the product it belongs to. ![A manufacturing order in Orderkraft with a yellow Waiting badge and the Enschede Warehouse (NL) production location. Below it, one line for the Blue towel, SKU BT-BU, quantity one, with three customisations underneath: Embroidery Text is Happiness, Embroidery Colour is Light Blue, Embroidery Style is River. Mark as on hold and Start production buttons sit at the bottom.](../../../assets/screenshots/manufacturing-order-customisations.png) *Three matched intents, and none of the internal keys that came in on the same line.* Whoever picks this up needs the text, the colour, and the style. The rest of what was on that order line doesn't change what they do, so it isn't shown. ## What doesn't produce a manufacturing order Orderkraft skips a line when it has nothing to build: an empty bill of materials and no customisation match. A stocked t-shirt with no personalisation on it stays a stocked t-shirt, and the order line passes through untouched. That means having a product in Orderkraft isn't on its own enough to put every future order for it in the queue. Something has to be produced for that line specifically. ## Deleting an intent Deleting an intent doesn't delete the customisations already recorded from it. Those stay on their manufacturing orders and fall back to showing the raw attribute key instead of the name. That's the honest option. Production history shouldn't rewrite itself because someone tidied up the settings six months later, and the raw key is still enough to work out what the order asked for. ## What this means for shipping A product in Orderkraft is flagged as made-to-order on your Shopify store, whether or not it has a bill of materials behind it. That's what [split shipments](/docs/setup/enable-split-shipments/) reads to decide what to hold back and what to send now, and it's what the [lead time block](/docs/setup/show-lead-times-on-your-storefront/) reads on the product page. So a stocked product you add for customisation gets treated like made-to-order at checkout. Usually that's what you want, since it has to go through production before it ships. The catch is the lead time, which is worth setting properly rather than leaving at whatever it was created with. --- Source: https://www.orderkraft.com/docs/concepts/built-on-the-fly/ # Built on the fly Some products aren't built from a fixed recipe. A necklace gets the charms the customer picked. A gift box gets whatever went into it. What the product is made of changes with every order, even though the product itself stays the same. Orderkraft calls these *built on the fly*. It's a production strategy you set on a product, alongside *Regular* and *Made to order*. ## How it's different from made-to-order A [made-to-order](/docs/concepts/made-to-order/) product has a bill of materials: a fixed list of what it takes to build one. Every order for it consumes the same materials in the same quantities. A built-on-the-fly product has no fixed list, because there isn't one. The parts arrive on the order itself, as separate line items the customer added to their cart. On the Shopify order, a necklace and its two charms are three lines, not one. Production has to know those three lines belong together, or the charms get treated as their own work and the necklace as an empty build. ## Telling Orderkraft how your store groups the parts How those lines say they belong together depends on your storefront setup, and Shopify has more than one convention for it. Orderkraft can't guess which one your store uses, so you tell it once, at **Settings → Built-on-the-fly configuration**. [Set up built on the fly](/docs/setup/set-up-built-on-the-fly/) walks through it. The setting is called *How they appear on the order*, and it has three options: | Option | When it's yours | | --- | --- | | Don't group | Customers don't pick parts in the cart, or you're not sure yet | | Bundle app | You're using a bundle app on Shopify | | Custom theme | A Shopify developer or agency built your theme | *Don't group* is the default, and it's the safe one. Orderkraft reads every line on its own and ignores any grouping information, which is correct for any store that doesn't sell pick-your-parts products. *Bundle app* covers stores where a Shopify bundle app assembles the parts. Those apps mark every line of the bundle, parent included, with the same group identifier, and Orderkraft uses that to keep them together. *Custom theme* covers stores where a developer built the picking into the theme itself. Custom themes tend to mark only the parts, not the parent. Orderkraft then finds the parent among the ungrouped lines, using the group's attributes to tell two of the same product apart, like two necklaces with different engravings. If you're not sure which option matches your store, ask. The settings page has a *Contact us* link for exactly that. Picking wrong means parts end up as their own production work instead of belonging to the parent. ## What changes in production Once the configuration matches your store, a built-on-the-fly order line produces a manufacturing order like any other. The difference is in the material list. The parts the customer picked show up as inputs, each tagged *Customer's choice*, with the material name linking back to the line on the Shopify order. If the product also has a bill of materials behind it, those recipe inputs sit alongside them, tagged *From bill of materials*. One manufacturing order can carry both: the necklace chain from the recipe, the charm from the cart. A part only becomes an input if its SKU matches a material in your Orderkraft catalog. Parts with no matching material are skipped rather than blocking the order, so a mismatch shows up as a missing input instead of a failed import. ## What stays the same Everything else about the manufacturing order works the way it always does. It has a status, a location, holds, a timeline, and a [ship-by date](/docs/concepts/manufacturing-orders/). It shows up in the production queue, on the [Shopify order page](/docs/setup/track-production-on-the-order-page/), and in [Flow triggers](/docs/automation/flow-triggers/). The customer's delivery promise still comes from the product's lead time, so a built-on-the-fly product needs one set just like a made-to-order one does. --- Source: https://www.orderkraft.com/docs/concepts/ship-by-dates/ # Ship-by dates A made-to-order promise isn't just "we'll build it." It's "we'll build it and it'll be out of the building by a specific date." When the last item sells on a Tuesday and the lead time is five days, the ship-by date is the Friday after. Orderkraft computes that ship-by date the moment a made-to-order manufacturing order opens — the order date plus the product's lead time. It's written once and never changes afterward. Even if the product lead time gets edited later, the order keeps the date it was promised against. Production can rely on it; a "we shipped on time" dispute tells you whether the promise kept up. ## What the date depends on The ship-by date only applies to made-to-order work. A build-to-stock manufacturing order has no customer behind it, so there's nothing to promise a date to. Until the sale turns into production, build-to-stock runs without a deadline. ## How urgency shows up in production Three badges tell you where each open order stands against its ship-by date. They appear on the manufacturing orders index and on the order's detail page. - **Overdue.** The date has already passed. If this shows up on an order still open, you're already late. - **Due today.** The ship-by date is today. Ship it now or watch the overdue badge appear tomorrow. - **Due soon.** Tomorrow or the day after. Anything in the next 48 hours counts. Completed and cancelled orders don't get a badge. A shipped order isn't urgent, and a cancelled one isn't your promise anymore. A *Shipped late* badge goes the other way: an order that *was* completed, but finished after its ship-by date. It stays visible so a late order keeps reading as late even after it's out of the queue. ## What the index counts in aggregate Below the filters, the index rolls the same counts up for the whole production queue: how many orders are overdue, how many left for today, how many close. Production sees the fires before they sort into the orders. Those three counts drive the badges themselves, so a red *Overdue* badge over there means "fix this list first." ## How it ties into sorting The sort popover on the manufacturing orders index has *Ship by date* as one of its options, and it's the one that makes the urgency badges useful. Order by promise, and the overdue ones come to the top of the page. Order by arrival and these badges are still there; you just have to read them harder. ## Where the date lives on the order A ship-by date is all over an open manufacturing order: - **The index row.** A `time` element with the date, plus the urgency badge beside it. Where it sits depends on sorting, but every open order shows one. - **The order page.** Same date and badge, same urgency. - **The timeline.** When the order completed, a *Shipped late* badge appears if the completed-at date passed the ship-by date. Build-to-stock orders show no ship-by date and no urgency badges in any of these places, because they never had one to keep. --- Source: https://www.orderkraft.com/docs/automation/shopify-flow/ # Automate with Shopify Flow Orderkraft sends production events to [Shopify Flow](https://apps.shopify.com/flow) as triggers. A manufacturing order gets created, started, put on hold, cancelled, or completed, and Flow picks it up and runs whatever you built around it. Tag the order, email the customer, post to Slack, hand off to another app. That's how Orderkraft reaches the rest of your stack. No integration to build, nothing to maintain. ## Finding the triggers Install Orderkraft, open Shopify Flow, create a workflow, and the triggers are there under Orderkraft in the trigger picker. There's nothing to switch on in Orderkraft itself. Seven of them exist today. The [trigger reference](/docs/automation/flow-triggers/) covers each one and the data it carries. ## Only made-to-order production fires triggers Every trigger carries a customer's order with it. Manufacturing orders you create to build stock ahead of time have no order behind them, so they never fire anything. If your workflow stays quiet during testing, that's the first thing to check: is the manufacturing order you're testing with actually linked to a sales line? ## Triggers only fire when something is listening Orderkraft only sends an event when a live Flow workflow uses that trigger. Shopify tells Orderkraft which triggers are in use and Orderkraft skips the rest, which keeps it from making calls nobody reads. Switch a workflow off and the events stop. Switch it back on and they resume from that moment. Nothing gets held in a queue in the meantime, so production that happened while the workflow was off won't be replayed. If you're changing a workflow that matters, do it during a quiet hour. ## Delivery and retries Events go out in the background, usually within seconds of the status change. If Shopify is unreachable or rejects the call, Orderkraft keeps retrying every hour for up to a year. A Shopify outage delays your workflow rather than losing the event. Delivery isn't ordered, though. A manufacturing order that goes from started to completed in the space of a minute can reach Flow the wrong way round. Read the status off the payload rather than assuming events arrive in sequence. ## What merchants build with it Tagging the Shopify order when production starts is the common first one, so support can answer "where is my order" without opening Orderkraft. After that it's usually customer notifications, which is where the choice of trigger starts to matter: *sales order manufacturing completed* sends one message per order, while the per-manufacturing-order triggers send one per item. The other one worth setting up early is a Slack alert on *manufacturing order on hold*. Held orders are the ones that quietly rot, and an alert gets someone chasing the missing material the same day. ## What's next The [Flow trigger reference](/docs/automation/flow-triggers/) has the exact firing conditions and payload for each trigger. --- Source: https://www.orderkraft.com/docs/automation/flow-triggers/ # Flow trigger reference Orderkraft ships seven Shopify Flow triggers. Five follow a single manufacturing order through its life. Two wait until a whole fulfillment order or sales order is done being produced. All of them only fire for made-to-order production, and only when a live workflow uses them. See [Automate with Shopify Flow](/docs/automation/shopify-flow/) for how that works. ## Manufacturing order triggers These five share the same payload: | Field | Type | What it holds | | --- | --- | --- | | Shopify order | Order | The customer's order, so you can use every Flow order action and condition on it | | Fulfillment order ID | Number | The Shopify fulfillment order the item belongs to | | Sales line ID | Number | The Shopify line item being produced | | Product variant ID | Number | The Shopify variant being produced | | Manufacturing order ID | Text | Orderkraft's internal ID for the manufacturing order | | Manufacturing order number | Text | The human-readable number, like `MO-123` | | Status | Text | The status at the moment the trigger fired | One manufacturing order covers one line item. An order with three made-to-order line items produces three manufacturing orders, and each fires its own trigger. Worth knowing before you wire any of these up to customer emails. ### Manufacturing order created Fires as the order comes in, when Orderkraft creates a manufacturing order for a made-to-order line item. Status is usually `draft` at that point. Good for tagging the order or telling production something new has landed. ### Manufacturing order started Fires when the manufacturing order moves to `in_progress`. Merchants mostly use this one to tell the customer their item is being made, which is the point where the delivery promise starts feeling real to them. ### Manufacturing order on hold Fires on a move to `on_hold`. You set that status when production can't continue: a material didn't arrive, a spec is unclear, the customer still has to confirm a fabric. This is the trigger worth wiring to Slack. On hold means someone has to go chase something, and nobody sees it if it only lives in Orderkraft. ### Manufacturing order cancelled Fires on a move to `cancelled`. Useful for releasing materials you'd reserved, or for letting support know the item isn't coming before the customer asks. ### Manufacturing order completed Fires when a manufacturing order is marked `completed`, and also when one is cancelled. Cancelling means the order is done as far as production is concerned, so it counts as complete here in the same way it does for the two triggers further down. Read the `Status` field if your workflow needs to tell the two apart, because a cancellation fires this trigger and *manufacturing order cancelled* both. Use it to push the item on toward fulfillment. If what you want is a "your order is ready" email, use the sales order trigger below. On a three-item order this one fires three times, and the customer gets three emails. ## Fulfillment order manufacturing completed Fires once every manufacturing order on a Shopify fulfillment order is finished, where finished means completed or cancelled. On a single-item fulfillment order that's the moment that item is done. On a bigger one it waits for the last outstanding item. | Field | Type | What it holds | | --- | --- | --- | | Shopify order | Order | The customer's order | | Fulfillment order ID | Number | The fulfillment order whose production is finished | Hang your fulfillment automation off this one. It pairs especially well with [split shipments](/docs/setup/enable-split-shipments/), where made-to-order items sit in their own fulfillment order and can go out as soon as they're built. ## Sales order manufacturing completed Fires once every manufacturing order on the entire sales order is finished, again counting cancelled work as finished. One order, one event, however many made-to-order items were on it. This is the one for the "your order is ready" message. | Field | Type | What it holds | | --- | --- | --- | | Shopify order | Order | The customer's order | The difference from the fulfillment order trigger only shows up when an order is split across locations or shipments. One order can have several fulfillment orders, so that trigger can fire more than once where this one fires exactly once. --- Source: https://www.orderkraft.com/changelog/manufacturing-plans/ Published: 2026-10-09 # Manufacturing plans # Manufacturing plans Every product you build has a workflow—cut, sew, finish, pack or assemble, test, QC, ship. The sequence matters. The dependencies matter more. Until now, every manufacturing order started with a blank sheet. Today, you save that workflow as a manufacturing plan and apply it automatically. **Result**: Define your steps once, set their dependencies, assign to products, and every matching order gets ready-made work orders. No manual setup. No sequencing mistakes. Every time. ## What's new | Feature | What it does | Benefit | |---------|--------------|---------| | **Manufacturing plans** | New section under **Manufacturing → Plans** | Central hub for creating, editing, and managing all your production workflows | | **Plan steps** | Individual work units within each plan | Become work orders on manufacturing orders | | **Work order templates** | Reusable kinds of work | Create once, pick in every plan (e.g., "Final QC") | | **Step dependencies** | Control sequencing between steps | Prevent errors from wrong order (e.g., "Cut before Sew") | | **Plan targets** | Assign plans to products/variants/collections | Automatic matching to the most specific plan | | **Default plan** | Shop-wide fallback plan | New products inherit a workflow automatically | | **Auto-complete** | Toggle to auto-finish manufacturing orders | Removes extra click from production workflow | ## What changed - Manufacturing orders now **automatically receive steps from matched plans** as work orders with preserved dependencies - Added new documentation: [Manufacturing plans concept guide](/docs/concepts/manufacturing-plans/) and [Setup guide](/docs/setup/set-up-manufacturing-plans/) - Products without a matching plan or default plan continue to create manufacturing orders without work orders (backward compatible) ## How it works 1. **Create** a manufacturing plan with your production steps 2. **Define** dependencies between steps (what must complete before what can start) 3. **Assign** targets (which products/variants/collections use this plan) 4. **Save** and let Orderkraft handle the rest When a made-to-order, personalised, or built-on-the-fly line item sells: - Orderkraft **matches** it to the most specific available plan - **Copies** that plan's steps into the manufacturing order as work orders - **Preserves** all dependencies between them - The order **picks up production** where the plan left off—no manual setup **Backward compatible**: Products with no matching plan and no default plan create manufacturing orders without work orders, exactly as before. --- Source: https://www.orderkraft.com/changelog/sorting-on-manufacturing-orders/ Published: 2026-09-11 # Sorting on the manufacturing queue # Sorting on the manufacturing queue ![The manufacturing orders index with a *Sort by* popover open. The popover lists two column options, *Order date* ticked and *Ship by* below, then a divider, then two direction options, *Oldest first* and *Most recent first* with the latter ticked. Behind the popover, the manufacturing orders table is dimmed back to the index with its urgency tiles, filters, and rows of orders reading *Waiting*.](../../assets/screenshots/sorting-popover.png) The manufacturing orders index sorted one way and one way only: most recent first. Fine for small queues, a problem when you're working from the ship-by date and the promise that matters isn't the newest order, it's the sequence the whole floor has to run. A sort button beside the filters now opens a *Sort by* popover with two choices of column: *Order date* or *Ship by*. Each column carries a direction choice made for the question you're actually answering: *Oldest first* / *Most recent first* on order date, *Soonest due first* / *Latest due first* on ship-by. The sort carries across pagination, tabs, and location switches, so once you pick a direction it sticks until you change it. ## Added - A sorting button on the manufacturing orders index that opens a *Sort by* popover with the working columns and direction. - *Order date* and *Ship by* as the two sortable columns. - Four direction labels in total: *Oldest first* and *Most recent first* for order date, *Soonest due first* and *Latest due first* for ship-by. ## Changed - Previously the index always sorted by order date, most recent first. The same default still runs, but it's one of the sortable options now instead of a fixed ordering. - Sort carries across anything that narrows the list — tabs, filters, and location. Deselecting a filter or switching a location doesn't reset the sort. --- Source: https://www.orderkraft.com/changelog/bulk-actions/ Published: 2026-09-08 # Bulk actions across production # Bulk actions across production ![The manufacturing orders index with the bulk action bar above the list. Two rows are selected, and the bar reads "2 selected" with a Place on hold button open: a dialog asking for the reason why production needs to pause, with a required Note field, Cancel, and a Place on hold confirm.](../../assets/screenshots/bulk-place-on-hold.png) A fabric delivery slips and suddenly forty manufacturing orders need to go on hold at once. Clicking through them one at a time isn't production planning, it's data entry. The same friction shows up when you want to move a dozen products from *Regular* to *Made to order*, or fix the lead times on a variant table that's grown to fifty rows. A shared action bar now shows across products, variants, and manufacturing orders. Tick rows, and it slides up with the actions for whatever resource you're standing on. Selection survives pagination. ## Added - **Product variants:** bulk edit lead times on selected variants. Select rows, and the lead time fields show up for everything you picked at once. - **Products:** bulk change production strategy — *Regular*, *Made to order*, or *Built on the fly* — on the selected products. Before it happens, the app names how many bills of material that strategy change would delete. - **Manufacturing orders:** bulk hold and lift hold. One *Place on hold* form lands a shared note on every selected order, and *Lift holds* resumes the ones that are paused. Rows that can't take the action are skipped and named rather than failing the whole batch. ## Changed - The skip is loud, not silent. When you ask for a bulk hold or lift on rows that don't qualify — an order that isn't holding, or a variant that can't be changed — the confirmation dialog lists them by number before it runs, and the preview line reads "Production resumes on N manufacturing orders" so you see which rows the batch will actually move before committing. - Bulk holds and lead time edits wrap in a transaction, so a failure halfway through the selection doesn't leave half the rows changed and half not. --- Source: https://www.orderkraft.com/changelog/ship-by-dates/ Published: 2026-09-04 # Ship-by dates on manufacturing orders # Ship-by dates on manufacturing orders ![The manufacturing orders index with the urgency tiles above the list — *Overdue* at 1, *Due today* at 0, *Due soon* at 0 — and three manufacturing order rows below, each with an order date and a Ship by column. The middle row's Ship by cell shows *September 01, 2026* on a red background with an alert icon.](../../assets/screenshots/ship-by-queue.png) When a made-to-order item hits the cart, there's a date it has to be out of the building. Until now that date lived in the customer promise and in nobody's head. Manufacturing orders carried a status but no deadline, so "when does this actually have to leave?" was a question production answered by memory. Every new made-to-order manufacturing order now captures its ship-by date at creation, computed from the order date plus the product's lead time. It never changes afterward, even if the lead time gets edited later. The promise is made against a specific moment, and production sees exactly where each order stands against it. ## Added - A ship-by date on every made-to-order manufacturing order, set once at creation and fixed for the life of the order. Build-to-stock orders don't carry one, since there's no customer's promise to keep. - Shipping urgency badges on the manufacturing orders index and on each order's detail page. *Overdue* when the date has passed, *Due today* when it's today, *Due soon* within the next two days. Badges stay away once an order is completed or cancelled, so a shipped order doesn't read as urgent. - Three urgency tiles above the list — *Overdue*, *Due today*, *Due soon* — each counting how many open orders sit in that state across the whole shop or the selected location, regardless of any filter you've set. Production sees the fires before sorting into them. ## Changed - An order completed after its ship-by date passes is marked *This order shipped late* on its detail page, with a banner naming the date it missed. The date is frozen at creation, so a lead time that changed later doesn't rewrite the promise — a late order keeps reading as late even after it's out of the queue. ![A manufacturing order detail page with a green *Completed* badge and a banner below reading *This order shipped late. It reached "Completed" after its ship-by date of August 25, 2026 had already passed.*](../../assets/screenshots/ship-by-shipped-late.png) ## Docs A dedicated concept page now covers what the ship-by date is, where it comes from, and what the urgency badges mean: [Ship-by dates](/docs/concepts/ship-by-dates/). --- Source: https://www.orderkraft.com/changelog/built-on-the-fly/ Published: 2026-09-03 # Built on the fly # Built on the fly Some products don't have a recipe. What they're made of isn't known until the order comes in, because the customer told you — a charm necklace where the charms are the whole point, a gift box assembled from the cart. Until now Orderkraft only knew one kind of production: read the bill of materials, build that. When the parts live on the order itself, production had to guess. Built on the fly is a third production strategy, next to *Regular* and *Made to order*. Set it on a product whose composition changes with every order, and Orderkraft starts pulling the parts from the customer's cart instead of from a bill of materials. ## Added - A *Built on the fly* production strategy on products. It sits alongside *Regular* and *Made to order*, and it tells Orderkraft to read the picked parts from the order itself. - A **Settings → Built-on-the-fly configuration** page that tells Orderkraft how your storefront marks the grouping. Shopify has more than one convention for saying "these three lines belong together", and Orderkraft can't guess yours. Three options: *Don't group* for stores that don't sell pick-your-parts products, *Bundle app* for Shopify bundle apps that tag parent and parts with the same group identifier, and *Custom theme* for themes a developer built, where only the parts carry the grouping mark and Orderkraft finds the parent among the other lines. - A *Create missing materials* switch on the same page. When it's on, a part on an order whose SKU isn't in your catalog yet becomes a material instead of being skipped. When it's off, that part is skipped and shows up on the manufacturing order as a missing input rather than blocking the import. - Picked parts show up on the manufacturing order alongside the bill of materials, each tagged *Customer's choice* with the material name linking back to that line on the Shopify order. A product can carry both: the chain from the recipe, the charm from the cart. ## Changed - A line composed in the cart now opens its own manufacturing order even when the product has no bill of materials behind it. Before, a product with an empty recipe produced no work, so a built-on-the-fly product fell through the queue. - The docs: [Built on the fly](/docs/concepts/built-on-the-fly/) and [Set up built on the fly](/docs/setup/set-up-built-on-the-fly/). Set the strategy on a product, then tell Orderkraft which grouping your storefront uses. *Don't group* is the safe default. If you're not sure which one is yours, there's a *Contact us* link on the settings page for exactly that. --- Source: https://www.orderkraft.com/changelog/customisations-on-regular-products/ Published: 2026-08-19 # Customisations on regular products # Customisations on regular products Until now, production work in Orderkraft meant made-to-order: a product with a bill of materials behind it, built when someone buys it. That left out a lot of real production. The ring is already in the drawer, but it still needs engraving. The hoodie is stocked in four sizes, and the embroidery is what takes two days. Those items now get manufacturing orders too, and only when a customer actually personalises one. ## Added - A *Customisable* switch on the product page in Orderkraft, with a badge next to the product name that says which way it's set. A customisable product doesn't need a bill of materials, so this works on things you stock rather than build. - Customisation intents, under **Settings → Customisation intents**. An intent maps a line item attribute key from your storefront to a name your production team recognises, so `Embroidery Text` reads as *Embroidery* on the floor. - Matching on incoming orders. When a customisable product is bought with an attribute whose key matches an intent, Orderkraft creates a manufacturing order for that line and records the customisation on it with the value the customer entered. These behave like any other made-to-order production: statuses, holds, timeline, the block on the Shopify order page, the customer account badge, and Flow triggers all work the same. - A *Test with a real order* panel on the intent page. Type any order number from your store and Orderkraft lists every line, every attribute on it, and ticks the one your code matched. It tests the value currently in the form rather than the saved one, so you can confirm a key before committing to it, and it only calls Shopify for orders it hasn't already synced. - Docs: [Customisations](/docs/concepts/customisations/) and [Set up product customisations](/docs/setup/set-up-product-customisations/). ## Changed - The manufacturing order page lists the customisations recorded on the order instead of every custom attribute on the sales line. Internal keys your other apps leave on the line, like `_has_gpo`, no longer show up. Everything that did match is shown at once, so the toggle that hid all but the first attribute is gone. - Order lines with an empty bill of materials and no customisation match no longer create a manufacturing order. Adding a product to Orderkraft used to be enough to put every future order for it into the production queue, whether or not there was anything to do. - Deleting an intent leaves the customisations already recorded from it in place. They fall back to the raw attribute key rather than disappearing, so production history stays readable. --- Source: https://www.orderkraft.com/changelog/production-status-in-shopify/ Published: 2026-08-05 # Production status inside Shopify # Production status inside Shopify Ops could see what production was doing. Nobody else could. Support answered "where is my table?" by switching apps, and the customer answered it by sending an email and waiting. Three new extensions put that status where the question actually gets asked. ## Added - A *Manufacturing orders* block on the Shopify order details page. It lists every manufacturing order for that customer's order with its number, the product being built, the quantity, and its current status, and pages through them when there are more than a few. - A detail view that opens from any row in that block, without leaving the order page. It shows the status, the production location, any active holds together with the note explaining them, the product and quantity being produced, and a timeline of every status change with who made it and when. - A production badge on each line item of the customer's order status page, so a customer looking at their order sees *In progress* or *On hold* next to the item it applies to. It's a customer account block you add once in the customer account editor. See [Show production status to customers](/docs/setup/show-production-status-to-customers/). - A `manufacturing_statuses` metafield on the order, rewritten whenever a manufacturing order is created or changes status. That's where the badge gets its answer. - Docs for all of it: [Manufacturing orders](/docs/concepts/manufacturing-orders/), [Track production on the Shopify order page](/docs/setup/track-production-on-the-order-page/), and [Show production status to customers](/docs/setup/show-production-status-to-customers/). ## Changed - A line produced by more than one manufacturing order now reports a single rolled-up status instead of the first one found. The status furthest along wins and is labelled as partial, so a line with one order still queued and one in production reads as *Partially in progress*. Cancelled ranks lowest, so a cancelled order never masks work that's still running. - Only made-to-order production appears on the order page and in customer accounts. Build-to-stock manufacturing orders aren't tied to a customer's order and stay inside Orderkraft. --- Source: https://www.orderkraft.com/changelog/shopify-flow-triggers/ Published: 2026-07-21 # Production events in Shopify Flow # Production events in Shopify Flow Production status used to live only inside Orderkraft. Now it goes out to Shopify Flow, and Flow talks to everything else you use. ## Added - Five triggers that follow a single manufacturing order: created, started, on hold, cancelled, and completed. Each one carries the customer's order, so every Flow order action and condition works on it, along with the fulfillment order, sales line, and variant IDs. - A *Fulfillment order manufacturing completed* trigger that fires once all the production for a fulfillment order is done. Pair it with split shipments to release a made-to-order shipment the moment it's built. - A *Sales order manufacturing completed* trigger that fires once per order, no matter how many made-to-order items were on it. This is the one for the "your order is ready" email. - Docs for all of it: [Automate with Shopify Flow](/docs/automation/shopify-flow/) and the [Flow trigger reference](/docs/automation/flow-triggers/). ## Changed - Events are only sent for triggers a live Flow workflow actually uses, and only for made-to-order production. Build-to-stock manufacturing orders stay quiet. - Failed deliveries retry every hour for up to a year, so a Shopify outage delays a workflow instead of dropping the event.