Skip to content

SHOPIFY BUNDLES · NO APP · NO SUBSCRIPTION

Bundles that keep your stock counts accurate.

Every bundle sold deducts the real SKUs — so your stock counts stay true, your subscriptions keep working, and the bundle price applies to a complete set.

Built as theme code and a Shopify Function you own. No monthly per-store app fee, and no third party sitting between your customer and your checkout.

garusin-bundle.myshopify.com Password: garusin

A gift bundle photographed as separate items on white: a canvas tote, a potted fern, a bottle of olive oil, jarred spices in a wooden rack, candles, essential oils, a bowl of pasta, eucalyptus in a vase, a blanket tied with ribbon, a gift box and a mug.

WHAT TO CHECK

Three things worth checking in any bundle setup.

  • A synthetic SKU carries its own stock

    A "Starter Kit" product with an inventory number of its own, sitting alongside the boards and wax it represents. Sell six kits and the components' counts have moved apart from the kit's — until someone reconciles them by hand, or an app reconciles them and drifts.

  • Subscriptions lose their native path

    Shopify's Subscriptions APIs attach selling plans to real variants. A synthetic bundle product is not one, so subscriptions on bundles either sit outside the feature, or move onto the app's own billing and away from Shopify's.

  • The discount can outlive the bundle

    Where a bundle is three line items with a discount attached, removing one can leave the discount on the other two. The usual guard is JavaScript, which holds as far as the browser and no further.

HOW THIS WORKS INSTEAD

The bundle page is a display shell.

It has no inventory of its own, and it is never what enters the cart.

  1. 01

    Customer picks “Starter Kit”

    One choice on one page, from however many kits you have published.

  2. 02

    The cart receives real SKUs

    1× Complete Snowboard
    stock −1
    1× Ski Wax
    stock −1
  3. 03

    Checkout applies the bundle price

    But only if both components are still there.

Your warehouse sees two real items. Shopify sees two real variants. Subscriptions attach to them the way they always have. And the bundle price is decided at checkout by a Shopify Function reading server-side configuration — not by anything the browser can be talked into.

WHAT THAT BUYS YOU

Pricing that holds at checkout.

The bundle price is decided server-side, so it holds whatever the browser does. Measured on a live store:

What a customer pays for each attempt to get the bundle price without the bundle
What the customer does They pay
Buys the bundle $679.00
Deletes a component from the cart $699.95 full price, no discount
Posts a crafted request skipping the UI entirely $724.90 full price, no discount
Adds extra of one component Bundle price + full price on the extras
  • Stock counts that are simply correct

    No reconciliation job, no drift, and no overselling a component because a bundle claimed inventory of its own.

  • Native subscriptions on bundles

    Subscribe to a kit and every component lands on the same Shopify selling plan, in a normal Shopify subscription contract.

  • Bundles your team creates without a developer

    New bundle, new pricing, seasonal swap — all of it in Shopify Admin, using native Metaobjects. No deploy, no ticket.

  • Code you own

    It lives in your theme and your Shopify app. No recurring per-store licence, and nothing to migrate off if you change agencies.

WHAT IT NEEDS

Worth being straight about.

These are real constraints.

  • An OS 2.0 theme, Dawn-based. The cart integration is written against Dawn's components, and vintage themes cannot do this at all.
  • A Shopify Function, which means a Shopify app in your organisation. It needs no hosting — the function runs on Shopify's own infrastructure — but it does need deploying once.
  • Components must be real, published products with tracked inventory.
  • Subscriptions, if you want them on bundles, need every component on the same selling plan group.

WHAT'S OUT OF SCOPE

Where the scope ends.

Clear from the start, so you can plan around it.

  • The cart lists each component on its own line. Customers see the board and the wax separately, with the bundle price applied at checkout. Merging them into a single line is possible via Shopify's Cart Transform API — a further piece of work, available separately.
  • Bundles are curated sets you define. A "pick any 3" mix-and-match builder is a different build, and we can scope one.

QUESTIONS WE GET

Before you ask.

Will it slow the store down?
No. The bundle options are rendered server-side with the page. The pricing runs inside Shopify's checkout, not as a call to anything of ours.
What happens if a component sells out?
That bundle greys out automatically, with the missing item marked. It cannot be bought as a partial set.
Can we run several bundles on one page?
Yes — that is the normal case. One page, several kits, and the customer picks one.
What if we already use a bundle app?
The two cannot share the same products. Migration means moving bundle definitions across and retiring the app's synthetic SKUs; we would scope that first.
Who owns it afterwards?
You do. It is your theme and your app.

LOOK BEFORE YOU TALK TO US

The code is public. So is the reasoning behind it.

Theme code, the pricing function, 152 tests, and a written record of every decision — including the places Shopify's own documentation is wrong and the bugs we hit getting there. There is a live store to click through as well. Have your developer look at both. That is the point of publishing them.

Where to look in the repository for each question
If you want to check Read
That the pricing really can't be gamed discount-app/…/bundle-logic.js and its tests
How much work integration is docs/02-theme-integration.md
What your team's day-to-day looks like site/instructions.md
Whether we understood the tradeoffs docs/05-decision-log.md

That last one is the honest one. It records where the original design was wrong and what it cost to find out — including a bug that would have quietly sold incomplete bundles at full bundle price.

Talk to us

Tell us what you're selling and how your bundles are put together today, and we'll tell you honestly whether this is the right shape for it — including when it isn't.