Variants
How to sell one product in several sizes or options, with its own price and stock for each, and how to split one out later.
6 min read · Updated 26 Sep 2026
On this page
A variant is a version of the same product that needs its own price or its own stock count — Small, Medium, Large; 330 ml and 1 litre; Red and Black. You create them on the product itself, not as separate products.
Use a variant when the thing being sold is genuinely the same item in another size. Use two separate products when they are different things that happen to sit together on a shelf.
Adding variants
Variants live in their own block on the product form, between Pricing and Options.
- Open the product (Catalog → Products, then the item) and click the edit pencil.
- In the Variants block, click Add Variant.
- Fill in the row. Repeat for each option.
- Save.
The moment a product has variants its Type becomes Variant Parent. You do not set that yourself.
A product must have either no variants or two or more. Exactly one is refused: "A product must have either no variants or 2 or more." A single variant adds nothing the product's own name and price do not already say.
You can add up to 50 variants to one product.
What a variant row holds
| Field | Required | Notes |
|---|---|---|
| Name | Yes | What the cashier picks — Small, 1 Litre, Red. |
| SKU | No | Generated if you leave it blank. |
| Cost | Yes | Pre-filled with 0, like the product's own cost. |
| Selling | Yes | Warns "Below cost" under the field if it is less than the cost. |
| Wholesale | No | Only appears with the Customer Memory & Promos add-on. |
Kassly refuses to save a row with a blank Cost or Selling price, and tells you which row is at fault.
There is no on/off switch for an individual variant on this form — rows are created active. If you stop selling one option, remove its row or split it out into its own product, which you can then deactivate.
There is no variant matrix
Kassly does not generate combinations for you. There is no "Size × Colour" grid that produces six rows from two attributes. You type the rows you want, and if an item varies on two things, you put both in the name:
Small / Red
Small / Black
Large / Red
Large / Black
That is deliberate about what it is not: for a product with three sizes in five colours you are typing fifteen rows by hand. If that is your catalog, consider whether colour needs to be a variant at all, or whether the sizes alone are what you actually price and count separately.
Variant codes and barcodes
Variant SKUs are checked hard, because they are how a specific option is identified everywhere else:
- Unique across your whole catalog. Not just within the product. If another product's variant already uses the code, you get "SKU … is already used by another product in your catalog. Pick a unique SKU."
- Unique within the product. Repeating the same SKU on two rows of the same product is rejected before anything is saved.
- Capitalisation does not make a SKU different.
SM-01andsm-01collide.
Barcodes work differently. The product form has one Barcode field, on the product itself — the variant rows have no barcode box. Kassly can match a scan to a specific variant, and it does index the barcodes of active variants, but this form is not where you set them.
To give each variant a barcode, tick the product on the Products list, tap Print labels, then Generate barcodes: every active variant without one gets an in-store barcode. See Barcode labels.
Stock per variant
Each variant carries its own quantity at each branch. Small and Large are counted, received and adjusted independently, and a variant that is out of stock does not affect the others.
On the Products list the Stock column shows the combined total across all variants, which is usually what you want at a glance. To see or change one variant's quantity, work from Stock levels.
Deactivating the whole product takes all of its variants off the grid at once. Their stock rows and sales history stay exactly where they are.
Prices per variant
Once a product has variants, the variant's price is what is charged. The product's own selling price is still shown on the Products list, but a sale always takes the price from the option the cashier picked.
The same applies to wholesale prices: a line rung up at the wholesale price takes the variant's wholesale price, falls back to the product's, and finally falls back to the ordinary selling price if neither is set. See Product pricing.
Splitting a variant into its own product
Sometimes a variant grows up — the 1-litre bottle starts selling in volumes that deserve its own reporting line. On the product's edit screen, each saved variant row has a small arrow button: Split into its own product.
Kassly asks you to confirm, then:
| What happens | Detail |
|---|---|
| A new product is created | Named Parent name - Variant name, with the variant's name, SKU, barcode and prices. |
| Settings are copied from the parent | Category, image, description, tax settings, stock unit, Show in POS. |
| Live stock moves | The variant's current quantities transfer to the new product. |
| History stays put | Past sales, stock movements and purchase orders stay attached to the original variant. |
| The variant is removed from the parent | And you are taken to the new product's edit page. |
This is one-way. There is no "merge back". Splitting also counts as creating a product, so on the Free plan it needs a free slot under the 50-item limit.
If the split leaves the parent with exactly one variant, Kassly folds that last variant back into the parent automatically — its price moves up to the product, its stock merges into the product's own, and the Type goes back to Standard. That is the same rule as "no product has exactly one variant", applied for you.
Removing variants
Delete rows with the bin icon and save. If you remove every row, the product becomes a plain Standard product again and keeps its own price and SKU.
Removing a variant does not erase what it sold. Receipts and reports keep their own copy of the name and price at the time of each sale.
Recipes and variants
A recipe can be attached to one specific variant or to all of them. A large iced coffee that uses more milk than a small one gets its own recipe; a dish where size makes no difference to the kitchen gets one recipe with the variant left blank.
When a sale needs a recipe, a variant-specific one wins over the catch-all. See Ingredients and recipes.