Source: https://www.revvly.ai/docs/guides/launch-bundle

Guide

# Launch a new *Bundle*.

From draft composition to a purchasable, fully-priced plan — with the publish-gap check standing between you and a subscription that can’t resolve a price.

## Start from published Modules

A Bundle composes Modules, so the Modules come first — each with its tiers, feature flags, and Variable Component refs already published. If a capability the new plan needs doesn't exist yet, publish that Module before touching the bundle.

- [Module concept ›](https://www.revvly.ai/docs/concepts/module)

## Compose the Bundle as a draft

Catalog → Bundles → New. Pin the Module versions the plan includes, add any bundle-level feature flags (say, priority-support on Enterprise only), attach extra Variable Components that only this plan carries, and choose the billing periods it can be sold on. Everything stays in Draft — nothing is purchasable yet.

- [Bundle concept ›](https://www.revvly.ai/docs/concepts/bundle)

## Ship a price in every currency you sell in

Set the bundle's base price, then make sure every Variable Component reachable from the bundle resolves to a price in every supported currency — a Global default is usually enough, with a bundle-scope override where this plan prices a component differently (setBundleComponentPrice, optionally per region and per billing term).

- [Variable Component Price concept ›](https://www.revvly.ai/docs/concepts/variableComponentPrice)

## Run the publish-gap check

publishGapCheck renders a per-component, per-currency coverage matrix for the draft. isPublishable is true exactly when no row has a missing currency — a component with no resolvable EUR price will fail EUR subscriptions later, so this gate is not optional.

## Publish

publishBundleDraftVersion validates the price chain and freezes the draft as an immutable new version. Existing subscriptions are untouched — they keep the version they pinned. The new version is what new subscriptions will pin from now on.

- [Bundle concept ›](https://www.revvly.ai/docs/concepts/bundle)

## Sell it

Create a subscription against the new bundle (createSubscriptionWithPricing) — it pins the bundle version, freezes the base price in the customer's currency, and emits a CREATED lifecycle event. If existing customers should move onto the new plan, that's a migration — see the versioning guide.

- [Subscription concept ›](https://www.revvly.ai/docs/concepts/subscription)

