How it works
When a user with an active subscription views your pricing page, recurring prices on other tiers show a Switch button instead of Subscribe.User clicks Switch
The user is taken to a confirmation page showing their current plan label + price and the target plan label + price side by side.
Proration is calculated
- Upgrading (moving to a higher tier or a more expensive price in the same tier): the user is charged a prorated amount for the remainder of the billing period. - Downgrading (moving to a lower tier or a less expensive price): the user receives a credit toward their next invoice.
Rules
| Rule | Behavior |
|---|---|
| One active subscription | Users can only have one active recurring subscription (monthly or yearly) per extension at a time |
| Lifetime blocks lower subscriptions | If a user has a lifetime purchase, they cannot switch to a subscription in the same tier or a lower tier |
| Same price | If a user tries to switch to their current price, they see an error |
What you need to do
Nothing — plan switching works automatically. As long as you have multiple tiers with recurring prices configured, the pricing page handles the UX. The library’sgetUser() reflects the updated plan after a switch.
If you set a custom price display name, crxbase uses it on the pricing and switch screens. Stripe checkout and billing still use the parent tier name.

