How to let customers choose flavors on Shopify

Four approaches, what each one actually costs you, and which ones keep your inventory honest.

You sell twelve flavors. You want to sell a six-pack where the customer picks which six. On paper this is the simplest thing in the world. In Shopify it is one of the most awkward, and the reason isn't obvious until you've already built it the wrong way twice.

There are four ways to do it. Three of them are free. Only one keeps your inventory honest, and which one you should use depends on a question most guides never ask: do you need to know how many chocolate ones you have left?

First, the wall everybody hits

Shopify raised the variant limit from 100 to 2,048 per product in 2024, and every plan gets it — Basic through Plus, nothing to enable.

That sounds like it solves the problem. It doesn't, because the option limit didn't change. It's still three.

Options are the dropdowns on your product page: Size, Colour, Flavour. Three of them, maximum.

Now think about what "pick any six flavors" actually is. It's six independent choices — slot one, slot two, slot three, and so on. That's six options, and Shopify gives you three. You hit that wall long before you get anywhere near 2,048 variants.

And if you model it as combinations instead of slots, the arithmetic turns on you fast. Picking six from twelve, where a customer can take two of the same flavor, is 12,376 possible combinations. The variant ceiling is 2,048. You were never close.

So variants are out for genuine customer choice. They're excellent for something else, which we'll get to.


Option 1 — Variants

Use it when: the customer is choosing from a small, fixed set of pre-made combinations.

A "Spicy Six-Pack," a "Mild Six-Pack," a "Best Sellers Six-Pack" — three variants of one product. Clean, free, native, and inventory works properly because each variant is a real SKU you can count.

Also use it when the choice is genuinely one dimension. A single-flavor product in twelve flavors is one option, twelve variants. That's exactly what variants are for, and you should not overthink it.

Where it breaks: the moment the customer makes more than three independent choices. There is no workaround, because the limit is on options, not variants, and no app can raise it.

Two costs worth knowing before you build a high-variant product:

Inventory: accurate. Every variant is a real stock number.

Option 2 — Line item properties

Use it when: you need the customer's choices recorded on the order, and you're willing to track stock yourself.

Line item properties are custom fields attached to a cart item. You add form fields to your product template — six dropdowns, one per slot — and the selections ride along with the item into the cart, through checkout, and onto the order.

It's free. It needs a theme edit, and it's the approach most "do it without an app" tutorials are quietly describing.

Here is the part those tutorials leave out, and it's the whole thing:

Shopify sees one product sold. The flavors are text riding along beside it. They are not stock.

So if you have four chocolate left and eleven customers each pick two chocolate, Shopify will happily take all eleven orders. Nothing stops it. Nothing warns you. You find out when you're packing boxes, and then you're emailing customers to ask whether a substitution is alright.

For some businesses that's fine. If you bake to order every morning and stock isn't really the constraint, line item properties are honest and cheap and you should use them.

If you're shipping from a finite shelf, this approach will eventually cost you a weekend.

One trap worth knowing. If the properties are attached to the add-to-cart form correctly, they survive "Buy it now" and go-to-checkout. If they're bolted on with JavaScript that writes to the cart after the item is added, they can vanish — the cart gets a new token and the data goes with it. Test the Buy-it-now path specifically. That's the one that breaks, and it breaks silently.

Inventory: not tracked. You are the inventory system.

Option 3 — One product per combination

Use it when: you have a small number of combinations and you want stock to be exactly right.

Build "Chocolate ×3 + Vanilla ×3" as its own product. Then build the next one. And the next.

Inventory per combination is perfect. But stock is not shared — selling out of the chocolate-heavy box tells the vanilla-heavy box nothing, because as far as Shopify is concerned they're unrelated products. You're now maintaining stock in two places: the real shelf, and the fiction on your product list.

At six or eight curated combinations this is completely reasonable and costs nothing. At nine hundred it isn't a strategy, it's a second job.

Inventory: accurate per combination, but not shared across them. That distinction is where this approach fails as you grow.

Option 4 — A bundle app

This is where most people end up, so it's worth being precise about what's on offer — including the free first-party option, which is better than most guides admit and worse than its name suggests.

Shopify's own Bundles app

Free, made by Shopify, and it does something genuinely useful: when a bundle sells, it deducts one unit from each component product's inventory. Real bundling, real stock, no monthly fee.

It does not do customer choice. Shopify's Bundles app supports fixed bundles and multipacks only — you decide what's in the box. There is no "pick any six."

Two other things to know before you commit: it's limited to your online store and headless storefronts (not Facebook, Instagram or TikTok), and it is not compatible with subscriptions or the Shopify Subscriptions app.

If you're selling a fixed six-pack, stop here. Install it, it's free, you don't need anything else. That's most stores, and paying a monthly fee for it would be silly.

Third-party apps

Once the customer is choosing, you need what Shopify's own documentation calls a customized bundle — built on the Cart Transform Function, Shopify's supported primitive for exactly this. It's the mechanism that lets one thing in the cart resolve into several real components at checkout, so component stock decrements properly.

When you're comparing apps, these are the questions that actually separate them:

  1. Can a customer take more than one of the same item? Three glazed, two chocolate, one jelly. A surprising number of apps only do pick-N-different — and if you sell doughnuts or beer, that's the entire use case.
  2. Does component inventory decrement? If not, you've paid monthly for Option 2.
  3. Is the price fixed for the box, or summed from the items? Both are legitimate. Know which you need before you buy.
  4. Does it survive "Buy it now"? Test it. This is where implementations quietly fail.
  5. Can you set a minimum and maximum? "Pick between six and twelve" is the difference between a box that works and one that ships half empty.

Inventory: accurate, if the app uses component references properly. Ask. Don't assume.


So which one

Your situationUse
One flavor per product, twelve flavorsVariants
A few fixed pre-made packsVariants, or Shopify's free Bundles app
Customer picks, stock isn't the constraint (made to order)Line item properties
Customer picks, and stock is finiteA bundle app with component inventory
Under ten curated combinations, want exact stockOne product per combination

The honest summary: three of the four are free, and most stores should use a free one. The paid option earns its place in exactly one situation — the customer chooses, and you need to know what's left on the shelf. If that's not you, don't pay for it.


We build Choosebox, a Shopify app for the last row of that table — customers pick their own items, component inventory decrements, and shoppers can take multiples of one item within a minimum and maximum you set. If your situation is any of the other rows, one of the free approaches above will serve you better and we'd rather you used it.

Sources: Shopify developer documentation — product bundles · Shopify variant limit, 2026 · Shopify native Bundles limitations · Shopify official Bundles app review