This release shipped in November. The entries below describe what changed at that time, scoped to the bundle types each change affects.
Improvements
Edit variants of added products
The Bundle Products interface was redesigned to make editing variants easier.
What changed:
Edit icon added. A pencil icon appears next to each product in the bundle list. Click it to open the product selector and modify the selected product or its variants.
Smarter selector labels. "Add products" when adding items for the first time; "Edit products" when adding more items or editing existing ones.
Simplified default variant selection. The old control was replaced with a direct link, "the first available one." Clicking it opens a modal where you can change the default variant.
Reset default option. If you change the preselected variant, a "Reset default variant" button appears to revert to the original.
Improved variant visibility. The Show all variants button includes an arrow icon. Click to expand the full list of variants; click again to collapse, with an inverted arrow and "Hide all variants."
Visual refinements. Product images display in full width, and the drag handle icon is centred.
Before this release, changing a variant meant removing and re-adding the product, the default-variant control sat separately, and variant lists were hidden behind a plain button.
Free gift
Before this release, a free gift had to be added to a bundle as a separate free-gift product. Two ways of doing it now exist.
Free product within a discounted bundle. Mark one or several products or variants already in your bundle as Free. The app applies a 100% discount to those items, and each one shows a "Free" label in the widget.
Free gift as a separate product or collection. Offer a free product or a whole collection as a gift. The setup interface shows Add products or Add collections, one active at a time, and the customer picks one gift from what you offered.
The customer makes that choice in the widget, not at checkout. Depending on your setup, the gift is added silently, or the Choose free gift modal opens for them to pick — and a modal the customer closes without choosing leaves the gift unclaimed. A gift the customer removes is never re-added automatically; it stays reachable in the cart's free gift bubble, where gifts can be added, removed or replaced when alternatives exist.
Free gifts are always optional for the customer to accept.
Shopify Functions
Bundle discount logic moved to a Shopify Functions discount function, implemented in Rust and compiled to WebAssembly with a JavaScript fallback, registered as an automatic app discount. It recalculates on every cart change.
What this means:
Inventory is deducted per component. Selling a bundle deducts stock from each component individually, not from a single bundle stock figure.
No discount code is involved. The discount is native to Shopify's own discount system, so checkout, order confirmation emails, and multi-currency and multi-language stores all need no extra setup.
It applies wherever the cart matches. That includes any Shopify POS cart whose line items match a bundle, with no tile and no cashier step.
For the difference between the POS discount and the POS tile, see "Adding bundles to Shopify POS."
What the order shows still follows the bundle type you chose: a Shopify bundle is one cart line split into its components at checkout and in the order, a Physical bundle puts each component on its own order line, and a Widget-only bundle's components appear as themselves.
The same goes for channel reach. A Shopify bundle sells on the Online Store, Shopify POS and the Shop app. A Physical bundle is a regular Shopify product, so it lists on Google, YouTube, Facebook and Instagram as well as the Online Store, and on POS for the discount. A Widget-only bundle has no product of its own, so it reaches the Online Store and the POS discount only. See "Where your bundles can sell."
One thing this does not do: it does not survive uninstalling the app. Uninstalling unpublishes every bundle and deletes the app's automatic discount, so bundle discounts stop applying on the storefront immediately. See "Uninstalling the app."
Functions is the path every current installation runs on. A legacy path — where the widget created a temporary Shopify discount code at add-to-cart — survives only on stores installed before this rollout, and a new install will not encounter it.




