Products, variants and variant axes
The product catalog, fulfillment modes, SKUs and pricing, product variants, variant axes and generated combinations, the bill of materials, stock per variant and per location, and print files (a sliced file on a variant that FoxTrack can send to a printer).
What a product record holds
A product is something you sell, for example an articulated dragon or a desk organiser. The product form has four tabs: Details, Pricing, Stock and BOM (BOM shows unless the product is From stock). On Details it has a name, a Price, an optional SKU, a description, a Fulfillment mode and its variants. Fulfillment decides how an order line for it moves stock: Made to order consumes the bill of materials each time one is ordered and tracks no finished stock; From stock deducts finished goods from what is on hand; Hybrid sells from stock while it lasts and makes the rest to order from the bill of materials. Duplicate on the Products list copies a product as a starting point for a similar one. Free workspaces may hold 5 products and Pro 30; Farm is unlimited.
Filament, Inventory and Products: three different kinds of stock
FoxTrack tracks three different kinds of stock, each on its own page. Filament is spools, tracked by weight in grams: the plastic you print with. Inventory is everything else you buy in to build or pack an order, such as inserts, magnets or shipping boxes, tracked by count. Neither is something you sell on its own; both are raw materials. This page is where a finished, sellable item's own stock lives: for a product set to From stock or Hybrid, its stock is tracked per variant on the Stock tab, separate from the materials that went into it. Making items ahead of time to sell from a shelf? Add the hardware and packaging you used on the Inventory page first and link it to the bill of materials here, then set how many finished units you have for sale on this page, not there. The bill of materials on a variant is what ties spools and parts to it, so saving an order deducts what it lists.
When you need variants
A variant is one sellable version of a product, such as Small, Medium and Large of the same model. If everything you sell of a product is identical, the single Default variant is enough. Variants each carry their own name, SKU, price, stock and bill of materials. Add variants by hand under Variants on the Details tab (Add variant), or generate them from axes. Each variant row has a name, a Price override, its Pool count, an optional SKU and a Low-stock alert.
Variant axes and how they work
A variant axis is a dimension along which variants differ: Size with values Small, Medium, Large, or Height with 20 cm and 30 cm. Define axes on the product by naming each one and listing its values, then press Generate combinations to add one variant for every combination. Three sizes and two heights give six variants. One axis can be marked as the pricing axis so each of its values carries a price override, for example 30 cm at 12 and 20 cm at 9 in your currency; generated variants inherit those prices. Generate combinations never removes or overwrites existing variants, so after adding a value you can press it again and only the missing combinations are added.
SKUs and prices across variants
Each variant has its own optional SKU and a Price override. Set the Price on the product and override it per variant, or use a pricing axis to seed the overrides. Clear a variant's override to fall back to the product's Price. The product search on an order line, on a quote line (Add product) and on an invoice (Add from Products) finds a product by its SKU as well as its name, and shows each SKU beside the name: type or scan a SKU and press Enter to pick that product. Per sales channel prices are set on the Pricing tab: leave a channel's price blank to use the variant's normal price for that channel. Prices are entered in your workspace currency as ordinary decimals, for example 5.00.
Stock tracked per variant and per location
Stock is tracked per variant. The default pool is what you hold at your own place; the Stock tab's Stock by Location table shows one row per variant and one column per location: the default pool plus each sales channel (a store, a market) for what sits there. With many variants, type in the Filter variants box to narrow the rows. An order for a channel takes from that channel's row, and from the default pool only when the channel has no row of its own; an order with no channel takes from the default pool. The variant's Low-stock alert (on the Details tab) warns when the total across all locations drops to that number. Turn on the Restock levels switch to set Min (flag a restock below this) and Target (refill up to this; blank means up to Min) per channel; both can be typed on a variant that is not saved yet and are written with the product. Set all, next to a channel name, applies one Min and Target to every variant shown. Transfer, on a variant's row, moves that variant's stock from one location to another; save the product first to enable transfers. The Replenishment page shows every variant's stock per location side by side. To fix a count by hand (after a stock take, say), type the real number in the variant's cell in Stock by Location, or in its Pool box on the Details tab, and save the product. The Pool column on the Details tab is the default pool only; Total quantity adds what sits at your stores, shown beside it as +N at stores. To see what moved a variant's count (orders, restock runs, transfers, imports, edits by hand), press History next to the variant on a saved product. A transfer shows twice, once where it left and once where it arrived, and the first row of a location is its opening balance, so the rows add up to what it holds. Units a restock run has taken from the pool but not delivered yet are named on order lines as held (12 held by RPL-0007) until the run is completed.
How variant names are joined: the separator
Settings → Products and stock → Variant name separator decides what goes between a product name and its variant name on order, quote and invoice lines, in the fulfillment queue and on packing slips (Vase Sinus / 30cm or Vase Sinus – 30cm), and between the axis values when Generate combinations names a variant. Choose slash, dash, hyphen, comma, bar or a space. Changing it does not rename variants you already generated; it applies to new combinations and to how names are joined from then on.
Ordering generated variants: Group by and Sort variants
Generated names always read in axis order (Height then Color gives 30cm – Silk Pink). Which axis changes fastest down the list is a separate choice: with two or more axes, the Group by selector next to Generate combinations names the axis that changes slowest. Sort variants re-orders the rows you already have the same way, hand-added rows staying at the end in their own order. The list order is saved with the product and is the order pickers show. Generating combinations into a brand-new product also removes the placeholder Default row when it is still empty; a saved Default variant is never removed for you.
Bill of materials per variant
Each variant can list the filament (grams per unit) and inventory items (quantity per unit) it consumes. Saving the variant replaces its previous list. Costs roll up from the linked materials, and the list is what a Made to order or Hybrid order line consumes when it is saved. A Large dragon can need 25 g of PLA while a Small needs 15 g. On an order, materials added directly to the line override the variant's list for that order only. An order line keeps the list it was saved with: changing the variant's list later applies to new order lines, not to orders already placed.
How products connect to orders
Choose Product as the order type and pick a product and variant on each line. Saving the order moves stock according to the product's Fulfillment mode: From stock lines deduct finished goods (never below zero), Made to order lines consume materials, and Hybrid lines take what the pool holds and print the rest, with a From stock field on the line to override the split. Deleting the order or removing the line puts the stock back. Each line remembers the product's mode and materials from when it was saved, so changing a product's mode or its bill of materials later leaves old orders as they were; a line's stock moves again only when the line itself changes (quantity, product, variant or materials), when the order's sales channel changes, or when the order is cancelled or brought back. A product that orders use cannot be deleted: Delete offers Archive instead, which keeps it on its old orders. Product names and prices only reach an AI provider if the Share business data permission is on.
Print files
A variant can hold one sliced print file, which you can send to a printer from FoxTrack. Open the product and go to the BOM tab: the Print file area is at the foot of each variant's card. A From stock product has no BOM tab, so its Print file area sits under each variant on the Details tab instead. Save the product first: a variant that is not saved yet asks you to. Press Attach file and pick the file:
- .gcode for a Klipper printer, sliced in OrcaSlicer, PrusaSlicer, SuperSlicer or Cura.
- .gcode.3mf for a Bambu Lab printer. In Bambu Studio, slice the plate and use Export plate sliced file. To keep several plates in one file, slice them all and use Export all sliced file instead. FoxTrack reads up to 64 plates from one file.
A file can be up to 50 MB. FoxTrack reads the printer model it was sliced for, the print time and the filaments, and shows them under the file name. A file with several plates shows how many plates it has (3 plates) in place of one print time. When you press Print, the dialog has a Plate box to choose which plate to send, and it starts on the first plate. With a file attached you can press Print (see Printing a file from FoxTrack under Integrations), Replace it with another, Download it, or Remove it. Removing asks first; printers that already have the file keep their copy. Removing a variant, or its product, removes its file too.
Sending a file to a printer needs FoxTrack Bridge running at your shop, and a Bambu Lab printer must be in LAN Only Mode with Developer Mode on (Bambu Cloud mode cannot take files). Print files need the Pro or Farm plan, the same as Bridge. After a move to Free, a file already attached stays: you can still Download or Remove it, but not print or replace it. Storage is 2 GB per workspace on Pro and 20 GB on Farm; Free has none. The first variant's Print file area shows how much of it you have used.
Deleting a product
Owners and admins can delete a product; members cannot, and the Delete button does not show for them. Open the product and press Delete at the foot of the form, then Delete product to confirm. To delete several at once, tick them on the Products page, press Delete at the bottom of the list, then Confirm delete. Deleting removes the product with all its variants and their stock, and it can't be undone.
A product that is on orders, restock runs or sales history cannot be deleted, because those would lose track of the stock they used. The confirm box says so and offers Archive product instead (from the list, the message says to open the product and press Archive). Archive, at the foot of the form, is open to every member: the product leaves the Products list and the product picker for new lines, and everything that used it stays exactly as it is. Turn on Show archived on the Products page to see archived products, and press Unarchive on one to sell it again.
Importing and labelling products
Import on the Products page loads products from a CSV file with column mapping. Each product row has a label button that downloads a QR label; scanning it opens the product in FoxTrack. If someone else saved the same product after you opened it, Save says the product was changed by someone else: Load the latest drops your edits and reloads theirs, Keep mine saves yours over theirs.
Still stuck?
Email info@foxtrack.studio or ask on the FoxTrack Discord. Inside the app, the question mark in the top bar sends a bug report or feedback.

