# Deprecate and archive extensions

Control new activations and what happens to extensions that app users already activated.

Deprecate when you need to make an extension version unavailable for new activations while allowing extensions already activated on that version to continue running. Archive when you need to move those activated extensions to another version or stop them from running.

## Understand extension lifecycle changes 

The lifecycle status determines whether app users can activate an extension version and what happens to activated extensions:

| Lifecycle choice | New activations | Activated extensions | App user action |
| --- | --- | --- | --- |
| Deprecation only | Blocked after deprecation | Continue running on the deprecated version | Optionally activate a supported version |
| Archive with a fallback version | Blocked after deprecation | Stripe moves them to the fallback version at archival | None, unless the app user prefers another version |
| Archive without a fallback version | Blocked after deprecation | Stop running at archival | Activate a supported version or remove the extension |
| Deprecate the entire extension | Blocked for every version after deprecation | Continue running until optional archival | Depends on whether archival is scheduled |

An extension moves through these lifecycle statuses:

- **Deprecation scheduled**: The extension remains available for new activations and activated extensions continue running before the selected hour.
- **Deprecated**: The extension becomes unavailable for new activations. Activated extensions continue running on the deprecated version. Stripe notifies app users who activated an affected version when deprecation takes effect.
- **Archived with a fallback version**: Stripe moves activated extensions to the selected fallback version. Stripe sends app users reminders before archival.
- **Archived without a fallback version:** Activated extensions stop running and use the extension point’s fallback behavior. Stripe sends app users reminders before archival.

Stripe applies lifecycle changes during scheduled processing for the hour you select in the Dashboard. The change might not take effect immediately at the start of that hour.

## Choose what to manage 

Choose the scope that matches the lifecycle change you need.

### Manage one extension version 

Manage one extension version when you need to replace or stop a specific version without changing the availability of other versions. You can deprecate the version by itself or schedule archival with or without a fallback version.

### Manage the entire extension 

Manage the entire extension when you need to apply deprecation to every version. You can also archive all versions. At archival, activated extensions stop running and use each extension point’s fallback behavior. Deprecating the entire extension prevents new activations for every version and prevents you from uploading versions for that extension until you reactivate it.

## Prepare a fallback version 

Before you archive an extension version and move activated extensions, prepare a compatible fallback version. The fallback version must:

- Be active.
- Belong to the same extension.
- Use the same semantic major version as the version you’re archiving.
- Use the same configuration schema as the version you’re archiving.
- Be available in every distribution channel where the version you’re archiving is available.

If no compatible fallback version is available, you can archive without one. At archival, activated extensions stop running and use the extension point’s fallback behavior.

Schedule archival at least 60 days after deprecation. This period gives app users time to respond to the deprecation notification and archival reminders.

## Deprecate an extension version 

To manage one extension version in the Dashboard:

1. Go to **Apps**, and select your created app.
2. Open **Details**.
3. In the Extensions row for the extension, open the overflow menu (⋯) and select **Manage versions**.
4. Select the version you want to manage.
5. Set the **Deprecation date** and **Deprecation time**. The Dashboard schedules changes by the hour.
6. To archive the version later, enable **Also archive this version**, set the `Archive date` and `Archive time`, and select a **Fallback version** if a compatible version is available. The archive time must be at least 60 days after the deprecation time.
7. Click **Review**. The review displays the number of app users with the affected version activated.
8. Click **Confirm**. Stripe handles the deprecation notification and archival reminders.

To deprecate the version without affecting activated extensions, don’t enable **Also archive this version**.

## Deprecate an entire extension 

> Deprecating an entire extension applies to every version and prevents new version uploads for that extension. To resume uploads, reactivate the extension itself. Reactivating the extension doesn’t automatically restore versions that you deprecated separately.

To manage an entire extension in the Dashboard:

1. Go to **Apps**, and select your created app.
2. Open **Details**.
3. In the **Extensions** row for the extension, open the overflow menu (⋯) and select **Manage extension**.
4. Set the **Deprecation date** and **Deprecation time**. The Dashboard schedules changes by the hour.
5. To archive every version later, enable **Also archive all versions** and set the **Archive date** and **Archive time**. The archive time must be at least 60 days after the deprecation time.
6. Click **Review**. The review displays the number of app users with an affected version activated.
7. Click **Schedule deprecation**. Stripe handles the deprecation notification and archival reminders.

## Change or stop a scheduled deprecation 

Before deprecation takes effect, return to **Manage versions** or **Manage extension**. Click **Edit** to change the schedule, or click **Stop deprecation** to cancel it. Stopping a deprecation also removes its planned archival.

## Reactivate or unarchive an extension 

For one extension version, return to **Manage versions** and select **Reactivate version**. After deprecation, reactivation makes the version available for app users to activate again and cancels a planned archival. After archival, reactivation restores the version’s lifecycle availability, but it doesn’t reverse every effect that occurred while the version was archived.

For an entire extension, return to **Manage extension** and select **Reactivate extension**. Select **Keep extension versions archived** to make the extension available for new version uploads while leaving existing versions deprecated or archived. Turn off this choice to return versions affected by the whole-extension deprecation to the states they had before that deprecation. Versions that you deprecated separately remain deprecated.

If the entire extension is archived, you can also select **Unarchive**. Unarchiving returns the extension to deprecated status, so it remains unavailable for new activations and version uploads until you reactivate it.

## See also

- [Learn how extensions work](https://docs.stripe.com/extensions/how-extensions-work.md)
- [Manage app versions and releases](https://docs.stripe.com/stripe-apps/versions-and-releases.md)
- [Test your app](https://docs.stripe.com/stripe-apps/test-app.md)
