Three glazed, two chocolate, one jelly — not "pick six different things." They are not the same feature.
If you sell doughnuts, cans, cupcakes, juices or cookies, you already know the request. The customer doesn't want six different flavours. They want three of the good one, two of the second one, and one of something they're curious about.
This gets asked on the Shopify forums constantly and it almost never gets a straight answer, because most replies quietly answer a different question — "pick any 6 items" — which is not what was asked.
The distinction matters enough to name properly, because it's the thing to check before you pay for any app.
| What the shopper does | Typical name | |
|---|---|---|
| Pick N distinct | Ticks six different products from a grid. Each item once. | Mix and match, build a box, pick any 6 |
| Quantity per option | Sets a number next to each product. 3 · 2 · 1 · 0 · 0 · 6. | Rarely named at all |
The first is a checkbox grid. The second is a list of number inputs that has to add up to your pack size.
They feel like the same feature to a merchant, which is exactly why people buy the wrong app. A demo showing a beautiful six-item picker tells you nothing about whether a shopper can put the same doughnut in twice.
The one question to ask any app before you pay: "Can a customer put three of the same item in one box?" Not "does it do mix and match." The second question gets you a yes from apps that can't do the first.
The instinct is to build it with product options. It fails quickly, and for a specific reason worth understanding so you don't keep circling back to it.
Shopify raised the variant ceiling to 2,048 per product in 2024, on every plan. But the option limit is unchanged at three — and Shopify's bundle documentation is explicit that you can't combine quantity options.
A twelve-slot pack across twelve flavours isn't three options. And the combination count is brutal: choosing 6 from 12 with repeats allowed is 12,376 possibilities. At twelve slots it runs to millions.
The variant ceiling isn't your obstacle. The option ceiling is, and no app can raise it.
Add a number field per flavour to your product template. The shopper's numbers ride along with the item into the cart and onto the order as text.
Free, and genuinely fine for made-to-order businesses. Two things to know:
Inventory: not tracked. Good for made-to-order, risky off a finite shelf.
Instead of letting shoppers set numbers, you decide the useful combinations: "6 Glazed + 6 Chocolate," "4/4/4 Mixed," "Baker's Choice." Each is a real variant with real stock.
This is the underrated option. It isn't the feature that was asked for — but for a lot of shops, five sensible pre-built packs outsell a build-it-yourself grid, because most customers don't actually want to make twelve decisions about doughnuts.
Inventory: accurate. Costs nothing. Try this before buying anything.
The real version. Shopify's supported route for shopper-built boxes is the Cart Transform Function, which lets one cart line resolve into its true components at checkout, so each can decrements its own stock.
Shopify's own docs allow up to 150 components on a customized bundle, which is far more headroom than any pack needs.
One honest caveat straight from those docs: with cart-transform bundles, apps must maintain their own inventory logic on storefronts. Components get checked at cart and checkout, so a genuine oversell is blocked — but the product page can still show a flavour as available after it's gone, unless the app does that work. Worth asking about specifically.
Inventory: accurate at checkout. Product-page accuracy depends on the app.
Skip boxes entirely. Let people add cans individually and apply a quantity discount at twelve.
Inventory is perfect, because every line is a real product. It costs nothing. Some bundle apps work this way deliberately.
The cost is presentational and operational: the cart shows twelve lines instead of one box, the order does too, and your packer sees a list rather than "1 × Build Your Own 12-Pack." For a small operation that's genuinely fine. At volume it's a picking-error generator.
Inventory: perfect. Presentation: poor.
Whatever you build, these three settings decide whether the feature is pleasant or a source of refunds.
A pack of twelve should refuse to add at eleven. "Up to twelve" produces short boxes and confused customers. Enforce the total server-side, not just in the browser.
Without one, somebody orders twelve of your hardest-to-make item. A cap of four per flavour on a twelve-pack keeps the box mixed and your production sane. This one setting prevents most of the operational pain.
Obvious, and frequently broken. If your form requires at least one of everything, it isn't a build-your-own box — it's a fixed pack with extra steps.
| Your situation | Use |
|---|---|
| Made to order daily, stock isn't the constraint | Line item properties — free |
| A handful of popular combinations | Pre-built quantity variants — free |
| Low volume, don't mind a long cart | Individual items + quantity discount — free |
| Shopper sets quantities, finite stock, one clean order line | A bundle app with quantity per option |
Three of the four are free. Only the last row needs a paid app — and only because it's solving presentation and inventory at the same time.
We build Choosebox for that last row. A shopper can take multiples of one item inside a minimum and maximum you set, and components stay real products so stock doesn't drift. If one of the free rows fits, use it — we'd rather you kept the money.
Related: How to let customers choose flavors on Shopify · Any 6 products for one fixed price
Sources: Shopify developer documentation — product bundles · Customized bundles & Cart Transform