> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crxbase.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Plan switching

> How users switch between subscription plans with automatic proration.

When you offer multiple tiers with recurring prices, your users can switch between them — including across tiers. crxbase handles the switch automatically, including proration through Stripe.

## 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.

<Steps>
  <Step title="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.
  </Step>

  <Step title="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.
  </Step>

  <Step title="User confirms">
    The subscription is updated on Stripe immediately. The user is redirected back to the pricing page with their new tier price active.
  </Step>
</Steps>

## 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's `getUser()` 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.

<Tip>
  Use [developer testing](/guides/platform/developer-testing/) on the pricing page to force recurring and lifetime states while you validate switching
  behavior.
</Tip>
